一、建立一个目录image
mkdir ~/image
mkdir ~/image/dev
cd ~/image
mknod -m 600 dev/console c 5 1
二、使用busybox构建小系统
在 busybox-1.15.2 目录下运行
make defconfig
make menuconfig 改为静态库
make
make CONFIG_PREFIX=~/image install
三、在 image 下创建必要的目录和设备文件
mkdir proc etc sys mnt
mknod -m 600 dev/null c 1 3
在 image 目录下写一个最简单的 init 脚本
#!/bin/sh
mount -t proc proc /proc
mount -t sysfs sysfs /sys
mdev -s
/bin/sh
chmod +x init
有些 busybox 配置中,mdev 命令需要读取/etc/mdev.conf 文件,为了避免出错信息,我
们创建一个空文件。
touch etc/mdev.conf
**************
将 init 脚本后面的/bin/sh 那行删除,并在 etc 目录下建立 init.d 目录,
mkdir etc/init.d
再把 init 文件移到 etc/init.d 目录下更名为 rcS
cd ~/image
mv init etc/init.d/rcS
将最后的/bin/sh命令删除
编写 etc/inittab
::sysinit:/etc/init.d/rcS
::askfirst:/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/sbin/swapoff -a
::shutdown:/bin/umount -a -r
::restart:/sbin/init
tty2::askfirst:/bin/sh
tty3::askfirst:/bin/sh
tty4::askfirst:/bin/sh
** initramfs不需要linuxrc,而且如果没有init文件,内核就不认为它是一个有效的initramfs,因而不安装它,导致内核panic。于是,我们在image目录下,把busybox安装的linuxrc改名为init:
mv linuxrc init
写mini linux的/etc/inittab
::sysinit:/etc/init.d/rcS
tty1::askfirst:/bin/sh
tty2::askfirst:/bin/sh
tty3::askfirst:/bin/sh
tty4::askfirst:/bin/sh
tty5::askfirst:/bin/sh
tty6::askfirst:/bin/sh
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
为了执行reboot命令时避免提示找不到/etc/fstab文件,我们再在etc目录下创建一个空文件:
touch fstab
***************
附:rcS
#!/bin/sh
mount -t proc proc /proc
mount -t tmpfs mdev /dev
mkdir /dev/pts
mount -t devpts devpts /dev/pts
mount -t sysfs sysfs /sys
/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
mount /dev/sda2 /mnt
mount /dev/sda5 /mnt/usr
mount -o move /proc /mnt/proc
mount -o move /dev /mnt/dev
mount -o move /dev/pts /mnt/dev/pts
mount -o move /tmp /mnt/tmp
mount -o move /sys /mnt/sys
killall -q hotplug2
exec switch_root /mnt /sbin/init
阅读(771) | 评论(0) | 转发(0) |