我正在尝试在 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
目标远程 localhost:1234
gdb 当前仅显示在内核空间中运行的指令。
我想问的是,有什么方法可以像在内核空间中一样逐步调试用户模式初始化和库指令? 例如,如果 printf 是从 init 发出的,那么我想查看哪些指令正在库中执行,以及控制权如何返回给内核?
最佳答案
我已经成功调试 BusyBox 的 /sbin/init
使用以下描述的程序:Is it possible to use gdb and qemu to debug linux user space programs and kernel space simultaneously?
您必须牢记的唯一额外事项是:
-
/sbin/init
只是busybox
的符号链接(symbolic link), 所以你必须使用/bin/busybox
作为目标文件 /sbin/init
的“主要”功能实际上是init_main
,遵循 BusyBox 的约定,将每个伪可执行文件的主函数调用为<exec>_main
它有点不稳定,但大部分都能正常工作。
关于linux - 使用 gdb 在 Qemu 上调试 init,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16273614/