4.编译busybox

1,171 阅读2分钟

1、什么是busybox

BusyBox 是一个集成了三百多个最常用Linux命令和工具的软件。BusyBox 包含了一些简单的工具,例如ls、cat和echo等等,还包含了一些更大、更复杂的工具,例grep、find、mount以及telnet。

2、编译busybox

2.1、拷贝busybox

idle@linux:~$ mkdir study
idle@linux:~$ cd study/
idle@linux:~/study$ cp /share_win/busybox-1.33.0.tar.bz2 ./
idle@linux:~/study$ ls
busybox-1.33.0.tar.bz2

2.2、解压busybox

sudo apt install libncurses-dev -y
tar jxvf busybox-1.33.0.tar.bz2
mkdir -p busybox-build
cd busybox-1.33.0
make O=../busybox-build defconfig

2.3、生成编译 .config 文件

cd ../busybox-build

这里需要设置静态编译,编译出的二进制可以独立运行,不依赖其他库。

make menuconfig

在"Setting"(回车进入子菜单)-->选择"Build static binary (no shared libs)"(空格键选择)。选中后,选择界面下方 Exit 退出,最后会提示保存,选择 Yes,保存 .config。

截图.png

截图 (1).png

截图 (2).png

截图 (3).png

截图 (4).png

2.4、编译安装生成 initrd

# make 和 make install 执行成功后会在 busybox-build 目录下生成 _install 目录
make
make install

# 在 busybox-build 同级目录下创建 rootfs 目录
mkdir rootfs
cd rootfs
#不要忽略最后的一个点.
cp -ar ../busybox-build/_install/* .

# 创建软连接 init 指向 bin/busybox,内核启动到最后会执行 init 进程
ln -sf bin/busybox init
mkdir -p {sys,proc,dev,etc/init.d}

# 启动脚本,相当于 rc.local
touch etc/init.d/rcS 
chmod 755 etc/init.d/rcS
# etc/init.d/rcS内容见下方
vi etc/init.d/rcS

touch etc/fstab
 # etc/fstab内容见下方
vi etc/fstab

# 这里的 pigz 可以多线程压缩,需要安装 pigz,或者使用 gzip 替代。
sudo apt install pigz
find . -print0 | cpio --null -ov --format=newc | pigz -9 > ../initrd-busybox.img

rcS 文件内容如下,来自 tinycorelinux/Core-scripts:

#!/bin/sh
# RC Script for Tiny Core Linux
# (c) Robert Shingledecker 2004-2012

# Mount /proc.
[ -f /proc/cmdline ] || /bin/mount /proc

# Remount rootfs rw.
/bin/mount -o remount,rw /

# Mount system devices from /etc/fstab.
/bin/mount -a

clear

fstab 文件内容如下:

sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
udev /dev devtmpfs rw,nosuid,noexec,relatime,mode=755 0 0

上述命令执行成功后,会在 busybox-build 同级目录下生成 initrd-busybox.img,即 initrd。

3、参考文档

1、jackchan-x:qemu + gdb + busybox 内核调试流程

2、V4ler1an-有毒:QEMU + Busybox 模拟 Linux 内核环境