- 编译linux内核生成bzImage.
tar -xvf linux-source-5.0.0.tar.bz2
cd cd linux-source-5.0.0/
cp cp /boot/config-5.0.0-32-generic .config
make menuconfig
time make -j4
- 下载busybox
地址:
https://busybox.net/downloads/
- 编译busybox
tar -xvf busybox-1.30.0.tar.bz2
cd busybox-1.30.0
make menuconfig
配置:
Settings --->
Build Options --->
[*] Build BusyBox as a static binary (no shared libs)
编译:
make -j4
make install
- 制作 ramdisk, 在 busybox同级目录下创建目录 ramdisk 后,执行以下命令
#!/bin/bash
sudo rm -rf rootfs
sudo rm -rf tmpfs
sudo rm -rf ramdisk*
sudo mkdir rootfs
sudo cp ../busybox-1.30.0/_install/* rootfs/ -raf
sudo cp ../busybox-1.30.0/examples/bootfloppy/etc rootfs/ -raf
sed -i "s/tty2//g" rootfs/etc/inittab
sudo mkdir -p rootfs/proc/
sudo mkdir -p rootfs/sys/
sudo mkdir -p rootfs/tmp/
sudo mkdir -p rootfs/root/
sudo mkdir -p rootfs/var/
sudo mkdir -p rootfs/mnt/
sudo mkdir -p rootfs/lib64
#sudo cp -arf /lib/x86_64-linux-gnu/* rootfs/lib64/
#sudo rm rootfs/lib/*.a
#sudo strip rootfs/lib/*
sudo mkdir -p rootfs/dev/
sudo mknod rootfs/dev/tty1 c 4 1
sudo mknod rootfs/dev/tty2 c 4 2
sudo mknod rootfs/dev/tty3 c 4 3
sudo mknod rootfs/dev/tty4 c 4 4
sudo mknod rootfs/dev/console c 5 1
sudo mknod rootfs/dev/null c 1 3
sudo dd if=/dev/zero of=ramdisk bs=1M count=32
sudo mkfs.ext4 -F ramdisk
sudo mkdir -p tmpfs
sudo mount -t ext4 ramdisk ./tmpfs/ -o loop
sudo cp -raf rootfs/* tmpfs/
sudo umount tmpfs
sudo gzip --best -c ramdisk > ramdisk.gz
- 将生成的bzImage和ramdisk.gz拷贝到同一个目录后,启动kvm(一般启动)
qemu-system-x86_64 -kernel bzImage -initrd ./ramdisk.gz
执行后,结果:
6. 调试启动
qemu-system-x86_64 -kernel bzImage -initrd ./ramdisk.gz -S -s -m 1024
7. ctrl+alt+2进入qemu命令行界面, 输入gdbserver tcp::1234,建立并等待gdb连接
8. 打开另一个终端,执行 gdb,远程连接到待调试的内核。
9. 开始运行调试内核