最近,公司开始搞新项目,需求使用一个RTOS,基本上就指定是Freescale家的MQX了。为了理解方便,先在linux下用手工的方式编译下。

编译前要先下载好GCC的工具链

gcc-arm-none-eabi-4_8-2014q3-20140805-linux.tar.bz2

然后编写一个sh文件来加载相关的环境变量。

解压MQX的源码文件,然后进入源码根目录下。首先要修改一个文件,以便可以使用工具链来编译整个系统:

build/common/make/global.mak

里面有TOOLCHAIN_ROOTDIR的变量,修改为工具链的路径即可。

因为MQX支持多个目标板,我这里以twrk60n512为例:

cd build/twrk60n512/make
./build_gcc_arm.sh

这样就可以编译MQX的所有Componments,编译完成后,会在lib/twrk60n512.gcc_arm/release下的各个componment目录下有相关的头文件和*.a的静态库文件。我在编译过程中,遇到两个小问题,解决如下:

1.缗译时出现creating command not found.

解决:这是由global.mk文件的最后那个PRINT引起的,把echo前的@删除即可。

2.编译时出现“stdbool.h”无法找到的问题

解决:stdbool.h文件在工具链的两个地方有出现,既然GCC无法找到,就手动将目录加到环境变量中:

C_INCLUE_PATH=/home/blackrose/freescale-mqx/gcc-arm-none-eabi-4_8-2014q3/lib/gcc/arm-none-eabi/4.8.4/include:${C_INCLUDE_PATH}

3.编译RTCS时,出现无法找到limits.h文件

解决:添加limits.h文件所在的目录到CINCLUDEPATH

export C_INCLUDE_PATH=gcc-arm-none-eabi-4_8-2014q3/lib/gcc/arm-none-eabi/4.8.4/include-fixed:$C_INCLUDE_PATH