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.d
vi 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/rcS
vi etc/inittab
,并添加下面内容:
::sysinit:/etc/init.d/rcS
::respawn:~/bin/sh
::askfirst:~/bin/sh
chmod 755 etc/inittab
dev
目录,执行下面的命令:
sudo mknod console c 5 1
sudo mknod null c 1 3
sudo 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_KEYS
scripts/config --disable SYSTEM_REVOCATION_KEYS
busybox
编译tc
出错
make menuconfig
Networking Utilities
-> tc (8.3 kb)
禁用