linux - 如何使用GDB和QEMU调试Linux内核?

我对内核开发不熟悉,我想知道如何使用qemu和gdb运行/调试Linux内核。实际上我在读罗伯特·洛夫的书,但不幸的是,它不能帮助读者安装适当的工具来运行或调试内核…所以我所做的就是遵循这个教程。我使用Eclipse作为一个IDE来开发内核,但我想首先让它在QEMU/GDB下工作。所以到目前为止我所做的是:
1)编译内核时使用:

make defconfig (then setting the CONFIG_DEBUG_INFO=y in the .config)
make -j4

2)编译结束后,我使用以下命令运行qemu:
qemu-system-x86_64 -s -S /dev/zero -kernel /arch/x86/boot/bzImage

在“停止”状态下启动内核
3)因此我必须使用gdb,我尝试以下命令:
gdb ./vmlinux

正确运行,但是…现在我不知道该怎么办…我知道我必须在端口1234(qemu使用的默认端口)上使用远程调试,使用vmlinux作为调试的符号表文件。
所以我的问题是:我应该怎么做才能在QEMU上运行内核,将我的调试程序附加到它上,从而让它们一起工作,使我的生活更轻松地进行内核开发。


最佳答案:

我会尝试:

(gdb) target remote localhost:1234
(gdb) continue

使用“-s”选项可以使qemu侦听端口tcp::1234,如果您在同一台计算机上,则可以将其作为localhost:1234连接到该端口。qemu的'-s'选项使qemu停止执行,直到发出continue命令。
最好的办法可能是看一个像样的GDB教程来了解您正在做的事情。This one看起来不错。