busybox 1.35.0 https://busybox.net/downloads/busybox-1.35.0.tar.bz2
sudo apt install make gcc libncurses-dev
编译配置:在busybox解压之后的目录下运行make menuconfig
1、Settings->Build static libary
2、两个工具包可以不用编译:
Coreutils->sync
Linux System Utilities -> nsenter
3、修改一个源码(可选),主要是支持显示中文的。libbb/printable_string.c
31、32两行注释、45行,注释 || c >= 0x7f
4、之后运行make进行编译:出现如下所示信息,表示编译成功。
这里一些提示Library m is needed,can't exclude it等等,可以不用担心。
接着执行make install会将编译结果安装到_install目录下,:
5、根据编译好的busybox制作根文件系统。
cd _install
mkdir etc proc sys mnt dev tmp
mkdir -p etc/init.d
cat >> etc/fstab<>etc/init.d/rcS<>etc/inittab< rootfs.img.gz
linux 5.18 https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.18.tar.xz
准备依赖环境
sudo apt install flex bison libelf-dev libssl-dev
make x86_64_defconfig
make menuconfig
修改Device Drivers->Block devices->Ram block device support 选中RAM block device support,注意要让前面的选项变为*,而不是M。 Default RAM disk size设置为65535。
make 就可以了,(第一次编译过程比较漫长),不需要make install
下面这一步不是必须的,如果执行make提示有报错xt_mark.h文件找不到,可以把系统上xt_mark.h头文件复制到对应的目录下。
/usr/include/linux/netfilter/xt_mark.h文件要复制到 include/uapi/linux/netfilter/下
qemu
sudo apt install qemu-system-x86
安装完qemu-system-x86之后,系统中自带了qemu-system-x86_64命令,接着,我们使用qemu-system-x86_64模拟linux系统。
qemu-system-x86_64 -nographic \
-kernel linux-5.18/arch/x86_64/boot/bzImage \
-initrd busy-box-1.35.0/rootfs.img.gz \
-append "root=/dev/ram rw rootfstype=ext4 console=ttyS0 init=/linuxrc"
linux启动之后,加载根文件系统,最后成功进入命令行。
需要注意的几个地方:
1、linux编译需要设置支持ram启动。
2、busybox编译之后,生成镜像,需要指定文件系统类型为ext4,虽然可以让系统支持ext3,但是这个需要设置,系统默认的是ext4。
3、运行最后一步,qemu模拟启动,如果出现io-apic + timer doesn't work,可以考虑在qemu启动命令的append参数中增加noapic或者no-timer-check。