Nuttx的编译与构建
这篇文章是我编译和构建Nuttx的过程,也算是一篇笔记。主要内容如下:
- Nuttx的简介
- 编译环境搭建
- 编译步骤
- 下载到目标版
1.什么是Nuttx?
Nuttx是一个实时操作系统(RTOS),可以运行在8位至32位微控制器。它符合POSIX和ANSI标准 ,是一个类linux的操作系统。 —— [ 维基百科 ]
编译环境:xubuntu 14.10 32位
2.准备工作
在编译之前要先安装各种依赖包。
$ sudo apt-get install autoconf libtool gperf flex bison
$ sudo apt-get install autoconf2.13
$ sudo apt-get install libncurses-dev
$ sudo apt-get install libusb-1.0-0-dev
$ sudo apt-get install libsgutils2-dev
$ sudo apt-get install genromfs
编译Nuttx需要kconfig-frontends,下载并编译安装kconfig-frontends。
$ git clone https://github.com/jameswalmsley/kconfig-frontends.git
$ cd kconfig-frontends
$ ./bootstrap
$ ./configure --enable-mconf
$ make
$ sudo make install
$ sudo ldconfig
3.下载Nuttx
到Nuttx的Bitbucket下载源码,注意:除了Nuttx的源码还要下载app文件夹里的内容,并且把它和Nuttx的文件夹放到一起。
然后配置nuttx,这里根据使用的板子不同选择不同的配置文件,我这里使用的是STM32F4DISCOVERY。进入nuttx-7.15文件夹然后,进入tools文件夹,使用configure.sh拷贝相关文件。
$ cd nuttx-7.15/
$ cd tools/
$ ./configure.sh ../configs/stm32f4discovery/usbnsh
这里nuttx提供了两种与STM32F4DISCOVERY通信的方式,USB和UART。如果要使用USB与STM32F4DISCOVERY通信,则使用上述命令;如果使用UART与STM32F4DISCOVERY通信,则使用如下命令:
$ ./configure.sh ../configs/stm32f4discovery/nsh
最后还有一个不容忽视的一步:设置环境变量。在nuttx-7.15目录下,打开setenv.sh,根据你的情况修改TOOLCHAIN_BIN的路径,然后别忘了 ‘source ./setenv.sh’,所有这些完成后就可以编译了。
$ make oldconfig
$ make menuconfig
$ make
编译完成后会在nuttx-7.15目录下生成nuttx.bin
和nuttx.hex
两个文件。
4.下载可执行文件到目标板上
STM32F4DISCOVERY上自带了stlink,因此需要安装stlink驱动。下载并安装stlink。
$ ./autogen.sh
$ ./configure
$ make
安装完成后复制rules文件到/etc/udev/rules.d/
下:
$ cp stlink/etc/udev/rules.d/* /etc/udev/rules.d/
使更改生效:
$ sudo udevadm control --reload-rules
or
$ sudo restart udev
方便使用,可以将stlink相关命令添加到PATH1中.将STM32F4DISCOVERY连接到电脑上,现在可以测试stlink是否正确安装,输入st-util
,如果正常会显示:
一切正常,就可以将nuttx.bin
下载到板子里了:
$ st-flash write nuttx.bin 0x8000000
下载完成后,用USB线将板子与电脑连接上(此时STM32F4DISCOVERY的两个USB口都被使用了)就可以与电脑通信了,通过USB与电脑通信,此时板子会被电脑识别成ttyACM*
设备,通常ttyACM0
是stlink,ttyACM1
才是通信口。这里使用screen
命令连接nsh(nuttx的shell):
$ sudo screen /dev/ttyACM1
回车后,如果没有任何显示,按三下回车应该会有反馈。
输入help
可以查看命令:
这里有一张接口图,注意这里 “USB STLINK”应该是 “ttyACM0”,”USB Bootloader”应该是”ttyACM1”。
- echo “export PATH=$PATH:/path/to/dir” >> ~/.bashrc ↩