gdb调试内核全过程

编译内核

make i386_defconfig //32位架构
make menuconfig

使其可以调试
Kernel hacking —>
Compile-time checks and compiler options —>
[ ] Compile the kernel with debug info
可以利用网桥联网
Device Drivers —>
Network device support —>
[M] Universal TUN/TAP device driver support

make -j16  //编译

在编译好的linux内核中会有内核镜像
在这里插入图片描述

busybox

可以把BusyBox作为一个用户空间运行在qemu启动的内核中,思路是把BusyBox打包成一个小型文件系统结构,并且归档到cpio文件中,作为系统启动的initramfs运行起来,这样我们就可以拥有一个类似Linux的操作界面和工具集。
下载与编译

wget https://busybox.net/downloads/busybox-1.27.2.tar.bz2
tar -xf busybox-1.27.2.tar.bz2
cd busybox-1.27.2
make menuconfig

在这里插入图片描述

make -j8
make install

最终我们得到
在这里插入图片描述

创建文件系统

内核与文件系统知识见我另一篇博客
1、
新建一个文件夹,打开终端,新建rootfs文件夹
其中qemu_rootfs.img是文件名,1g是磁盘大小,根据需要修改。
创建ext4文件系统
挂载img文件到宿主系统:

qemu-img create qemu_rootfs.img  1g
mkfs.ext4 qemu_rootfs.img    
sudo mount -o loop qemu_rootfs.img  rootfs

2、
在挂载后的rootfs文件中创建所需文件,包括init文件

cd rootfs
sudo mkdir proc sys dev etc etc/init.d
cd etc/init.d
vim rcS
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
/sbin/mdev -s
chmod u+x rcS
cd ../../..
sudo umount rootfs

3、busybox中的文件复制进rootfs中,再取消挂载

cp -a  _install/*  rootfs
umount rootfs

开始调试

进入内核镜像所在的文件夹
在这里插入图片描述

执行命令

qemu-system-i386 -s -kernel bzImage -m 512M -hda qemu_rootfs.img -append "root=/dev/sda rootfstype=ext4 rw"

i386启动qemu、指定内核、指定文件系统、指定root、
-s表示-gdb tcp::1234缩写,监听1234端口、不开启图像

新建一个终端,找到这个
在这里插入图片描述
在这里插入图片描述

target remote tcp:localhost:1234
即可进入调试

PS:关闭qemu—在qemu的界面ctrl+a 再按x

猜你喜欢

转载自blog.csdn.net/qq_42882717/article/details/114646469