【问题标题】:Debug init on Qemu using gdb使用 gdb 在 Qemu 上调试初始化
【发布时间】:2013-04-22 19:43:59
【问题描述】:

我正在尝试在 Qemu 上模拟 cavium octeon 的 mips64 linux 内核。我目前在使用模式初始化代码方面遇到了一些问题并想要调试 init。我正在使用命令行中的 -s -S 选项启动 Qemu 并运行gdb 使用命令

ddd --debugger /OCTEON-SDK/tools/bin/mips64-octeon-linux-gnu-gdb /OCTEON-SDK/linux/kernel_2.6/linux/vmlinux

然后用命令附加 gdb

目标远程 localhost:1234

gdb 当前只显示在内核空间中运行的指令。

我想问的是,在内核空间的情况下,有什么方法可以让我逐步调试用户模式初始化和库指令? 例如,如果 printf 是从 init 发出的,那么我想查看库中正在执行哪些指令以及控制权如何返回给内核?

【问题讨论】:

  • 这取决于 gdb 对 MIPS 的支持是否可以处理内核和用户空间之间的转换。尝试在内核中的 resume_userspace 上设置一个断点,然后从那里单步执行,看看是否处理了转换。

标签: linux gdb init qemu


【解决方案1】:

我已设法使用Is it possible to use gdb and qemu to debug linux user space programs and kernel space simultaneously? 中描述的过程逐步调试 BusyBox 的 /sbin/init

您需要记住的唯一额外事项是:

  • /sbin/init 只是busybox 的符号链接,因此您必须使用/bin/busybox 作为目标文件
  • /sbin/init 的“main”函数实际上是 init_main,遵循 BusyBox 将每个伪可执行文件的 main 调用为 <exec>_main 的约定

它有点不稳定,但大多数情况下都能正常工作。

【讨论】:

    猜你喜欢
    • 2011-06-09
    • 2017-06-14
    • 2018-09-13
    • 2012-12-23
    • 2019-09-30
    • 2011-07-28
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    相关资源
    最近更新 更多