基于BusyBox的Mini Linux 制作教程
基于BusyBox的Mini Linux 制作教程
一、准备工作
1.指定工作目录,例如: (/home/oopos/linux/os/mini/work)
export WORK="/home/oopos/linux/os/mini/work"
mkdir -p $WORK
export SRC=$WORK/src
mkdir -p $SRC
export ROOT=$WORK/ops
mkdir -p $ROOT
cd $WORK
2.源码下载
(1) Linux Kernel
Url: http://www.kernel.org
cd $SRC
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.35.7.tar.bz2
tar xvf linux-2.6.35.7.tar.bz2
export LINUX_SRC=$SRC/linux-2.6.35.7
(2) BusyBox
Url: http://www.busybox.net
cd $SRC
wget http://busybox.net/downloads/busybox-1.17.2.tar.bz2
tar xvf busybox-1.17.2.tar.bz2
export BUSYBOX_SRC=$SRC/busybox-1.17.2
二、编译操作
1.编译Linux Kernel
(1)创建编译后的文件的输出目录($LINUX_OBJ),默认为源码目录,即: $LINUX_SRC.
export LINUX_OBJ=${LINUX_SRC}-obj
mkdir -p $LINUX_OBJ
(2)内核配置
cd $LINUX_SRC
make O=$LINUX_OBJ menuconfig
说明:
此处建议参考有关内核配置指南,为了支持initrd内存盘文件系统,以下两项必选:
General Setup -> Initial RAM filesystem and RAM disk support
Device Drivers -> Block Devices -> RAM block device support
(3)编译及安装
make O=$LINUX_OBJ (前面可以加上: time 来计算编译耗时),如: time make O=$LINUX_OBJ
cd $LINUX_OBJ
(将bzImage拷贝到$ROOT目录)
cp linux-2.6.35.7-obj/arch/x86/boot/bzImage $ROOT
2.编译BusyBox
(1)BusyBox配置
cd $BUSYBOX_SRC
make menuconfig
因为要编译成静态链接库,所以要选上以下选项:
Busybox Settings -> Build Options -> Build Busybox as a static bindary
(2)编译及安装
make
make install
(3)根系统配置
cd _install
mkdir {proc,sys,etc,dev} (创建Linux内核需要的目录)
cd dev
mknod console c 5 1 (创建一个控制台字符设备文件)
mknod null c 1 3 (创建一个0设备文件)
cd ../etc
(创建fstab文件)
cat > fstab << EOF
# device mount-point type options dump fsck
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
EOF
mkdir init.d
cat > init.d/rcS << EOF
#!/bin/sh
mount -a
EOF
chmod +x init.d/rcS
cat > inittab << EOF
::sysinit:/etc/init.d/rcS
console::respawn:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
EOF
cd ..
(现在我们在根系统目录: $BUSYBOX_SRC/_install)
rm -f linuxrc
ln -sv bin/busybox init
(创建initrd镜像)
find . | cpio --quiet -H newc -o | gzip -9 -n > ../initrd.gz
cd ..
(将initrd.gz拷贝到$ROOT目录里)
cp initrd.gz $ROOT
三、启动配置
1.转到ROOT
cd $ROOT
ls
------------------
bzImage initrd.gz
------------------
现在我们得到两个文件: bzImage 和 initrd.gz
2.GRUB 引导
mkdir /ops
cp -rfv $ROOT/* /ops/
启动命令:
kernel /ops/bzImage root=/dev/ram0 rw
initrd /ops/initrd.gz
boot
至此,你应该可以看到一个完整的Linux控制台了