使用gdb调试qemu运行中的内核代码
2024-10-31 18:10:36
当前文章仅讨论gdb调试qemu中运行的linux内核,需要以下步骤:
- 确认目标内核开启了相关编译选项
- qemu加入gdb相关的启动参数
- 关闭内核的内核地址随机化
- 获取目标内核的debuginfo
确认目标内核开启了相关编译选项
这步没什么好说的,大部分发行版的内核都是支持的。
qemu加入gdb相关的启动参数
通过virsh命令编辑qemu的xml文件,加入以下启动参数:
1 | <domain type='kvm' |
或者
1 | <qemu:commandline> |
实际操作中发现,virt-manager修改无法生效,需要先dumpxml,再destroy,修改完之后再create.
关闭内核的内核地址随机化
通过修改内核的引导参数,加入”nokaslr”,启动后通过
1 | cat /proc/cmdline |
确认下是否顺利加入
获取当前内核的debuginfo
如果是自己编译的内核,直接拷贝相关的编译目录,使用其中的vmlinux即可。
如果是发行版的内核,使用以下命令获取debuginfo
1 | yumdownloader --debuginfo kernel |
解开rpm包之后,设置下gdb,开始使用即可。
过程中,如果需要切换内核,考虑以下办法
- 修改grub引导
- kexec