新闻中心

EEPW首页>嵌入式系统>设计应用> 基于嵌入式Cramfs 的根文件系统配置新方法

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

作者: 时间:2012-07-16 来源:网络 收藏

网络类,包括/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 文件描述了系统启 动时将启动的命令、服务程序及将要挂载的的文件系统。

由此可见,要使根文件系统能满足应用程序的读写要求,必须在系统启动 时为应用程序挂载一个可写型的文件系统,即配置/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:帮助信息。

执行如下命令来查看应用程序所关联的库:

Ldd –v 程序名

将交叉编译工具目录下的/3.4.1/arm-linux/lib 下的libgcc-s.so.*,libstdc++.so.6 复制到 myroot 目录下的/root/lib 目录下。

3.3 配置根文件系统

为使能支持应用程序的写操作,需要修改文件系统的配置文件,即/etc 目录下的 文件。

(1) 修改/etc/init.d/rcS 文件

/etc/init.d/rcS 是Linux 的系统初始化脚本,修改步骤如下:

用 vi 或其它文本工具打开myroot 目录下的/etc/init.d/rcS 文件;

在文件中增加:

/bin/mount –n –t ramfs ramfs /mnt/yaffs(yaffs 是文件系统的一个目录);

/bin/mkdir /mnt/yaffs/Qtopia;

/bin/mkdir /mnt/yaffs/Qtopia/tmp。

保存并退出 vi 或文本工具。

根文件系统的配置如图 1 所示。

图1 根文件系统的配置

当系统启动并执行到系统初始化脚本/etc/init.d/rcS 时,mount 命令将/mnt/yaffs 目录挂载 为ramfs 类型的随机存储文件系统,并在此文件系统上建立Qtopia 和Qtopia/tmp 目录[5], /Qtopia/tmp 目录即为应用程序可能对文件系统进行写操作的临时文件目录,故应用程序便可 对/mnt/yaffs 目录进行读写操作,保障有读写操作要求的应用程序的正常执行。

(2) 修改/etc/profile 文件

用 vi 或其它文本工具打开myroot 目录下的/etc/profile 文件;

将 PATH 改为:PATH=/bin: /sbin: /usr/sbin: /用户程序目录名

在文件中新增以下语句:

LD_LIBRARY_PATH=/lib: /usr/lib: /用户库目录名

export PATH LD_LIBRARY_PATH

保存并退出 vi 或文本工具。

其中,修改环境变量 PATH 的目的是使系统命令/程序目录扩展到用户程序目录,这样, 当执行用户应用程序时,系统才能找到相应的共享文件等;修改LD_LIBRARY_PATH 的目的是将系统的共享库路径扩展为包含系统程序和用户程序库文件路径的库文件路径,以便在 运行用户程序时能使系统找到应用程序所使用的库文件。

4 制做Cramfs 根文件系统

制做Cramfs 根文件系统,即是把上述配置好的myroot 目录文件夹压缩成为能够让Linux 内核支持的Cramfs 格式的映像文件[6]。

制做 Cramfs 根文件系统需要用到mkcramfs 工具,mkcramfs 工具用来创建Cramfs 文件系统,它能把配置好的根文件系统压缩成Cramfs 格式的根文件系统,压缩比可达到2:

1,下面是mkcramfs 命令的格式:

mkcramfs [-h] [-e edition] [-i file] [-n name] dirnAME outfile

其中参数含义分别是-h:显示帮助信息;-e edition:设置生成的文件系统中的版本 号;-i file:将一个文件映象插入到文件系统中(只能在Linux2.4.0 以后的内核版本中使用); -n name:设定Cramfs 文件系统的名称;dirname:指明需要被压缩的整个目录树;outfile: 最终输出的文件。

将mkcramfs 工具拷贝到myroot 相同目录下,在终端中执行:

linux操作系统文章专题:linux操作系统详解(linux不再难懂)


评论


相关推荐

技术专区

关闭