Nuttx的源码构建和编译

下载源码

sudo mkdir Nuttx
cd Nuttx

  1. Nuttx:git clone https://bitbucket.org/nuttx/nuttx.git
  2. apps:git clone https://bitbucket.org/nuttx/apps.git
  3. tools:git clone https://bitbucket.org/nuttx/tools.git
  4. buildroot:git clone https://bitbucket.org/nuttx/buildroot.git

安装依赖库

  1. sudo apt-get install libncurses5-dev
  2. sudo apt-get install bison
  3. sudo apt-get install flex
  4. sudo apt-get install libgmp3-dev
  5. sudo apt-get install libmpc-dev
  6. sudo apt-get install libmpfr-dev
  7. sudo apt-get install binutils-dev
  8. sudo apt-get install gperf

配置编译工具

config//
board-name:是开发板的名称;config-dir:包含该板配置的子目录。
配置Nuttx只需要将config-dir文件中的三个文件复制到nuttx目录下即可。

  copy configs/<board-name>/<config-dir>/Make.def to ${TOPDIR}/Make.defs

Make.defs文件:描述了工具链编译和链接代码所需的规则。匹配工具链的特定需求时修改此文件。

  copy configs/<board-name>/<config-dir>/setenv.sh to ${TOPDIR}/setenv.sh

setenv.sh文件:可用来设置工具链二进制文件的PATH变量。(可选)

  copy configs/<board-name>/<config-dir>/defconfig to ${TOPDIR}/defconfig

defconfig文件:保存实际构建配置。被其他所有make文件包含,以确定构建中的包含内容。此文件还用于在
include/nuttx/config.h中生成C配置头。

  此时在Nuttx下面有三个文件夹 nuttx apps tools
  cd nuttx
  以stm32f4discovery为例:(nuttx支持的开发板在nuttx/configs下查看)
  将configs/stm32f4dicovery/winbuild 中的三个文件拷贝到nuttx目录下:
  sudo cp configs/stm32f4discovery/winbuild/Make.defs ./Make.defs
  sudo cp configs/stm32f4discovery/winbuild/setenv.bat ./setenv.sh
  sudo cp configs/stm32f4discovery/winbuild/defconfig ./.config

有关Nuttx的配置信息在:
${TOPDIR}/configs/README.txt
${TOPDIR}/configs/README.txt

在tools目录下有一个配置脚本,接下来我们需要使用它进行配置。
cd ${TOPDIR}/tools
./configure.sh /
同样的 参考tools/README.txt来学习此脚本。

更新配置

随着新配置设置的添加或删除等操作,可能造成依赖关系的更改,默认配置的内容可能会与构建系统不同步。因此,在配置之后和制作之前刷新每个配置。

  make oldconfig

配置步骤将.config文件复制到顶层nuttx目录中的位置,make oldconfig则将他们操作的.config文件更新。

Nuttx配置

接着上个实例说:
进入到nuttx文件夹,把下载解压后的buildroot放在nuttx目录下:
sudo mv …/buildroot ./
进入到buildroot目录下:
cd buildroot
执行:
sudo cp configs/cortexm3-eabi-defconfig-4.8.5 .config

sudo make menuconfig ------> 直接退出即可。

sudo make

这一步可能会出现:没有规则可以创建目标"include/arch"的错误
解决方法

我们进入到Nuttx目录下,进入到tools目录:
cd tools

cd kconfig-frontends

sudo ./configure --enable-mconf

sudo make

sudo make install

编译Nuttx

然后在进入到

cd …

cd nuttx/tools

执行

sudo ./configure.sh stm32f4discovery/nsh(nsh是通过usb链接的,uartnsh是通过串口链接的,这个后面再解释)

回到nuttx下,执行

make menuconfig

kconfig-mconf: error while loading shared libraries: libkconfig-parser-3.12.0.so: cannot open shared object file: No such file or directory

解决方法:将kconfig-frontends的安装路径(一般为 /usr/local/lib)添加到 /etc 目录下的 ld.so.conf 文件中,然后执行ldconfig工具:

sudo vim /etc/ld.so.conf

在文件中添加: include /usr/local/lib,保存并退出

sudo ldconfig

然后继续执行:

sudo make menuconfig

根据需求进行设置:

Build Setup---->

Build host platform(选择linux)

其余的根据自己的需求而定.

最后执行:sudo make

可能会出现:LN: include/arch to arch/arm/include

include/arch already exists but is not a symbolic link的错误

解决方法:sudo rm -r include/arch

继续执行sudo make

会生成:
CP: nuttx.hex
CP: nuttx.bin

你可能感兴趣的:(Linux基础)