微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于嵌入式Cramfs 的根文件系统配置新方法

基于嵌入式Cramfs 的根文件系统配置新方法

时间:07-16 来源:互联网 点击:

Cramfs 复合而成的文件系统作为嵌入式系统的根文件系统,使Cramfs 根文件系统启动时挂 载YAFFS/YAFFS2 文件系统,同时将应用程序存放在YAFFS/YAFFS2 文件系统中。这种方 法解决了应用程序对根文件系统的写操作问题,但由于在通常的根文件系统之外还增加了一 个额外的可写型文件系统,必然会增大整个根文件系统所占的存储空间,造成嵌入式系统存 储资源紧张。本文在实践的基础上,通过对Linux Cramfs 根文件系统的研究,发现了一种通 过修改根文件系统启动脚本和配置文件来实现根文件系统的可读、可写性的新方法,它不需 要新增额外的文件系统来支持应用程序的读、写要求,而是利用根文件系统本身的特性来构 造一个局部可写的根文件系统。

3 嵌入式Linux 根文件系统的配置

3.1 Cramfs根文件系统配置文件的分析

Cramfs 根文件系统中的配置文件存放在/etc 目录下,有22 个文件及文件夹,可分为以 下几类:

引导和登录/注销类,包括/etc/issue、/etc/issue.net、/etc/rc.d/rc、/etc/rc.d/rc.local、 /etc/rc.d/rc.sysinit、/etc/rc.d/rc/rcX.d 等文件,它们主要记录系统的启动信息及运行级别等。

文件系统类,包括/etc/mtab、/etc/fstab、/etc/mtools.conf 文件等,它们记录着系统文 件系统的安装、卸载信息,系统启动时可以被安装的文件系统以及在这些文件系统上所定 义的操作。

系统管理类,包括/etc/group、/etc/nologin、/etc/passwd、/etc/rpmrc、/etc/securetty、 /etc/usertty、/etc/shadow、/etc/shells、/etc/motd 等文件,它们记录着系统用户和用户组的登 录信息、加密后的用户帐号密码信息、用户组的权限信息等。

网络类,包括/etc/gated.conf、/etc/networks、/etc/protocols、/etc/gateway、/etc/services、 /etc/inetd.conf、/etc/sysconfig/netword、/etc/recolv.conf、/etc/rpc、/etc/exports 等文件,它们 记录着系统对网络接口的配置信息、网络服务程序、网络协议、网络文件系统配置等信息。

系统命令类,包括/etc/lilo.conf、/etc/logrotate.conf、/et/identd.conf、/etc/ld.so.conf、 /etc/inittab、/etc/termcp 等文件,这些文件记录着要独占地控制系统的系统命令及动态链接 程序配置等信息等。

系统初始化脚本类,包括/etc/init.d 和/etc/rc/init.d 等文件,它们包含一些系统服务类 程序及系统启动脚本。

根文件系统对挂载文件系统的配置主要由两个文件决定,即fstab、init.d/rcS[3],fstab 描述了当前系统中已被定义好的可以被系统挂载的文件系统,init.d/rcS 文件描述了系统启 动时将启动的命令、服务程序及将要挂载的的文件系统。

由此可见,要使 Cramfs 根文件系统能满足应用程序的读写要求,必须在系统启动 时为应用程序挂载一个可写型的文件系统,即配置/etc/fstab 及/etc/init.d/rcS 文件来挂载可写 型的文件系统。

3.2 为Crmafs文件系统添加应用程序

要发布应用程序到嵌入式系统中,须将应用程序及应用程序所需要的共享库文件一起 添加到根文件系统中。根文件系统可以根据需要定制,但这样需要花费大量时间且工作量 大;也可以修改已有的根文件系统,这样可以节省大量的时间和精力,且不易出错[4]。

以下 是以蓝海微芯LJD-2410DVK-I 嵌入式开发板所提供的root.cramfs 根文件系统为基础进行修 改和配置的,root.cramfs 是只读型的文件系统,为了能向里边加入用户应用程序,需要将其 重新挂载、压缩及解压缩成新的目录,步骤如下:

在root.cramfs 的相同目录下新建立一个目录,如myroot。

在终端中执行命令:mount -o loop root.cramfs myroot, tar –cvf myroot.tar myroot。这两条 命令的功能分别是将已有的root.cramfs 以块设备的方式挂载到myroot 并将myroot 压缩为 myroot.tar。

为不出现目录重名,将 myroot.tar 拷贝到另一目录进行解压:tar –xvf myroot.tar,解压 出来的文件夹myroot 即是即将作为根文件系统的目录,它是可读可写的。

将已经交叉编译并调试过的用户目标程序拷贝到myroot 目录下的/usr/bin 目录下,此目 录为根文件系统中为用户程序准备的目录。同时将用户程序所需要用到的关联库文件拷贝到 myroot 目录下的/usr/lib 目录下,用户程序的关联库文件可通过ldd 命令查看,ldd 命令格式 如下:

Ldd [选项] 文件

选项有-v:打印ldd 的版本号;-d:执行符号重部署,并报告缺少的目标对象(只对ELF 格式适用);-r:对目标对象和函数执行重新部署,并报告缺少的目标对象和函数(只对ELF 格式适用);-h:帮助信息。

执行如下命令来查看应用程序所

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top