🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[toc] 飞控PX4用的嵌入式操作系统是NuttX,为了PX4,先学习NuttX,心急吃不了热豆腐,一步一步来。 ## NuttX 开发环境的搭建 ## Nuttx开发环境的目录结构如下图: | +---------+--------+ | | | nuttx/ apps/ tools/ 1. 安装ubuntu,更新系统所有package。 ``` sudo apt-get update ``` 2. 安装ARM交叉编译工具链ARM Toolchain ``` sudo apt-get install gcc-arm-none-eabi ``` 3. 安装Kconfig-frontends package 这个工具包是用来图形化配置NuttX系统的工具。安装过程挺特别,需要下载源码、编译、make和配置环境变量: * 下载源码 ``` git clone https://bitbucket.org/nuttx/tools.git ``` * 下载编译tools所需依赖包 ``` sudo apt-get install gperf libncurses5-dev flex bison ``` * 编译,安装(make install需要root权限) ``` cd kconfig-frontends ./configure --enable-mconf make make install ``` 4. 下载NuttX源码 ``` git clone https://bitbucket.org/nuttx/nuttx.git ``` 5. 下载NuttX之apps源码 ``` git clone https://bitbucket.org/nuttx/apps.git apps ``` ## 配置编译NuttX ## 下面以STM32F4 Discovery开发板为例介绍NuttX配置编译的步骤: 1. 切换至NuttX源码目录 ``` cd nuttx # 这步不产生输出,只是复制configuration至/nuttx/.config tools/configure.sh stm32f4discovery/usbnsh # nsh console/usb - usb终端输出,需要microUSB转USB线缆 # 或者 tools/configure.sh stm32f4discovery/nsh # nsh console/UART,2 - UART2终端输出,需要UART-TTL转USB电缆,如FTDI ``` 2. 用图形配置工具kconfig-frontends对工程配置 ``` make menuconfig ``` 用图形配置工具kconfig-frontends,在主界面,最主要的设置是设置编译的平台所用的操作系统 > Build Setup->Build host platform:Linux(甚至在Mac OS,这也是个很好的选择) 3. 编译工程 ``` make ``` > 注意,如果在menuconfig中没有正确选择编译平台的话,会产生如下错误 > make[1]: cygpath: Command not found,这是由于选择编译平台为windows而实际用的平台为linux 编译生成文件nuttx,elf格式,可以通过SWD/JTAG电缆烧录,stm32f4discovery开发板有两个usb接口,miniUSB接至板载的ST-Link SWD/JTAG调试器。stm32f4discovery开发板可以通过任何支持USB ST-Link的主机烧录程序,microUSB连接至STM32F407之OTG-FS端口,NSH console终端仅支持linux,版本17.13不支持windows ### 问题1 ### kconfig-mconf路径的问题: 成功编译安装kconfig-frontends工具后,会发现如下错误提示: > kconfig-mconf: error while loading shared libraries: libkconfig-parser-3.8.0.so: cannot open shared object file: No such file or directory make: *** [menuconfig] Error 127 针对该问题有两个解决方法: 1. 添加kconfig-frontends库所在的目录(通常是 /usr/local/lib)至文件(/etc/ld.so.conf),然后执行命令 ldconfig 2. 编译kconfig-frontends工具时,配置环境变量LD_RUN_PATH,如下: ``` ./configure --enable-mconf LD_RUN_PATH=/usr/local/lib make make install ``` 3. 仅用静态库编译工具kconfig-frontends: ``` ./configure --enable-mconf --disable-shared --enable-static ``` I have also been told that some people see this error until they re-boot, then it just goes away. I would try that before anything else. ### 问题2 ### 1. [Getting Started with NuttX -- LM3S6965-EK (Ubuntu Linux)](http://www.nuttx.org/doku.php?id=wiki:getting-started:lm3s6965-ek) 1. make编译时出现以下错误: ``` ERROR: arm-nuttx-eabi-gcc failed: 127 ``` 这是由于在配置时(make menuconfig)没有选择合适的工具链,该该开发板用的编译链为Generic GNU eabi ,而不是arm-nuttx-eabi-xxx。重新打开配置工具(make menuconfig),选择工具链: > System Type -> Tool chain selection -> Generic GNU eabi tool chain under linux >之前默认是Buildroot(Cygwin or Linux) ### 参考文档 ### 1. 善用代码仓库的文档(nuttx/Documention),在这里有对系统很详细系统的介绍,包括用户手册和开发这手册: * 《NuttX RTOS Porting Guide》,开发手册; * 《NuttX C Coding Standard》,编程风格; * [《Getting Started with NuttX -- STM32F4 Discovery (Unix)》](http://www.nuttx.org/doku.php?id=wiki:getting-started:stm32f4discovery_unix) 2. 其它参考 * 博客[Linux环境下的Nuttx开发环境搭建](https://blog.csdn.net/qq_29912325/article/details/47857743); * 博客[NuttX配置和编译](https://blog.csdn.net/liqiuhua2016/article/details/53318581); * 百度文库[linux下建立nuttx开发环境](https://wenku.baidu.com/view/a1a38f36195f312b3069a5a5.html)