임베디드 보드에서의 hello world인 LED blink를 CLI를 통해 빌드하는걸 보도록 하겠다.
코드는 다음과 같다.
#include "mbed.h"
#include "rtos.h"
DigitalOut led1(LED1);
// main() runs in its own thread in the OS
// (note the calls to Thread::wait below for delays)
int main() {
while (true) {
led1 = !led1;
Thread::wait(500);
}
}
mbed CLI 와 툴체인 설치하기
mbed CLI는 오프라인 툴이기 때문에 작업을 시작하기 전에 먼저 설치해 줘야만 한다. 또한 툴체인도 설치해 줘야 한다.
mbed CLI는 맥, 윈도우, 리눅스에서 모두 사용할 수 있다. CLI를 설치하기 위해서는 몇가지 먼저 설치해 줘야 하는 프로그램들이 있다.
Requirements
* Python - mbed CLI는 파이선 스크립트이기 때문에 파이선이 설치되어 있어야만 한다. mbed CLI는 파이선 버젼 2.7에서 테스트 되었다.
* Git and Mercurial - mbed CLI는 Git과 Mercurial을 모두 지원한다. 그러므로 둘 다 설치할 필요가 있다.
* 컴파일러와 툴체인 - 컴파일러를 포함한 툴체인을 설치해 줘야 한다. mbed OS 5는 GCC ARM toolchain, ARM Compiler 5, IAR 컴파일러를 모두 지원한다. 이 세가지 중에 하나를 골라 설치해 주면 된다.
Installing mbed CLI
mbed CLI는 pip를 사용해 설치할 수 있다.
$ pip install mbed-cli
C
reating and importing programs
mbed CLI는 프로그램을 만들거나 mbed OS 2 또는 mbed OS 5 기반의 프로그램을 import 할 수 있다.
Creating a new program for mbed OS 5
새 프로그램을 만들 때 mbed CLI 는 자동으로 최신 mbed OS 릴리즈를 import 한다. 각 릴리즈는 code, build tool, desktop IDE project generator 같은 모든 컴포넌트를 포함한다.
이제 'mbed-os-program' 이라는 새 프로그램을 만들어 보겠다.
$ mbed new mbed-os-program
[mbed] Creating new program "mbed-os-program" (git)
[mbed] Adding library "mbed-os" from "https://github.com/ARMmbed/mbed-os" at latest revision in the current branch
[mbed] Updating reference "mbed-os" -> "https://github.com/ARMmbed/mbed-os/#89962277c20729504d1d6c95250fbd36ea5f4a2d"
'mbed-os-program'이라는 새 폴더를 만들어 새 repository를 초기화하고 최신 리비젼의 mbed-os dependency를 프로그램 트리에 import한다.
mbed ls 명령으로 프로그램에 import된 모든 라이브러리를 볼 수 있다.
$ cd mbed-os-program$ mbed ls -a
mbed-os-program (mbed-os-program)
`- mbed-os (https://github.com/ARMmbed/mbed-os#9962277c207)
Adding libraries
코드를 작성하는 동안 어플리케이션에 다른 라이브러리를 추가할 필요가 있을수 있다. mbed add 명령으로 라이브러리를 추가할 수 있다.
$ mbed add https://developer.mbed.org/users/wim/code/TextLCD/
URL#hash 포맷으로 라이브러리의 특정 리비젼을 추가할 수 있다.
$ mbed add https://developer.mbed.org/users/wim/code/TextLCD/#e5a0dcb43ecc
Specifying a destination directory
라이브러리를 특정 디렉토리에 추가하고 싶으면 add 명령 뒤쪽에 디렉토리 이름을 추가 파라미터로 넘겨줄 수 있다.
$ mbed add https://developer.mbed.org/users/wim/code/TextLCD/ text-lcd
mbed CLI에서 이 기능을 지원하기는 하지만 가능하면 쓰지 않기를 권장한다. 소스 리포지토리와 다른 이름의 디렉토리에 라이브러리를 추가하는건 혼란을 불러 일으킬 수 있다.
Compiling code
먼저 mbed CLI에 컴파일러와 툴체인의 위치를 알려줘야 한다. 여기서는 GCC ARM 을 사용하겠다.
$ mbed config --global GCC_ARM_PATH /usr/local/gcc-arm-none-eabi/bin
위에서 빨간색 부분은 자신의 환경에 맞게 바꿔줘야 한다. arm-none-eabi-gcc 실행파일이 들어있는 디렉토리 이름을 써 주면 된다.
이 명령은 최초에 한번만 해 주면 된다.
mbed config --list 명령으로 현재 설정된 내용을 확인해 볼 수 있다.
$ mbed config --list
[mbed] Global config:
No global configuration is set
[mbed] Local config (/Users/****/tmp/mbed/mbed-os-program):
GCC_ARM_PATH=/usr/local/gcc-arm-none-eabi/bin
TOOLCHAIN=GCC_ARM
TARGET=K64F
$
Compiling your program
이제 mbed compile 명령으로 코드를 컴파일 할 수 있다.
물론 위에서 mbed new 명령으로 프로그램 폴더가 만들어 졌지만 아직 자신의 코드는 하나도 들어있지 않다. 그러므로 mbed-os-program 디렉토리에 main.cpp 파일을 만들어 맨 위쪽의 코드를 넣고 저장해 준다.
그리고 난 후 mbed compile 명령을 내리면 빌드가 끝나 보드에 넣어줄 수 있는 .bin 파일이 생성된다.
$ vi main.cpp
프로그램 코드를 입력한 후 저장하고 종료
$ mbed compile -t GCC_ARM -m K64F
Building project mbed-os-pgm (K64F, GCC_ARM)
Scan: .
Scan: FEATURE_BLE
...
Link: mbed-os-program
Elf2Bin: mbed-os-program
+---------------------+-------+-------+------+
| Module | .text | .data | .bss |
+---------------------+-------+-------+------+
| Fill | 164 | 4 | 2313 |
| Misc | 37733 | 2224 | 120 |
| features/frameworks | 3288 | 52 | 328 |
| hal/common | 2435 | 4 | 269 |
| hal/targets | 12108 | 12 | 200 |
| rtos/rtos | 22 | 4 | 0 |
| rtos/rtx | 5713 | 20 | 2682 |
| Subtotals | 61463 | 2320 | 5912 |
+---------------------+-------+-------+------+
Allocated Heap: 65536 bytes
Allocated Stack: 32768 bytes
Total Static RAM memory (data + bss): 8232 bytes
Total RAM memory (data + bss + heap + stack): 106536 bytes
Total Flash memory (text + data + misc): 64823 bytes
Image: ./.build/K64F/GCC_ARM/mbed-os-program.bin
$
위의 명령에서 -m 옵션은 타겟 시스템을 지정하는 것이고 -t 옵션은 컴파일러와 툴체인을 지정하는 것인데 여기서는 GCC ARM을 사용하기 때문에 GCC_ARM 을 써 줬다.
$ cd .build/K64F/GCC_ARM/
$ ls
total 2840
16 main.d 128 mbed-os-program.bin* 8 mbed-os-program_map.csv 16 test_env.d
8 main.o 400 mbed-os-program.elf* 8 mbed-os-program_map.json 16 test_env.o
0 mbed-os/ 2232 mbed-os-program.map 8 mbed_config.h
$
위에서 볼 수 있는것처럼 컴파일 된 바이너리와 elf image등은 .build 디렉토리 아래에 들어있다. 즉 저기서 mbed-os-program.bin 파일을 보드에 넣어주면 되는 것이다.
댓글 없음:
댓글 쓰기