2025-02-08
最近在学习内核相关的知识,所以有一个Linux内核调试环境是非常有必要的。我选择在ubuntu 24.04上使用qemu启动内核,主要是qemu启动速度快。qemu启动内核需要有下面的文件: 内核镜像, busybox, 文件系统。
内核版本6.12.8
安装编译内核的工具:sudo apt install build-essential flex bison bc
运行make menuconfig,修改下面的内核选项:
General setting -> Initial RAM filesystem and RAM disk (initramfs/initrd) support 启用Device Drivers -> Block devices -> RAM block device support 启用Device Drivers -> Block devices -> Default RAM disk size (kbytes) 设置为65535运行make -j 4 编译内核
busybox下载busybox 1.37.0
运行make menuconfig
Settings -> Build static binary (no shared libs) 启用运行make -j 4 编译busybox
安装qemu:sudo apt install qemu-system
创建目录:mkdir os
复制内核:cp linux-6.12.8/arch/x86/boot/bzImage os/
复制busybox: cp -rf busybox-1.37.0/_install os/fs
进入到fs目录,执行下面的命令:
mkdir -p etc dev mnt proc sys tmp mnt etc/init.dvi etc/fstab, 并添加下面内容:
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
vi etc/init.d/rcS,并添加下面内容:
echo -e "Welcome to tiny Linux"
mount -a
echo -e "Remount the root filesystem"
mount -o remount,rw /
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
chmod 755 etc/init.d/rcSvi etc/inittab ,并添加下面内容:
::sysinit:/etc/init.d/rcS
::respawn:~/bin/sh
::askfirst:~/bin/sh
chmod 755 etc/inittabdev目录,执行下面的命令:
sudo mknod console c 5 1sudo mknod null c 1 3sudo mknod tty1 c 4 1进入到os目录, 创建打包文件系统脚本:
vi rootfs.sh
#!/bin/sh
rm -rf rootfs.ext3
rm -rf tmpfs
dd if=/dev/zero of=./rootfs.ext3 bs=1M count=32
mkfs.ext3 rootfs.ext3
mkdir tmpfs
mount -o loop rootfs.ext3 tmpfs
cp -rf fs/* tmpfs
umount tmpfs
gzip --best -c rootfs.ext3 > rootfs.img.gz
chmod 755 rootfs.sh
sudo ./rootfs.sh
进入到os目录,运行qemu-system-x86_64 -kernel bzImage -initrd rootfs.img.gz -append "root=/dev/ram init=/linuxrc console=ttyS0" -serial mon:stdio -nographic启动qemu
内核编译出错
make[1]: *** No rule to make target 'debian/canonical-certs.pem', needed by 'certs/x509_certificate_list'. Stop.
make: *** [Makefile:1809: certs] Error 2
scripts/config --disable SYSTEM_TRUSTED_KEYSscripts/config --disable SYSTEM_REVOCATION_KEYSbusybox编译tc出错
make menuconfigNetworking Utilities -> tc (8.3 kb) 禁用