linux-kernel – Qemu arm Linux内核启动调试,没有源代码

linux-kernel – Qemu arm Linux内核启动调试,没有源代码,第1张

概述我正在使用Qemu学习一些 Linux内核开发/黑客,并希望调试Linux的启动过程(2.6.34.3).我已经为ARM多功能平台编译并使用Codesourcerys arm-none-eabi交叉编译器.我使用Eclipse作为使用gdbserver构建和调试的环境. 所以我已经成功地在qemu中构建并运行内核,但问题是我在启动过程中没有看到调试器中的任何源代码(在地址0),我只能看到反汇编代码 我正在使用Qemu学习一些 Linux内核开发/黑客,并希望调试linux的启动过程(2.6.34.3).我已经为ARM多功能平台编译并使用Codesourcerys arm-none-eabi交叉编译器.我使用Eclipse作为使用gdbserver构建和调试的环境.

所以我已经成功地在qemu中构建并运行内核,但问题是我在启动过程中没有看到调试器中的任何源代码(在地址0),我只能看到反汇编代码.但是,当它在init / main.c(地址超过0xC0000000)切换到虚拟内存时,会出现源代码,我可以看到源代码并逐步完成代码.这是为什么?我从一开始就想要那个.

任何人都有关于如何调试linux的启动过程的任何提示?谷歌中的所有指南都显示了如何调试内核,但它们都显示在start_kernel()(位于init / main.c中)而不是从启动过程的开始(在arch / arm / boot / compressed / head中). S).有经验的人请帮忙,谢谢!

Looked into the System.map in the root folder and there is only symbols for stuff from c0004000 (where the virtual address start). I load vmlinux into gdbserver to get deBUG information,Maybe thats why theres no source?

解决方法 linux内核使用两步启动处理(这不包括任何启动加载程序,如u-Boot …).你可以更好地理解这一点,特别是通过查看2个.lds文件(详见下文)进行链接:

> arch / arm / boot / compressed / vmlinux.lds.in,生成arch / arm / boot / compressed / vmlinux.lds.

与arch / arm / boot / compressed中的其他.o文件一起,在此文件夹中生成vmlinux.

您可以使用arm-none-eabi-nm -a -n arch / arm / boot / compressed / vmlinux来查看此阶段的符号.所有地址都是物理地址.

这些符号不包含在System.map中
>第二个vmlinux由内核.o文件和arch / arm / kernel / vmlinux.lds生成(注意:路径不同)

我希望这能解释为什么你无法在Eclipse中看到启动源代码.

总结

以上是内存溢出为你收集整理的linux-kernel – Qemu arm Linux内核启动调试,没有源代码全部内容,希望文章能够帮你解决linux-kernel – Qemu arm Linux内核启动调试,没有源代码所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1026818.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存