使用gdb调试kernel

作者 by adtxl / 2022-06-06 / 暂无评论 / 244 个足迹

使用的仓库地址:https://github.com/ADTXL/qemu_kernel

使用gdb+qemu调试kernel

0. 编译kernel

按照仓库的说明编译即可

1. qemu运行kernel

编译成功后,直接运行run_qemu_gdb.sh. 其中,脚本中的qemu启动命令如下:

 "$QEMU" -nographic -s -S -M virt -cpu cortex-a57 -smp 1 -m 512 -kernel "$imgdir"/Image \
                -drive id=disk0,file="$imgdir"/rootfs."$FSTYPE",if=none,format=raw \
                -device virtio-blk-device,drive=disk0 \
                -append 'root=/dev/vda rw mem=512M  console=ttyAMA0' \
                -netdev user,id=net0 -device virtio-net-device,netdev=net0

需要注意的是,与普通的启动相比,添加了-s -S参数,部分参数意义如下

-m  表示虚拟机预留的内存大小,如果不指定,默认大小为128M
-s  表示监听tcp:1234端口,等待GDB的连接
-S  表示虚拟机一启动就会暂停
-smp 表示虚拟机CPU的个数
-append 表示虚拟机的cmdline
-nographic 表示启动的是非图形界面的

2. gdb连接

按上述方式启动后,kernel会暂停等待GDB的连接, 使用如下命令连接

gdb vmlinux
target remote localhost:1234

注:在好多文档中都是这样写的,但在我用的虚拟机上需要使用下面两个命令,使用上面的命令连接不上

gdb-multiarch vmlinux
target remote localhost:1234

imagec865edea70b51226.png

添加断点调试

imagee207b62097edb727.png

独特见解