MXOS-Cube는 MiCoder Tool/Micoder를 Compiler로 사용하고 있으며, MiCoder는 GCC Compiler를 기반으로 MXCHIP에서 개정한 것이다.
여느 컴파일러와 마찬가지로 “make” 명령을 사용하고 있다. 이 페이지에서는 MXOS-Cube의 make/makelib 명령에 대한 Manual 이다.
1. Make 명령 매뉴얼
기본적인 make 명령형식은 다음과 같다.
make 명령형식: mxos make <target> [total] [download] [run | debug] [JTAG=xxx] [VERBOSE=1] [JOBS=<jobs>]
⊕ 설명에서 컴파일과 빌드를 따로 구분하여 사용하지 않고 있으므로 문맥에 따라 이해 하도록 한다.
⊕ Build 결과 파일은 D:\mxos-project\demos\build 에 만들어진다. → 이 폴더는 최초의 Build 후에 만들어진다.
♦ <target> 의 형식: application@module_name [RTOS] [Networks Stack] [TLS] [debug]
◊ appliation@module_name
application: 프로젝트의 루트디렉터리로 부터 어플리케이션 위치를 지정, 디렉터리 구분은 “ .“으로 한다.
module_name: EMW3070, EMW3080, EMC3080, EMC3280, EMC3380, 등 → \mxos\module 에서 정의
예1) 어플리케이션의 위치= D:\mxos-project\demos\demos\helloworld
make 명령 → 프로젝트루트디렉터리>mxos make demos.helloworld@emw3070
또는 프로젝트루트디렉터리>mxos make helloworld@emw3070
예2) 어플리케이션의 위치=D:\mxos-project\demos\demos\net\http\client
make 명령 → 프로젝트루트디렉터리>mxos make demos.net.http.client@emw3070
또는 → 프로젝트루트디렉터리>mxos make net.http.client@emw3070
◊ [RTOS] → \mxos\MXOS\RTOS 에서 정의
어떤 RTOS 커널을 컴파일에 포함 할 것 인지를 결정한다. 따로 지정하지 않으면 FreeRTOS가 적용된다.
make 명령 → 프로젝트루트디렉터리>mxos make helloworld@emw3070@FreeRTOS
make 명령 → 프로젝트루트디렉터리>mxos make helloworld@emw3070@NoRTOS → Bootloader 이미지만 만들어진다.
◊ [Network Stack] → \mxos\MXOS\net 에서 정의
어떤 네트워크 스택을 적용할 것 인지를 결정한다. 디폴트 값은 LwIP 이다.
make 명령 → 프로젝트루트디렉터리>mxos make helloworld@emw3070@LwIP
◊ [TLS] → \mxos\MXOS\security 에서 정의
전송계층(Transport Layer)에 어떤 보안 모듈을 적용할 것 인지를 결정한다. 디폴트 값은 wolfSSL 이다.
make 명령 → 프로젝트루트디렉터리>mxos make helloworld@emw3070@wolfSSL
◊ [debug | release_log | release]
Debug, release_log, release 중 어떤 기능을 포함할 것 인지를 정한다. 디폴트 값은 release_log 이다
make 명령 → 프로젝트루트디렉터리>mxos make helloworld@emw3070@release_log
⊕ release_log 옵션을 사용하면 어플리케이션이 실행 될 때 UART 디버그 시리얼포트로 log 출력 기능을 갖추게 된다..
♦ [total]
total 옵션을 추가하면 total FW 이미지 “*.all.bin” 이 빌드된다. → all.bin=bootloader + wifi driver + application
total이 생략되면 어플리케이션 펌웨어 이미지만 빌드되며 이미지 파일은 “*. ota.bin” 이다.
make 명령 → 프로젝트루트디렉터리>mxos make helloworld@emw3070 total
⊕ 타겟 모듈에 total FW가 적재된 후 bootloader 와 wifi driver가 변경이 없다면 total 옵션 없이 어플리케이션만 빌드하여 모듈에 다운로드하여 실행할 수 있다.
♦ [download]
어플리케이션을 빌드한 후 생성된 이미지파일을 곧바로 Flash 메모리로 다운로드 할 것인 지를 결정한다.
make 명령 → 프로젝트루트디렉터리>mxos make helloworld@emw3070 total download
♦ [run | debug]
◊ run 옵션: 펌웨어를 다운로드 한 후 모듈을 리부팅하여 어플리케이션을 바로 실행
◊ debug 옵션: 펌웨어를 다운로드 한 후 모듈 내장 MCU에 대한 디버깅을 실행 → ex. JLINK(JTAG 에뮬레이터)를 사용해 FW 디버깅 가능
make 명령 → 프로젝트루트디렉터리>mxos make helloworld@emw3070 total download run
♦ [JTAG=xxx]→ mxos\makefiles\OpenOCD\interface 에서 정의
어떤 종류의 JTAG 에뮬레이터를 사용할 것인지 지정한다. 디폴트 값으로 jlink_swd 가 지정되어있다.
make 명령 → 프로젝트루트디렉터리>mxos make helloworld@emw3070 total download JTAG=jlink_swd
JTAG Emulator | 옵션 | 통신모듈 |
JLink SWD (Default) | JTAG=jlink_swd | 모든 모듈 |
JLink JTAG | JTAG=jlink | 모든 모듈 |
STLink | JTAG=stlink-v2 또는 stlink-v2-1 | EMW3165, EMW3166, EMW3239 |
♦ [VERBOSE=1]
컴파일 할 때 사용되는 모든 리소스와 명령어, 옵션들에 대한 Log를 보일지 선택한다. 디폴트 값은 VERBOSE=0 이다.
make 명령 → 프로젝트루트디렉터리>mxos make helloworld@emw3070 total download VERVOSE=1
♦ [JOBS=<jobs>]
컴파일러가 동작하는 머신(machin)의 컴파일 할 때 기동할 멀티스레드의 수를 제어한다. 컴파일 속도 향상에 대한 옵션으로 디폴트 값은 4 이다.
⊕ 컴파일 되는 어플리케이션(모듈)에 대한 옵션이 아니다.
make 명령 → 프로젝트루트디렉터리>mxos make helloworld@emw3070 total download JOBS=1
2. Makelib 명령 매뉴얼
소프트웨어 코드를 정적 라이브러리(static library)로 컴파일 하기 위해서는 mxos makelib 명령을 사용한다.
makelib 명령형식: mxos makelib [–new] <source>
♦ [–new]
컴파일 디스크립션(description) 파일dls “.mk” 파일을 생성한다.
♦ <source>
소스파일이 있는 디렉터리(directory)를 지정한다.
정적(static) 라이브러리 생성 과정은 다음과 같이 요약된다.
Step1. 확장자가 mk인 파일을 생성한다. → 명령: mxos makelib –new
Step2. mk 파일을 열어 정정 라이브러리를 컴파일하는데 필요한 컴파일러 파라미터, 매크로, 파일 탐색경로, 소스코드 파일들을 추가한다.
Step3. 정적 라이브러리를 만든다. → 명령: mxos makelib <source code>
아래 예시를 따라 정적(static) 라이브러리를 실제로 만들어 본다.
프로젝트의 디렉터리가 helloworld 이라 가정하면, helloworld\mxos-os\staticlib에 있는 소스코드들을 빌드해야 한다.
이 디렉터리 아래에는 mystaticlib.h” 와 mystaticlib.c이 있다.
먼저 현재의 경로를 프로젝트 루트디렉터리(helloworld)로 변경한다. .
step1. .mk 파일을 생성한다. → 명령: mxos makelib –new mxos-os/staticlib
이 명령을 실행하면 staticlib 디렉터리 아래에 staticlib_src.mk가 생성된다.
step3. staticlib_src.mk를 수정한다.
NAME := staticlib # Add compiler flags here $(NAME)_CFLAGS := # Add definations here $(NAME)_DEFINES := # Add includes path here, should be realtive path to current directory $(NAME)_INCLUDES := . # Add sources path here, should be realtive path to current directory $(NAME)_SOURCES := mystaticlib.c |
step3. 정적 라이브러리 파일들을 생성한다. → 명령: mxos makelib mxos-os/staticlib
이 명령을 실행하면 helloworld/mxos-os에 정적(static) 라이브러리가 생성될 것이다.
$ mxos makelib mico-os/mystaticlib Compiling mico-os/mystaticlib/mystaticlib.c Make staticlib.Cortex-M3.GCC.release.a DONE Compiling mico-os/mystaticlib/mystaticlib.c Make staticlib.Cortex-M4.GCC.release.a DONE Compiling mico-os/mystaticlib/mystaticlib.c Make staticlib.Cortex-M4F.GCC.release.a DONE |