开篇废话
之前看《Linux开发环境用户指南》的时候没看仔细,没有看到文件系统镜像制作的介绍,今天终于制作成功了,特地记录下制作的过程,便于以后回顾,本文只介绍JFFS2格式文件系统镜像的制作。
根文件系统简介
Linux的目录结构的最顶层是一个被称为“ /”的根目录。系统加载 Linux 内核之后,就会挂载一个设备到根目录上。存在于这个设备中的文件系统被称为根文件系统。所有的系统命令、系统配置以及其他文件系统的挂载点都位于这个根文件系统中。
根文件系统通常存放于内存和 Flash 中,或是基于网络的文件系统。根文件系统中存放了嵌入式系统使用的所有应用程序、库以及其他需要用到的服务。下图列出了根文件系统的顶层目录。
通用的 Linux 系统的根文件系统中会包括根文件系统顶层目录结构图中所有的目录, 不过在嵌入式系统中,需要精简根文件系统。部分可以被忽略的目录如下表所示。
制作根文件系统
根文件系统我们利用busybox来制作,首先需要获取busybox源代码,然后配置、编译和安装busybox,操作成功后开始制作根文件系统。
1)获取busybox源代码
成功安装SDK后,busybox完整源代码就存放在package/目录中。
2)配置busybox
进入busybox所在目录,进行配置操作需要输入如下命令:
hisilicon$ make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- menuconfig
busybox的配置界面和内核配置相似,其功能选项容易理解,可以根据自己的需求选择配置。
在 Busybox Settings ---> Build Options 中注意下面两个选项:
[*]Build BusyBox as a static binary (no shared libs)
(arm-hisiv100nptl-linux-) Cross Compiler prefix
其中:
1. 第一个选项选择是否把 busybox 编译成静态链接的可执行文件。如果选择该选项,编译出来的 busybox 就是静态链接的,运行时不依赖于动态库,但体积较大;清除该选项将得到动态链接的busybox,体积较小,但需要动态库的支持。
2. 第二个选项是用于选择 SDK 推荐的交叉编译器,配置好后保存并退出。
3)编译和安装busybox
编译和安装busybox的具体操作如下:
hisilicon$ make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linuxhisilicon$ make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- install
编译并安装成功后,在 busybox 目录下的_install 目录下生成以下目录及文件:
drwxr-xr-x 2 linux linux 4096 2005-04-22 11:01 bin
lrwxrwxrwx 1 linux linux 11 2005-04-22 11:01 linuxrc->bin/busybox
drwxr-xr-x 2 linux linux 4096 2005-04-22 11:01 sbin
drwxr-xr-x 4 linux linux 4096 2005-04-22 11:01 usr
4)制作文件系统
成功安装 SDK 后,在 osdrv/rootfs_scripts/目录中存放已制作好的根文件系统压缩包rootfs.tgz。
用户如有需要可在 busybox 的基础上制作根文件系统。
制作根文件系统的具体操作步骤如下:
1. hisilicon$mkdir rootfs
hisilicon$cd rootfs
hisilicon$cp –R package/osdrv/ busybox/busybox-1.16.1/_intsall/* .
hisilicon$mkdir etc dev lib tmp var mnt home proc
2. 配置 etc、 lib、 dev 目录的必需文件。
a. etc 目录可参考系统/etc 下的文件。其中最主要的文件包括 inittab、 fstab、 init.d/rcS文件等,这些文件最好从 busybox 的 examples 目录下拷贝过来,根据需要自行修改。
b. dev 目录下的设备文件,可以直接从系统中拷贝过来或者使用 mknod 命令生成需要的设备文件。拷贝文件时请使用 cp –R file。
c. lib 目录是存放应用程序所需要的库文件,请根据应用程序需要拷贝相应的库文件。
完成以上两个步骤,一个完整的根文件系统就生成了。
制作根文件系统镜像
为了使内核支持 JFFS2 文件系统,必须在编译内核时把 JFFS2 的选项加入(SDK发布的内核默认已经加入了支持)。在 make ARCH=arm CROSS_COMPILE=armhisiv100nptl-linux- menuconfig 后,进入“ File systems”,选择“ miscellaneous filesystems”,最后选中其中的“ Journalling Flash File System v2 (JFFS2) support”选项。
具体制作方法如下,在虚拟机终端输入如下命令:
hisilicon$ /usr/bin/mkfs.jffs2 -d rootfs -l -e 0x10000 -o rootfs_64k.jffs2
a. /usr/bin/mkfs.jffs2 为 mkfs.jffs2 文件的所在目录,操作之前可以用 chmod 修改该文件操作权限为 777
b. rootfs 为根文件系统的目录
c. 0x10000 代表Flash的块大小为64K
d. rootfs_64k.jffs2 为输出的文件名
具体参数说明如下表: