• 沒有找到結果。

第 4 章 嵌入式 LINUX 内核移植

4.4 建立 L INUX 根文件系统

4.4.1 根文件系统的基本介绍

本节主要讲述根文件系统的一些基本概念,包括根文件系统的一般目录结构,常见的根 文件系统和如何选择根文件系统。

4.4.1.1 根文件系统的基本目录结构

在根文件系统的最顶层目录中,每一个目录都有其具体目的和用途。一般建立一个正式 的文件系统结构是根据 FHS(Filesystem Hierarchy Standard)定义,FHS,即文件系统结构

(层次)标准,它在 Unix /Linux 操作系统的文件系统中用于确定在何处存储何种文件的标 准。例如,在/bin 目录下存放基本命令,在/etc 目录下存放设置文件等等。表 4.1 将提 供一个完整的 FHS 定义的根文件系统顶层目录。

目录名 内 容

bin 提供基本的用户命令库 boot 用于 BootLoader 的静态文件 dev 设备或其他的特殊文件

etc 系统配置文件,包括启动文件

home 多个用户的主目录

lib 基本的系统库,例如 C 库,内核模块等 mnt 用于临时挂载的文件系统

opt 可选择的软件包

proc 内核虚拟文件系统和进程信息

root 根用户的主目录

目录名 内 容

sbin 基本的系统管理二进制库

tmp 临时文件

usr 它的二级目录里包含许多应用程序和许多有用的文档,包括 X server var 一些变化的实例和工具等

对于经常使用 Linux 系统的读者来说,这些目录大部分应该很熟悉了。对于一般基于 PC 的 Linux 系统都是多用户的,而嵌入式系统通常都不是针对多用户的,所以根文件系统 目录会有较大的不同。例如/boot 目录,这个目录取决于你所使用的 BootLoader 是否能够重 新获得内核映象从你的根文件系统在内核启动之前。/home 这个目录在一般嵌入式 Linux 中 就很少用到。但通常目录:/bin,/dev,/etc,/lib,/proc,/sbin,/usr 这些都是必须有的。

通常这几个目录对初学者来说容易混淆,那就是/bin,/sbin,/usr/bin 和/usr/sbin。由于 这些目录有相似的目的,所以经常会混淆。/bin 目录一般存放对于用户和系统来说都是必须 的二进制文件,而/sbin 目录要存放的是只针对系统管理的二进制文件,该目录的文件将不 会被普通用户使用。相反,那些不是必要的用户二进制文件存放在/usr/bin 下面,那些不是 非常必要的系统管理工具放在/usr/sbin 下。此外,对于一些本地的库也非常类似,对于那些 要求启动系统和运行的必须命令要存放在/lib 目录下,而对于其他不是必须的库存放在 /usr/lib 目录就可以。

4.4.1.2 常见的根文件系统

常见的根文件系统有:RomFS、JFFS2、NFS、EXT2、RAMDISK、Cramfs 等。下面将 分别介绍各自文件系统的特点。

ü RomFS:是一个空间利用有效的只读文件系统,最初用于 Linux 和基于 Linux 的许多 项目。它是一个块文件系统,即利用块(或扇区)访问存储驱动(如磁盘,CD 和 ROM 驱动)。内核 2.4,2.5 和 2.6 代码都支持 RomFS。它有两个特点:一是只读属 性,如果你要使用一个 RomFS 文件系统的磁盘,必须预先写该磁盘的驱动程序,让 它看起来是一个块设备。二是要求存储空间最小,它是根文件系统中存储空间要求最 小的一个,因为没有修改日期,没有访问权限等属性。

ü JFFS2:JFFS2 是 The Journalling Flash File System, version 2 的缩写, JFFS2 是 Flash 嵌入式系统上应用最广的一个日志结构的文件系统。它提供的垃圾回收机制,使得我 们不需要马上对擦写越界的块进行擦写,而只需要将其设置一个标志,标明为脏块。

当可用的块数不足时,垃圾回收机制才开始回收这些节点。同时,由于 JFFS2 基于 日志结构,在意外掉电后仍然可以保持数据的完整性,而不会丢失数据。JFFS2 的不 足之处有挂载时间过长和扩展性较差等缺点。

ü

NFS:NFS 是 Network File System 的缩写,即网络文件系统。它是 FreeBSD 支持的 文件系统中的一种。 NFS 允许一个系统在网络上与它人共享目录和文件。通过使用 NFS,用户和程序可以象访问本地文件一样访问远端系统上的文件。它的优点有:一 是本地工作站使用更少的磁盘空间,因为通常的数据可以存放在一台机器上而且可以 通过网络访问到;二是用户不必在每个网络上机器里头都有一个 home 目录。Home 目录可以被放在 NFS 服务器上并且在网络上处处可用;三是软驱,CDROM,和 Zip®

之类的存储设备可以在网络上面被别的机器使用。这可以减少整个网络上的可移动介 质设备的数量。

ü EXT2:EXT2 是 The Second Extended Filesystem 的缩写,它最初发布于 1993 年 1 月。

它仍旧是当前一个主要的文件系统在 Linux 中,它还可用于 NetBSD, FreeBSD, the GNU HURD, Windows 95/98/NT, OS/2 和 RISC 操作系统等。其特点为存取文件的性 能极好,对于中小型的文件更显示出优势,这主要得利于其簇块取层的优良设计。其 单一文件大小与文件系统本身的容量上限与文件系统本身的簇大小有关,在一般常见 的 x86 电脑系统中,簇最大为 4KB, 则单一文件大小上限为 2048GB, 而文件系统 的容量上限为 16384GB。至于 Ext3 文件系统,它属于一种日志文件系统,是对 EXT2 系统的扩展。它兼容 EXT2,并且从 EXT2 转换成 EXT3 并不复杂。

ü RAMDISK:RAMDISK 存在于 RAM 中,其存取功能类似块设备。使用 RAMDISK 文件系统,在系统启动时,首先把外存(Flash)上的映像文件解压缩到内存中,构造起 RAMDISK 环境,然后可以开始运行程序。内核可以在同一时间支持多个活动的 RAMDISK,在 RAMDISK 上可以使用任何磁盘文件系统。RAMDISK 通常会从经压 缩的磁盘文件系统(例如 ext2)加载其内容,因此内核必须具备从存储设备取出 initrd

(initial RAM disk)映像作为它的根文件系统的能力。启动时,内核会确认引导选项 是否指示有 initrd 的存在,如果有就会从所选定的存储设备取出文件系统映像放入 RAMDISK,并且将它安装成根文件系统。

ü Cramfs:Cramfs 被设计为简单且非常小的可压缩的文件系统,它主要用于较小 ROM 的嵌入式系统。在嵌入式的环境之下,内存和外存资源都需要节约使用。如果使用

从外存储设备解压到 RAM 中,然后执行挂载。

ü 可恢复:当突然断电时能否恢复文件系统的修改

表 4.2 列出了常见的文件系统特点,在选择文件系统时一定要考虑到这些特点,从而选 择最适合的根文件系统。

表 4.2 常见文件系统特点

常见的文件系统 可写 可保存 可恢复 可压缩 存在 RAM CRAMFS No N/A N/A Yes No

JFFS2 Yes Yes Yes Yes No JFFS Yes Yes Yes No No Ext2 over NFTL Yes Yes No No No Ext3 over NFTL Yes Yes Yes No No Ext2 over RAM disk Yes No No No Yes

总之,在选择根文件系统时,如果你的系统有非常小的 flash,但是有相对比较大的 RAM,

建议选择 RAMDISK 作为根文件系统,因为该文件系统可以存在 RAM 磁盘被完全的压缩在 外存设备上。如果你的系统有稍微多的 flash 或者你希望保存尽可能多的 RAM 在实际的应 用程序运行时,Cramfs 根文件系统是一个不错的选择,尽管 Cramfs 的压缩率低于 RAMDISK,

但是它的性能通常对于许多嵌入式应用来说非常充分,因为它不要求永久保存数据。如果你 的目标系统需要能够更新在文件系统中,那么 Cramfs 将不是一个可行的选择。如果你需要 一个能够经常改变的文件系统,JFFS2 文件系统将是一个很好的选择,尽管 JFFS2 没有 Cramfs 那么高的压缩率,因为 Cramfs 没有垃圾回收和元数据结构,但是 JFFS2 提供了断电 可恢复的机制,这点是非常重要的在依靠 flash 存储的设备中。但是当你使用 NAND flash 设备时,JFFS2 是不可行的。

下面将以 Cramfs 根文件系统为例,讲述如何构建自己的根文件系统。