第 4 章 嵌入式 LINUX 内核移植
4.4 建立 L INUX 根文件系统
4.4.2 建立根文件系统
4.2.2.2 构建 Cramfs 根文件系统
Cramfs
是 Linux Torvalds 编写的只具备最基本特性的文件系统,它非常简单、经过压 缩并且只读,主要用于嵌入式系统,它具有以下限制。ü 每个文件最大不超过 16MB ü 不提供当前目录“.”和上级目录“..”
ü 文件的 UID 字段只有 16 位,GID 字段只有 8 位
ü 所有文件的时间戳为 Unix epoch(00:00:00 GMT, January 1, 1970)
ü 内存分页大小必须是 4096 字节 ü 文件链接计数器永远是 1
由于构建 Cramfs 映射需要使用 mkcramfs 和 cramfsck 工具,所以首先介绍以下这两个 工具的使用方法。
下面是 mkcramfs 的命令格式:
mkcramfs [-h] [-e edition] [-i file] [-n name] dirname outfile 其中个参数解释如下:
-h:显示帮助信息
-e edition:设置生成的文件系统中的版本号
cramfsck [-hv] [-x dir] file 其中个参数解释如下:
# mkdir myrootfs
# mkdir bin dev etc lib proc sbin tmp usr var
# mkdir usr/bin usr/lib usr/sbin
目录建立好以后,然后就要给各相应的目录复制相应的文件或库,例如给 lib 目录下要
# tar xjvf busybox-1.3.2.tar.bz2
# cd busybox-1.3.2
关于 BusyBox 的配置方法有以下几种: 果你希望选择尽可能多的配置项,那么就可以直接使用 make defconfig 命令,它会自动配置 为最大通用的配置选项,从而使得配置过程变得更加简单、快速。
配置完 BusyBox 后,接下来就要编译它,编译之前修改 BusyBox 源代码根目录下的
Makefile 文件,修改的内容是:ARCH=arm;CROSS_COMPILE=arm-linux-,修改的目的和 编译内核时修改是一样的,由于都是基于 ARM 平台,并且都是使用交叉编译环境制作。编 译过程非常简单,在命令行输入 make 即可,该编译过程一般需要几分钟完成。编译正确完 成后,执行安装命令,即执行 make install 命令。安装完成后,默认情况下,会在_install 目 录下生成 bin,sbin,usr/bin 和 usr/sbin 四个目录,并且在每个目录下都会有许多 busybox 可 执行文件的符合连接,busybox 可执行文件存在 bin 目录下。最后将这四个目录下的文件分 别 拷 贝 到 我 们 要 构 建 的 根 文 件 系 统 的 相 应 目 录 下 即 : myrootfs/bin , myrootfs/sbin , myrootfs/usr/bin 和 myrootfs/sbin 目录下。在准备好要构建的文件系统下所有库和文件后,下 面将使用 mkcramfs 工具来制作 Cramfs 根文件系统的映象。
图 4.3 BusyBox 的配置界面
执行以下命令将生成根文件系统的映象文件,下面的命令将生成名为 myrootfs.cramfs 的映像文件。
# mkcramfs myrootfs myrootfs.cramfs
然后通过 mount 命令来检查添加的根文件系统目录是否正确,通过以下命令实现,下 面 的 显 示 结 果 表 明 , 我 们 构 建 的 根 文 件 系 统 目 录 结 构 正 确 , 接 着 进 行 下 载 我 们 的 myrootfs.cramfs 根文件映象到开发板上,使用 DNW 或其他工具下载。
# mount –o loop myrootfs.cramfs /mnt
# cd /mnt
# tree –L 2 –d .
|-- bin
|-- dev
|-- etc
|-- lib
|-- proc
|-- sbin
|-- tmp
|-- usr
| |-- bin
| `-- sbin
`-- var 11 directories
到此,关于根文件系统的构建已经完成,读者可以阅读内核中 Documentation/filesystems 目录下的文档,从而了解更多关于文件系统的知识。
4.5 本章小节
本章主要讲述了嵌入式 Linux 系统内核移植的主要过程,本章的内容在实际中应用非常 广泛,并且涉及到的内容也非常多。本章首先讲述移植的基本概念,接着讲述内核移植前需 要哪些准备工作,然后重点讲述了内核的移植(内核配置、内核编译和内核下载),最后讲 述了如何建立自己的根文件系统(包括
Cramfs 和
BusyBox 工具介绍)。到此为止,第一部 分 ARM Linux 系统移植已经介绍完毕,其中主要讲述了嵌入式系统地基础概念,Linux 开 发环境,交叉编译工具链的制作,BootLoader 的开发和移植以及 Linux 内核移植,相信读者 通过学习和实践,已经对嵌入式系统的构建有了较深入的了解,如果读者希望再更加深入的 学习,请参考其它更高级的开发资料。下面将进入本书的第二部分 ARM Linux 系统驱动程 序设计,这部分内容是实际工作中非常重要并且必不可少的组成部分,相信很多读者对它会 感兴趣。4.6 常见问题
1.常见移植的几种情况?
参考答案:
a) 从一个硬件平台移植到另外一个硬件平台 b) 从一个操作系统移植到另一个操作系统 c) 从一种软件库环境移植到另一种软件库环境 2.通常 Linux 内核移植有哪些基本过程?
参考答案:
a) 对内核进行配置 b) 对内核进行编译 c) 将内核下载到目标板
3.通常根文件系统的目录有哪些?
参考答案:
目录名 内 容
bin 提供基本的用户命令库
boot 用于 BootLoader 的静态文件
目录名 内 容 dev 设备或其他的特殊文件
etc 系统配置文件,包括启动文件
home 多个用户的主目录
lib 基本的系统库,例如 C 库,内核模块等 mnt 用于临时挂载的文件系统
opt 可选择的软件包
proc 内核虚拟文件系统和进程信息
root 根用户的主目录
sbin 基本的系统管理二进制库
tmp 临时文件
usr 它的二级目录里包含许多应用程序和许多有用的文档,包括 X server var 一些变化的实例和工具等
5.Cramfs 工具包的作用?
参考答案:
利用 cramfs 工具包主要是为了生成 mkcramfs 和 cramfsck 两个工具,其中 mkcramfs 工 具是用来创建 cramfs 文件系统的,而 cramfsck 工具则用来进行 cramfs 文件系统的释放以及 检查。
6.BusyBox 工具的作用?
参考答案:
BusyBox 是很多标准 Linux 工具的单个可执行实现。BusyBox 包含了一些简单的工 具,例如 cat 和 echo,还包含了一些更大、更复杂的工具,例如 grep、find、mount 以及 telnet;有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。BusyBox 提供一个公平、完整 的 POSIX 环境用于许多小系统,它是一个可配置的工具,可以根据需要配置所需要的工具,
目前它已经提供了七十多种 Linux 上标准的工具程序,仅需要几百 KB 的磁盘空间,在嵌 入式系统中经常被使用。BusyBox 通过将很多必需的工具放入到一个可执行程序,并让它 们可以共享代码中相同的部分,从而对它们的大小进行了很大程度的缩减,BusyBox 对于 嵌入式系统来说是一个非常有用的工具。