首先,介绍下列几个定义
根文件系统:系统启动所必需的文件,如内核映像文件、内核启动后运行的第一个程序(init)、给用户提供操作界面的shell程序、应用程序所依赖的库,这些必需、基本的文件合称为根文件系统。
挂接点或安装点(mount point):Linux以树状结构管理所有目录、文件,其他分区挂接在某个目录上,这个目录就称为挂接点或安装点。
文件系统类型:分区上存储文件时,要遵循一定的格式,这种格式称为文件系统类型。(fat16、fat32、ntfs、ext2、ext3、yaffs、jffs2等)(虚拟文件系统类型:proc、sysfs等),常常把文件系统类型简称为“文件系统”。
FHS标准(Filesystem Hierarchy Standard,文件系统层次标准),定义了系统运行所需的最小文件、目录的集合,并列举了不遵循这些原则的例外情况及其原因。
/
|___ /bin 存放所有用户可以使用的、基本的命令。必须与根文件系统在同一个分区。
|___ /sbin 存放系统命令,管理员才能使用。还可存放在/usr/sbin、/usr/local/sbin,启动、修复系统
|___ /dev 存放设备文件。通过读写某个设备文件操作某个具体的外设。
|___ /etc 存放各种配置文件。
|___ /lib 存放共享库和可加载模块(驱动程序)。
|___ /home 用户目录,可选。
|___ /root 根用户目录。
|___ /usr 可存放在另一个分区,存放的是共享、只读的程序和数据。只读。
|___ /var 存放可变的数据,如spool(mail、news、打印机等用的),log文件、临时文件。
|___ /proc 空目录,作为proc文件系统挂接点。(常在/etc/fstab进行设置自动挂接)
|___ /mnt 通常为空目录,临时挂接某个文件系统的挂接点。/mnt/cdrom、/mnt/hda1
|___ /tmp 存放临时文件,通常为空目录。
在构造根文件系统时使用动态链接的busybox,构造根文件时需要在/lib目录下面放置glibc库文件。
1、编译安装busybox
首先修改busybox根目录下的Makefile,使用交叉编译器。在189行的ARCH?=$(SUBARCH)修改为ARCH?=arm,在164行的CROSS_COMPILE?=修改为CROSS_COMPILE?=arm-linux-修改后执行make;make install,在busybox的根目录下有_install文件夹,里面就是我们所生成的文件和目录如下所示:
由于每个版本的配置选项组织有所不同。不管怎样,我们注意以下选项就行了:
1) Support for devfs
2) Build BusyBox as a static binary ( no shared libs ) //将busybox编译成静态链接
3) Do you want to build busybox with a Cross Compile?
(/usr/local/arm/3.3.2/bin/arm-linux-) Cross Compile prefix //指定交叉编译器
4) init
5) Support reading an inittab file //支持init读取/etc/inittab 配置文件
6) (X) ash选中ash //建立的rcS脚本才能执行
7)ash
8)cp cat ls mkdir mv //可执行命令工具的选择,自己看着办吧,需要用到的就选上
9) mount
10) umount
11) Support loopback mounts
12) Support for the old /etc/mtab file
13) insmod
14) Support version 2.2.x to 2.4.x Linux kernels
15) Support version 2.6.x Linux kernels
16) vi
17)don’t use user
以上内容必须选上,其他可按默认值;如果要支持其他功能,如网络支持等,可按需选择.
2、建立root根目录root_nfs
进入root_nfs目录,通过mkdir dev etc home lib mnt opt proc root sys tmp var web目录
同时将 _install文件夹下的内容也放到root_nfs下,如下所示:
3、创建etc目录下的文件
3.1 创建etc/inittab文件
init进程根据/etc/inittab文件来创建其他子进程,比如调用脚本文件配置ip地址、挂接其他文件系统,最后启动shell等。
参考busybox源码下面的"examples/inittab"文件,创建inittab代码如下:
::sysinit:/etc/init.d/rcS//指定系统启动的脚本
::respawn:/bin/sh//打开一个登录会话
ttySAC0::askfirst:/bin/sh//打开一个无需登陆验证的shell,以ttySAC0作为控制台
::ctrlaltdel:/sbin/reboot//指定当按下ctrl+alt+del时执行命令
::shutdown:/bin/umount -a -r//关机时执行的操作
3.2 创建etc/init.d/rcS文件
rcS文件,借助启动脚本设置各种程序开机后自动运行,也可进行其他系统设置,创建的文件内容如下:
#! /bin/sh
ifconfig eth0 up XXX.XXX.XXX.XXX
mount -a
mk /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s