下载Nuttx以及APP的源码包
https://sourceforge.net/projects/nuttx/files/nuttx/nuttx-7.17/nuttx-7.17.tar.gz
https://sourceforge.net/projects/nuttx/files/nuttx/nuttx-7.17/apps-7.17.tar.gz
下载完成后,解压缩至同一个目录下,比如/home/user/nuttx
/home/user/nuttx/nuttx-7.17
/home/user/nuttx/apps-7.17
注意:nuttx-7.17与apps-7.17一定要放在同一个目录下,编译的时候回自动寻找apps目录;
2.Nuttx的编译主要分为如下几个步骤
2.1 生成编译板卡的默认配置信息
以ATMEL板卡samv71-xult为例,TOPDIR为/home/user/nuttx/nuttx-7.17
$ cd /home/user/nuttx/nuttx-7.17/tools
$ ./configure.sh samv71-xult/nsh
注意:
必须切换到tools目录下再执行 ./configure.sh samv71-xult/nsh,否则会提示无法找到../configs目录
说明:
A> samv71-xult位于TOPDIR/configs目录下,是一种待编译的板卡配置;
上述操作完成如下内容
把TOPDIR/configs/samv71-xult/nsh/defconfig复制到NUTTX工程目录(TOPDIR下命名为.config,
把TOPDIR/configs/samv71-xult/nsh/setenv.sh复制到NUTTX工程目录TOPDIR/)下;
把TOPDIR/configs/samv71-xult/nsh/Make.defs复制到NUTTX工程目录(TOPDIR/)下;
B>NSH位于目录/home/user/nuttx/nuttx-7.17/configs/samv71-xult/下,samv7-xult平台的一个应用,后用户定制自己的应用时,可以改成自定义APP的名字,
此时用户可以手动执行make menuconfig进入图形界面进行详细配置,首次编译建议使用对应板卡形态的默认配置,随着对板卡的熟悉,逐步对系统进行裁剪和定制,添加和删除相关选项;
2.2 加载环境变量
切换至NUTTX工程目录(/home/user/nuttx/nuttx-7.17/),加载刚刚copy好的env文件
$ cd /home/user/nuttx/nuttx-7.17/
$ source ./setenv.sh
3.3 系统编译
切换至Nuttx工程目录,执行Make进行工程构建
$ cd /home/user/nuttx/nuttx-7.17/
$ make CROSSDEV=arm-none-eabi-
说明:
A> 由于前面环境配置时,已经把toolchain路径添加至PATH路径,因此这里直接执行make即可完成构建
B> 用户的toolchain名字如果不是arm-none-eabi-,这里的CROSSDEV可以其他的toolchain名字,比如CROSSDEV=arm-linux-
3.4 编译时遇到问题:
编译时会提示如下错误” error: target CPU does not support ARM mode”,
arm-none-eabi-gcc -M -fno-builtin -Wall -Wstrict-prototypes -Wshadow -Wundef -Os -fno-strict-aliasing -fno-strength-reduce -fomit-frame-pointer -mcpu=cortex-m3 -mfloat-abi=soft -I. -isystem /home/user/nuttx/nuttx-7.17/include -D__KERNEL__ -pipe
error: target CPU does not support ARM mode
定位下来是由于未打开如下两个编译选项导致
CONFIG_ARMV7M_TOOLCHAIN_CODESOURCERYL=y
CONFIG_ARMV7M_TOOLCHAIN_BUILDROOT=n
解决方法:
把上述编译选项添加至公共的Config.mk中
打开文件/home/user/nuttx/nuttx-7.17/tools/Config.mk
在最后面添加如下内容后再次编译OK
ifneq ($(CONFIG_WINDOWS_NATIVE),y)
CONFIG_ARMV7M_TOOLCHAIN_CODESOURCERYL=y
CONFIG_ARMV7M_TOOLCHAIN_BUILDROOT=n
endif
最后笔者文档水平有限,希望大家多多指点!!谢谢!