1. 准备根文件系统
创建工作目录:$mkdir /rootfs
创建根文件系统的目录:$cd /rootfs
$mkdir bin dev etc home lib mnt proc sbin sys tmp var usr (12个目录)
$mkdir etc/init.d
2. 创建设备文件
复制当前系统的设备文件:$cp -dpR /dev /rootfs/dev
如果使用 linux 2.6.x.x 内核,应该有节点 console、null 。如果在 /rootfs/dev 目录下没有这些节点,则转到 /rootfs/dev/目录来创建:
$mknod console c 5 1
$mknod null c 1 3
缺少这些设备,会在启动 shell 时出现提示“Warning: unable to open an initial console. Kernel panic- not syncing: Attempted to kill init!” 的错误。
3. 准备目录系统启动所要的文件:linuxrc、rcS、inittab、fstab 四个文件。
linuxrc 文件(位于 "/")的内容如下:
#!/bin/sh
echo "mount /etc as ramfs"
/bin/mount -f -t cramfs -o remount, ro /dev/bon/2 /
/bin/mount -t ramfs ramfs /var
/bin/mkdir -p /var/tmp
/bin/mkdir -p /var/run
/bin/mkdir -p /var/log
/bin/mkdir -p /var/lock
/bin/mkdir -p /var/empty
#/bin/mount -t usbdevfs none /proc/bus/usb exec /sbin/init
rcS 文件位于/etc/init.d/)的内容如下:
#!/bin/sh
/bin/mount -a
这连个文件生成后,应该使其具有执行的权限,用chmod 来修改
inittab 文件位于 /etc 的内容如下:
#This is run first except when booting
::sysinit: /etcinit.d/rcS
#Start an "askfirst" shell on the console
#::askfirst: ~/bin/bash
::askfirst:~/bin/sh
#Stuff to do when restarting the init process
::restart: /sbin/init
# Stuff to do before rebooting
:: ctrlaltdel: /sbin/reboot
:: shutdown: /bin/umount -a -r
fstab 文件位于 /etc 的内容如下所示:
none /proc proc defaults 0 0
none /dev/pts devpts mode=0622 0 0
tmpfs /dev/shm tmpfs defaults 0 0
4. 将编译好的 BusyBox 的_install 目录下的三个文件夹用 tar 命令打包复制到 /rootfs 目录,解压后删除打包文件。
5. 将一些常用的 lib 文件复制到 /rootfs/lib/ 目录下,例如: ld-2.5.so、libc-2.5.so等文件以及其符号链接。注意这些lib 文件指的是交叉编译工具链的 lib 文件,即位于 /arm-linux-gcc/lib 下的lib 文件。在复制时应该注意采用打包后解包方式复制,以保证符号链接的正确性和完整性。
6. 生成CramFS 文件系统映像文件 cram.img
$ mkcramfs /rootfs cram.img
将工作目录 rootfs 作为根目录制作 CramFS 文件系统,这将经历一个处理和压缩的过程。压缩完成后,就可以测试下生成的 cram.img 文件了。
下面命令挂载 CramFS 的文件系统:
$mount -o loop -t cramfs /cram.img /mnt 将cram.img 文件系统加载到 /mnt
$ ls /mnt
7. 将映像文件 cram.img 下载并写入目标板的 root 分区,正确配置 Linux 的内核启动参数,启动。