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

嵌入式Linux 的Cramfs 根文件系统配置的解决方案

时间:12-12 来源:互联网 点击:

新方法,它不需 要新增额外的文件系统来支持应用程序的读、写要求,而是利用根文件系统本身的特性来构 造一个局部可写的根文件系统。

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:帮助信息。

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

Ldd –v 程序名

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

3.3 配置Cramfs根文件系统

为使Cramfs 能支持应用程序的写操作,需要修改文件系统的配置文件,即/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 是文件系统

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

网站地图

Top