我正在使用Qemu学习一些Linux内核开发/黑客技术,并希望调试Linux(2.6.34.3)的引导过程。我已经为ARM versatile平台编译了代码,并使用Codesourcery的arm-none-eabi交叉编译器。我使用Eclipse作为构建和调试环境,使用gdbserver进行调试。
所以我成功地在Qemu中构建和运行了内核,但问题在于我在启动过程中没有看到任何源代码(在地址0处)。只能看到反汇编代码。然而,在init/main.c(地址超过0xC0000000)切换到虚拟内存时,源代码就出现了,我可以查看源代码并跨越和逐步执行代码。为什么会这样?我想从一开始就看到源代码。
有没有人有关于如何调试Linux引导过程的提示?所有谷歌上的指南都展示如何从start_kernel()(位于init/main.c中)开始调试内核,而不是从引导过程的开始(位于arch/arm/boot/compressed/head.S中)。有经验的人帮助一下,谢谢!
查看根文件夹中的System.map文件,只有c0004000(虚拟地址开始的地方)的东西有符号。我将vmlinux加载到gdbserver中以获取调试信息,也许这就是为什么没有源代码的原因?
所以我成功地在Qemu中构建和运行了内核,但问题在于我在启动过程中没有看到任何源代码(在地址0处)。只能看到反汇编代码。然而,在init/main.c(地址超过0xC0000000)切换到虚拟内存时,源代码就出现了,我可以查看源代码并跨越和逐步执行代码。为什么会这样?我想从一开始就看到源代码。
有没有人有关于如何调试Linux引导过程的提示?所有谷歌上的指南都展示如何从start_kernel()(位于init/main.c中)开始调试内核,而不是从引导过程的开始(位于arch/arm/boot/compressed/head.S中)。有经验的人帮助一下,谢谢!
查看根文件夹中的System.map文件,只有c0004000(虚拟地址开始的地方)的东西有符号。我将vmlinux加载到gdbserver中以获取调试信息,也许这就是为什么没有源代码的原因?
arch/arm/boot/compressed/vmlinux.lds.in
已更名为arch/arm/boot/compressed/vmlinux.lds.S
。 - Ciro Santilli OurBigBook.com