使用的仓库地址: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
添加断点调试
评论