基本制作过程

2017-03-14

基本制作过程

创建目录和文件

在imgae目录下创建dev, proc , sys , etc ,mnt 四个目录

创建如下两个设备文件

mknod -m 600 dev/console c 5 1

mknod -m 600 dev/null c 1 3

proc,dev,sys都是用来mount内核信息的。

etc是用来放配制文件的。

更详细请看“Linux 目录详解”

测试一下

加载内核信息

首先要加载内核信息。其中$INITRD为一环境变量,保存镜像文件夹的位置如“/initrd”。

mount -v --bind /dev $INITRD/dev

mount -vt devpts devpts $INITRD/dev/pts

mount -vt tmpfs shm $INITRD/dev/shm

mount -vt proc proc $INITRD/proc

mount -vt sysfs sysfs $INITRD/sys

更改根文件系统

chroot $INITRD /bin/sh

命令进入busybox的环境。出现shell的命令提示符,可以试着输入几个命令,看看执行结果。例如,输入 fdisk -l 命令看看是否能显示

mdev自动生成/dev下的设备文件

上节用chroot方法试验busybox时,为了简单,是用“绑定”的方式把主机的/dev中的设备文件映射到image目录下的dev目录。在initramfs上,这种方法显然不能使用。

生成系统的设备文件,现在通常都是用udev动态生成,而initramfs为了做到通用,动态生成的要求是必须的。在busybox中有一个mdev命令,就是用来动态生成设备文件,填充到/dev目录的。

在系统启动时,用

mdev -s

命令可以根据内核的sysfs文件系统在/dev目录中自动生成相应的设备文件。

命令执行前,需要先挂载内核的proc和sysfs虚拟文件系统。

最简init文件

在image目录下写一个最简单的init脚本,这也默认我们是用initramfs制作镜像了,linuxrc文件可以删除,只有在制作initrd时都用它。

#!/bin/sh

mount -t proc proc /proc

mount -t sysfs sysfs /sys

mdev -s

/bin/sh

系统最终会启动到一个shell交互环境,和测试一下中类似。前提是dev,proc,sys目录已经创建。

为init文件设置可执行权限,当前目录为镜像根目录:

chmod +x init

有些busybox配置中,mdev命令需要读取/etc/mdev.conf文件,为了避免出错信息,我们创建一个空文件。

touch etc/mdev.conf

mdev.conf文件是用 来控制mdev生成的设备文件的读写权限的,在这里我们不需要对设备文件设置特别的权限,就使用mdev缺省的660的权限设置。有关mdev的设备文件 权限的控制详细信息,可参考busybox源码树docs目录下的mdev.txt文件。

更多相关阅读

最新发布的文章