在Qemu上使用gdb进行调试init

4
我正在尝试在Qemu上模拟Cavium Octeon的Mips64 Linux内核。目前我正在处理使用模式init代码方面的问题,并想要调试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:target remote localhost:1234。目前,gdb仅显示在内核空间中运行的指令。我想问的是,有没有一种方法可以像内核空间一样逐步调试用户模式init和库指令?例如,如果从init发出printf,我想看到正在执行哪些库指令以及控制如何返回到内核?

这将取决于 MIPS 的 gdb 支持是否能够处理内核和用户空间之间的转换。尝试在内核中的 resume_userspace 上设置断点,从那里单步执行,看看转换是否被处理。 - stsquad
1个回答

0

我已经成功地使用描述在是否可能使用gdb和qemu同时调试Linux用户空间程序和内核空间?的过程来单步调试BusyBox的/sbin/init

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

  • /sbin/init只是一个指向busybox的符号链接,因此你必须使用/bin/busybox作为目标文件
  • /sbin/init的“main”函数实际上是init_main,遵循BusyBox的惯例,将每个伪可执行文件的主要部分称为<exec>_main

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接