我正在使用 Qemu 学习一些 linux 内核开发/hacking,并想调试 Linux (2.6.34.3) 的启动过程。我已经为 ARM 多功能平台进行了编译,并且正在使用 Codesourcerys arm-none-eabi 交叉编译器。我使用 Eclipse 作为使用 gdbserver 构建和调试的环境。
所以我已经成功地在 qemu 中构建并运行了内核,但问题是我在启动过程(地址 0)的调试器中没有看到任何源代码,我只能看到反汇编代码。但是,当它在 init/main.c(地址超过 0xC0000000)处切换到虚拟内存时,会出现源代码,我可以看到源代码并单步执行代码。这是为什么?我从一开始就想要那个。
有人对如何调试 Linux 的引导过程有任何提示吗?google 中的所有指南都显示了如何调试内核,但它们都显示在 start_kernel() (位于init/main.c中),而不是从引导过程的开始(在arch/arm/boot/compressed/head.c 中)。 )。请有经验的朋友帮忙,谢谢!
查看根文件夹中的 System.map ,只有来自 c0004000 (虚拟地址开始)的东西的符号。我将 vmlinux 加载到 gdbserver 以获取调试信息,也许这就是为什么没有源?