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

我试图在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 stdio -s -S

在其他终端

arm-none-linux-gnueabi-gdb vmlinux

Reading symbols from vmlinux...done.

(gdb) target remote :1234

Remote debugging using :1234

0x60000000 in ?? ()

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

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

情况1:

(gdb) b decompress_kernel

Function "decompress_kernel" not defined.

Make breakpoint pending on future shared library load? (y or [n]) y

Breakpoint 2 (decompress_kernel) pending.

(gdb) c

Continuing.

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

案例2:

(gdb) b *0x80008000

Breakpoint 1 at 0x80008000: file arch/arm/kernel/head.S,line 89.

(gdb) c

Continuing.

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

案例3:

(gdb) b start_kernel

Breakpoint 1 at 0x8064d8d8: file init/main.c,line 498.

(gdb) c

Continuing.

Breakpoint 1,start_kernel () at init/main.c:498

498 {

(gdb)

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

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

所以我的查询是:

>为什么有些功能无法达到突破点?

>这是qemu限制还是我需要启用更多内容?

>我需要附加任何额外的参数吗?

>如何调试早期内核启动

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值