AcmeIot-4-Nuttx系统启动流程

在AcmeIot前面的几篇分享中,给大家分享了基于Nuttx系统的几个有趣的应用,

如在esp32上运行nuttx做了一个wifi网络下的ROS节点和ROS2。

在Pixhawk飞控硬件上编译运行Nuttx系统。

Nuttx是一个非常有趣的RTOS,深入学习或者玩转这个系统,可以帮助我们学习很多关于操作系统、IOT方面很多有趣的知识,也能开发一些有意思的小东西。

这个系列我们分享一些关于Nuttx、RTOS以及IOT方面相关的知识,感兴趣的同学可以持续关注。

这一篇我们先聊一下Nuttx的系统启动流程。

我们以nuttx系统自带的demo board nuttx/boards/arm/stm32/stm32f4discovery bsp为例

下图为该bsp的系统启动流程:

由此Nuttx即完成系统初始化,进入用户的应用程序入口 CONFIG_USER_ENTRYPOINT

该入口为用户自行配置,有两种方式:

指向nsh_main

nsh_main是nuttx自带的一个终端,用户可以在nsh终端中执行脚本按顺序启动,一般情况下可以配置只读文件系统ROMFS下的rcS脚本,在该初始化脚本中指定应用的启动顺序。为了启用ROMFS的rcS脚本功能,需要使能以下配置

CONFIG_FS_ROMFS=y	#使能ROMFS文件系统
CONFIG_NSH_ROMFSETC=y	#Mount a ROMFS file system at /etc and provide a startup script at /etc/init.d/rcS
CONFIG_NSH_ARCHROMFS=y #设置nsh_romfsimg.h文件路径为boards/<arch>/<chip>/<board>/include

指向应用程序main函数

这种方式系统直接启动了指定的应用程序,对于一些单一任务的单片机应用而言是非常方便的。不过不方便控制多个应用程序的启动过程。

我的微信公众号,文章同步更新,欢迎关注。

微信公众号