主页:BusyBox
这个题目挂了很久了,一直想写一点但是又觉得没什么好写的。因为从原理来说,busybox真的不难,没有太多特别的东西,就是一个进程完成了之前很多进程干的活。这样减少了空间暂用。
看了下编译出来1.1M,确实挺感人的。
用法其实也很简单,把以前的命令作为参数就可以了。
其实后面去看看各个命令的实现,我觉得还是很有趣味的。。
然后比较有趣的一点,是可以用busybox制作构建最小系统。列一下制作过程:
mkdir -p rootfs/{bin,sbin,etc,proc,sys,usr/{bin,sbin}}
cd busybox-<version>
make menuconfig # 配置 BusyBox
make
make CONFIG_PREFIX=../rootfs install
sudo mknod -m 600 rootfs/dev/console c 5 1
sudo mknod -m 666 rootfs/dev/null c 1 3
创建初始化脚本inittab
cat > rootfs/etc/inittab << EOF
::sysinit:/etc/init.d/rcS
::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
::shutdown:/bin/umount -a -r
EOF
创建启动脚本rcS
mkdir -p rootfs/etc/init.d
cat > rootfs/etc/init.d/rcS << EOF
#!/bin/sh
mount -t proc proc /proc
mount -t sysfs sysfs /sys
echo -e "\nWelcome to BusyBox!"
EOF
chmod +x rootfs/etc/init.d/rcS
打包根文件系统
cd rootfs
find . | cpio -o --format=newc > ../rootfs.cpio
cd ..
gzip rootfs.cpio
制作内核
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.4.124.tar.xz
tar -xvf linux-5.4.124.tar.xz
cd linux-5.4.124
make defconfig
make menuconfig
#General Setup -> Initial RAM filesystem and RAM disk (initramfs/initrd) support
#General Setup -> Configure standard kernel features (expert users) -> Enable support for printk
#Device Drivers -> Block devices -> RAM block device support
make -j4
make modules -j4
#内核镜像位于arch/x86/boot/bzImage
使用qemu启动
qemu-system-x86_64 -kernel ../bzImage -initrd rootfs.cpio.gz -append "console=ttyS0" -nographic
不幸的是加载fs的时候失败了,空了再研究吧。。。