Nuttx romfs与启动脚本rcS

本文详细介绍了Nuttx操作系统中的romfs文件系统及其制作过程,包括生成romfs映像文件和制作romfs头文件。此外,还讲解了启动脚本rcS的制作与执行,以及APM飞控中的romfs生成。rcS脚本语法包括基本命令、if...else...、while和until循环等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ARM系统上电后,系统将flash地址映射到零地址处,处理器从零地址处开始运行第一条指令。而在零地址处,一般是系统复位中断向量,此处存放的是一条跳转指指令,通过该条换指令,处理器运行复位服务函数。Cortext-M系列的实现稍有不同,它的零地址处放置的栈指针,接着才是复服务函数地址。

复位服务函数开始处是由汇编语言编写,借助汇编函数调用C函数,将系统带到C函数中。Nuttx的C入口函数便是os_start(),在os_start()执行操作系统地初始化。

Nuttx操作系统初始化完成后,首先创建第一个进程,idle线程便是这第一个进程的线程。有了第一个进程,系统接着创建用户进程,即在os_bringup()函数中,调用os_do_appstart()创建init进程。init进程的第一个默认线程是nsh_main。nsh_main调用nsh_consolemain()函数,先运行romfs文件系统上的启动脚本,然后nsh_main线程进入nsh交互界面。至此,操作系统完全启动。其他进程,或者线程可以通过启动脚本启动运行,或者通过nsh启动。。

在默认情形下,nsh_main线程将运行romfs中“/etc/init.d/rcS”这个启动脚本上的命令。romfs启动脚本有它自己的语法,Nuttx中的sh可以解析这些语法,并执行相关的命令。这些命令可以设置进程环境变量,读取环境变量,或者启动其他线程。

这一节将说明Nuttx制作romfs的方法,接着说明如何定制romfs,即让Nuttx在启动的过程中能够运行我们制作的启动脚本。最后我们对启动脚本的语法进行简要说明。

1. romfs简介

romfs,顾名思义是在rom中实现的一种文件系统,linux 2.1.21版本中最早支持该文件系统。这种文件系统是基于块存储介质的只读文件系统,具有体积小、读取速度快、可靠性高的优点。它的缺点是,这种文件系统是只读的,而且对文件的描述信息很少,没有访问权限限制。

romfs通常用在嵌入式系统中,用来存储系统模块,只读的文件等,将其部署在EEPROM或者其他块存储设备中。

更多关于romfs文件系统的模块结构和协议,以及驱动程序,可以在网上搜索。

2. 制作romfs

在linux系统下使用“genromfs”工具来生成romfs映像文件,该映像文件可以被挂载到系统中作为只读文件系统。

2.1 生成romfs

这里在linux系统下演示一下生成并挂载romfs文件系统。首先主机上创建我们所要生成romfs的目录和文件,比如目录romfs_dir。通过”tree”命令查看该目录结构

$ tree romfs_dir
romfs
|——dir_a
|    |——a.txt   
|——dir_b
     |——b.txt

2 directories, 2 file

写入字符串”this is a.txt”到a.txt文件,写入字符串”this is b.txt”到b.txt文件。

使用”genromfs”命令将romfs_dir文件夹制作成一个romfs映像,并挂载到系统”/mnt”。”genromfs”命令使用方法可以通过”genromfs -h”查看。在romfs_dir所在目录下执行命令:

$ genromfs –f romfs.img –d romfs_dir –v –V “romfstest”

上面genromfs命令工具以文件夹romfs_dir为输入,生成romfs.img二进制映像文件,映像卷名为”romfstest”。”-v”参数使得”genromfs”输出详细信息。

我们通过”mount”命令将生成的romfs挂载到系统”/mnt”下,并查看其内容是否符合预期。

$ sudo mount romfs.img  /mnt –o loop
mount: warning: /mnt seems to be mounted read-only
$ tree /mnt
/mnt
|——dir_a
|    |——a.txt   
|——dir_b
     |——b.txt

2 director
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值