NXP

genromfs的使用及nuttx下romfs制作

2019-07-12 11:53发布

前言

这篇文章仅仅是为了记录如何使用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: " echo "e-mail: " echo "h.vern: " echo "s.vern: " 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制作的启动文件就完成了~