genromfs的使用及nuttx下romfs制作

本文介绍如何使用genromfs工具制作ROMFS文件系统,并在Nuttx系统中使用。主要内容包括genromfs工具的下载及使用、nsh脚本编写、ROMFS制作过程、Nuttx系统中注册ROMFS等。

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

=====>我的博客目录导航

前言

这篇文章仅仅是为了记录如何使用genromfs制作romfs然后在nuttx上直接应用,不会去详细介绍romfs的一系列特性

genromfs

首先去下载genromfs,也可去github上下载,我下载的是 0.5.2 26 Jun 2007 21:13这个版本;
下载下来后解压缩:
这里写图片描述

先来明确下我们的目的:
1.使用genromfs生成一个romfs;
2.编写一个nsh脚本,实现开机自动运行一个APP;

编写nsh脚本

#这里就实现一个之前编写好了的app
echo 
echo "The script of start up."
echo "author: <pengw>"
echo "e-mail: <alvin1991@foxmail.com>"
echo "h.vern: <v0.0.1.1318>"
echo "s.vern: <v0.0.1.1141>"
echo 
if  motor_ctrl -s
then
        echo motor_ctrl start.
else
        echo motor_ctrl start error.
fi

制作romfs

创建一个文件夹romfs,在该文件夹下创建init.d文件夹,再在init.d文件夹下创建文件rcS,目录结构如下:
romfs
|——init.d
|——rcS
我们现在rcS文件中写入上面的脚本,然后开始制作:
终端进入到romfs目录下,执行下面的命令;

$ genromfs -f romfs.img -d romfs -v -V "romfs"
0    romfs                [0xffffffff, 0xffffffff] 37777777777, sz     0, at 0x0     
1    .                    [0x804     , 0x141b49  ] 0040775, sz     0, at 0x20    
1    ..                   [0x804     , 0x140e9e  ] 0040775, sz     0, at 0x40     [link to 0x20    ]
1    init.d               [0x804     , 0x141af1  ] 0040775, sz     0, at 0x60    
2    rcS                  [0x804     , 0x141b43  ] 0100664, sz   240, at 0x80    
2    .                    [0x804     , 0x141af1  ] 0040775, sz     0, at 0x190    [link to 0x60    ]
2    ..                   [0x804     , 0x141b49  ] 0040775, sz     0, at 0x1b0    [link to 0x20    ]

然后就会在文件夹目录下发现生成的romfs.img;
这里写图片描述

Nuttx系统中注册romfs文件系统,需要romfs文件系统头指针,以便将文件系统编译链接进可执行文件。所以,需要将romfs映像文件生成一个头文件。

Linux系统下的”xxd”工具命令能够将标准输入或者给定的二进制文件输出到文件或者标准输出。关于”xxd”工具命令的详细使用方法可以通过”xxd -h”或者”man xxd”命令查看。如果使用”-i”参数,”xxd”可以输出C语言头文件形式的文件。

我们以上节中生成的romfs映像文件制作一个c语言头文件,头文件名为nsh_romfsimg.h, 而头文件nsh_romfsimg.h中的数组名为romfs_img。命令如下:

$ xxd -i romfs.img nsh_romfsimg.h

然后就会得到对应的头文件:
这里写图片描述

nuttx运行实验

Nuttx系统在nsh_main线程中,通过调用nsh_initialize()函数,进而调用nsh_romfsetc()向系统注册romfs,并挂载到默认的位置”/etc”目录。
1.注意,nsh_romfsetc()需要配置CONFIG_NSH_ROMFSETC;
2.另外,也需要系统支持ROMFS,即CONFIG_FS_ROMFS文件系统选项需要启用。
这里写图片描述
根据自己脚本的需要决定是否去掉Disable if-then-else-fi和Disable loops

我们需要做的是生成romfs头文件,将其放置到系统的某个位置(默认位置为apps/nshlib目录,如果配置了CONFIG_NSH_ARCHROMFS,则放置到config/< board >/inlclude目录),重新编译系统。将生成的romfs头文件nsh_romfsimg.h放置到apps/nshlib目录,确保头文件nsh_romfsimg.h中数组名为”romfs_img”,重新编译下载系统,并运行。

到这里romfs制作的启动文件就完成了~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值