Nuttx学习
NuttX 是一个实时操作系统 (RTOS),强调标准合规性和占用空间小。可从 8 位扩展到 64 位微控制器环境,NuttX 中的主要管理标准是 POSIX 和 ANSI 标准。
NuttX 的主要环境依赖性是 (1) GNU make,(2) bash 脚本,和 (3) Linux 实用程序(例如 cat、sed 等)。
1. 安装依赖项
sudo apt install \
bison flex gettext texinfo libncurses5-dev libncursesw5-dev \
gperf automake libtool pkg-config build-essential gperf genromfs \
libgmp-dev libmpc-dev libmpfr-dev libisl-dev binutils-dev libelf-dev \
libexpat-dev gcc-multilib g++-multilib picocom u-boot-tools util-linux
sudo apt install \
bison flex gettext texinfo libncurses5-dev libncursesw5-dev \
gperf automake libtool pkg-config build-essential \
libexpat-dev gcc-multilib g++-multilib picocom \
libssl-dev
2. KConfig前端
NuttX 配置系统使用KConfig,它通过一系列基于交互式菜单的前端公开,是kconfig-frontends包的一部分。
git clone https://bitbucket.org/nuttx/tools.git
$ cd tools/kconfig-frontends
$ # on Linux do the following:
$ ./configure --enable-mconf --disable-nconf --disable-gconf --disable-qconf
$ make
$ make install
configure完正确的输出如下:
CC libs/parser/libs_parser_libkconfig_parser_la-yconf.lo
CCLD libs/parser/libkconfig-parser.la
CC frontends/conf/frontends_conf_kconfig_conf-conf.o
CCLD frontends/conf/kconfig-conf
CC frontends/mconf/frontends_mconf_kconfig_mconf-mconf.o
CCLD frontends/mconf/kconfig-mconf
CC utils/utils_kconfig_gettext-gettext.o
CCLD utils/kconfig-gettext
GEN frontends/kconfig
GEN utils/kconfig-tweak
3. 下载NuttX
Apache NuttX 在 GitHub上,有两个主要的库,nuttx和apps,后者在技术上是可选的(但建议使用完整的功能集)
mkdir nuttxspace
cd nuttxspace
git clone https://github.com/apache/nuttx.git nuttx
git clone https://github.com/apache/nuttx-apps apps
4. 编译
4.1 初始化配置
列出所有支持的配置,您可以执行以下操作:
cd nuttx
./tools/configure.sh -L | less
teensy-2.0:usbmsc
teensy-2.0:nsh
teensy-2.0:hello
arduino-mega2560:nsh
arduino-mega2560:hello
#:nsh
要选择配置,请将选项传递给并指明您的主机平台。
例如:: configure.sh
4.2 选择配置
cd nuttx
./tools/configure.sh -l stm32f4discovery:nsh
-l表明我们在 Linux 上使用,选择完配置之后,就会在source root目录生成.config文件,删掉这个文件,重新执行命令,就可以再生成一次。
同时,选择配置后会生成Make.def的符号链接,指向选择的Make.def文件,
然后,可以使用menuconfig自定义此配置:
cd nuttx
make menuconfig
4.3 构建NuttX
cd nuttx
make
nuttx构建将通过在目录内生成二进制输出来完成。通常这包括nuttx ELF 文件(适用于使用调试gdb)和一个nuttx.bin 可以flash的文件。
4.4 NuttShell(NSH)
NuttShell 是 NuttX 中使用的一个非常完整的 shell 系统,类似于 bash 和其他类似的选项。在 NSH 提示符下输入 help 命令以查看实际可用的命令。
访问NuttShell
picocom -b 115200 /dev/ttyUSB0
或者:
gtkterm -s 115200 -p /dev/ttyUSB0
5. 模拟器
Apache NuttX 有一个模拟器,可以在 Linux、Mac 和 Windows 计算机上作为常规程序运行。它可用于调试与特定设备驱动程序无关的操作系统功能,例如 TCP/IP 堆栈本身、应用程序的 Web 界面或 API,或其他通信协议。
5.1 配置模拟器
使用sim:nsh基本的 NuttX Shell 配置
cd nuttx
./tools/configure.sh sim:nsh
make
5.2 运行模拟器
./nuttx
login: admin
password: <Administrator>
User Logged-in!
修改模拟器默认用户名密码:Application Configration ‣Nsh Library ‣ Cosole login:
修改后:
$ ./nuttx
login: admin
password: <admin>
User Logged-in!
nsh> hello
Hello, World!!
nsh> poweroff
6. 调试
NuttX 具有强大的系统日志记录工具 (syslog),具有info、warn和error级别。您可以使用menuconfig系统为子系统或功能的构建启用调试。
调试选项配置在Build Setup ‣ Debug Options下:
- Enable Debug Features,此项将打开子系统级调试选项。
- Enable Error Output,这只会产生错误信息输出。
- Enable Warnings Output,这将产生警告和错误信息输出。
- Enable Informational Debug Output,这将产生info,warn和error级别信息输出。
7. 目录结构
nuttx/arch
- 该目录包含多个子目录,每个子目录包含特定于体系结构的逻辑。将 NuttX 移植到新处理器的任务包括在arch/ 包含特定于新架构的逻辑下添加一个新的子目录。
nuttx/binfmt
- binfmt/子目录包含将文件系统中的二进制文件以可用于执行它们的形式加载到内存中的逻辑。
nuttx/audio
- audio/子目录包含 NuttX 音频子系统
nuttx/boards
- boards/子目录包含每个板的自定义逻辑和板配置数据。
- board板特定配置子目录
- < boards/arch-name> / //configs
- 如:boards/arm/stm32/nucleo-f103rb/configs
nuttx/crypto
- crypto子目录包含 NuttX 加密子系统。
nuttx/drivers
- crypto子目录包含与体系结构无关的设备驱动程序。
nuttx/fs
- fs子该目录包含 NuttX 文件系统。
nuttx/graphics
- graphics子目录包含 NuttX 下的图形/视频支持文件。
nuttx/include
- 目录包含 NuttX 头文件。
nuttx
- 这几乎是一个空的目录,用于存放生成的静态库。
nuttx/libs/libc
- 目录包含一组标准的类 libc 函数,带有 NuttX 的自定义接口。
nuttx/mm
- 这是 NuttX 内存管理器。
nuttx/net
- 该目录包含 NuttX 网络层的实现,包括内部套接字 API。
nuttx/sched
- 构成 NuttX RTOS 核心的文件位于此处。
nuttx/syscall
- 该目录包含一个系统调用接口,可用于用户模式应用程序和内核模式 RTOS 之间的通信。
nuttx/tools
- 该目录包含一组工具和脚本,用于简化配置、构建和维护 NuttX。
nuttx/wireless
- 该目录包含对独立于硬件的无线支持的支持。
nuttx/Makefile
- Makefile目录中的顶层$(TOPDIR)包含构建 NuttX 的所有顶层控制逻辑。
参考
- 入门
- https://nuttx.apache.org/docs/latest/quickstart/index.html
- 模拟器
- https://nuttx.apache.org/docs/latest/guides/simulator.html