在qemu中使用GDB调试Linux内核无法命中函数或给定地址

在qemu中使用GDB调试Linux内核无法命中函数或给定地址,第1张

概述我试图在qemu环境中使用GDB逐步了解内核启动顺序. 以下是我的设置: 在一个终端即时运行 ~/Qemu_arm/bin/qemu-system-arm -M vexpress-a9 -dtb ./arch/arm/boot/dts/vexpress-v2p-ca9.dtb -kernel ./arch/arm/boot/zImage -append "root=/dev/mmcblk0 con 我试图在qemu环境中使用GDB逐步了解内核启动顺序.

以下是我的设置:

在一个终端即时运行

~/Qemu_arm/bin/qemu-system-arm -M vexpress-a9 -dtb ./arch/arm/boot/dts/vexpress-v2p-ca9.dtb -kernel ./arch/arm/boot/zImage -append "root=/dev/mmcblk0 console=ttyAMA0" -sd ../Images/RootFS.ext3 -serial st@R_403_6901@ -s -S

在其他终端

arm-none-linux-gnueabi-gdb vmlinuxReading symbols from vmlinux...done.(gdb) target remote :1234Remote deBUGging using :12340x60000000 in ?? ()

我的问题是如何在/ arch / arm / boot / compressed / *文件中设置代码的断点.

例如,我试图为misc.c中定义的decompress_kernel设置断点.

情况1:

(gdb)  b decompress_kernelFunction "decompress_kernel" not defined.Make breakpoint pending on future shared library load? (y or [n]) yBreakpoint 2 (decompress_kernel) pending.(gdb) cContinuing.

上面的一个是无法启动qemu启动的功能.

案例2:

(gdb) b *0x80008000Breakpoint 1 at 0x80008000: file arch/arm/kernel/head.S,line 89.(gdb) cContinuing.

在这种情况下它也无法击中qemu启动.

案例3:

(gdb) b start_kernelBreakpoint 1 at 0x8064d8d8: file init/main.c,line 498.(gdb) cContinuing.Breakpoint 1,start_kernel () at init/main.c:498498 {(gdb)

在这种情况下功能正在击中,我可以逐步调试.

注意:我已启用调试,早期printk并尝试了hbreak

所以我的查询是:

>为什么有些功能无法达到突破点?
>这是qemu限制还是我需要启用更多内容?
>我需要附加任何额外的参数吗?
>如何调试早期内核启动

解决方法 您无法在start_kernel之前的任何函数上放置断点,因为您没有为它们加载符号.实际上,您正在使用内核的zImage启动qemu,但是从vmlinux加载符号.它们不一样:zImage基本上是作为数据有效负载压缩的vmlinux,然后附加到存根,该存根在内存中解压缩然后跳转到start_kernel.

start_kernel是vmlinux的入口点,它之前的任何函数,包括decompress_kernel,都是stub的一部分,不存在于vmlinux中.

我不知道做“arm-none-linux-gnueabi-gdb zImage”是否允许你调试存根,我总是在真实硬件上使用JTAG调试器对ARM内核进行早期调试,并且从未使用过qemu,抱歉

总结

以上是内存溢出为你收集整理的在qemu中使用GDB调试Linux内核无法命中函数或给定地址全部内容,希望文章能够帮你解决在qemu中使用GDB调试Linux内核无法命中函数或给定地址所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存