我正在尝试使用 GDB 调试在 QEMU 上运行的内核。
内核已使用以下选项编译:
CONFIG_DEBUG_INFO=y
CONFIG_GDB_SCRIPTS=y
Run Code Online (Sandbox Code Playgroud)
我使用以下命令在 qemu 中启动内核:
qemu-system-x86_64 -s -S -kernel arch/x86_64/boot/bzImage
Run Code Online (Sandbox Code Playgroud)
在一个单独的终端中,我从相同的路径启动 GDB 并按顺序发出这些命令:
gdb ./vmlinux
(gdb) target remote localhost:1234
(gdb) hbreak start_kernel
(gdb) c
Run Code Online (Sandbox Code Playgroud)
我没有提供 rootfs,因为到目前为止我对完整的工作系统不感兴趣,只对内核感兴趣。我还尝试了 hbreak/break 的组合。
内核只是启动并达到内核恐慌,因为无法找到 rootfs……预期。我希望它在 start_kernel 处停止,然后逐步执行代码。
观察:如果我设置一个立即断点,它会工作并停止,但不会在 start_kernel / startup_64 / main
qemu 是否有可能没有调用所有这些函数,或者它是否以某种方式被屏蔽了?
Kernel: 4.13.4
GDB: GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.3) 7.7.1
GCC: gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
system: ubuntu 14.04 LTS
Run Code Online (Sandbox Code Playgroud)
注意:这个完全相同的过程适用于内核 3.2.93,但不适用于 4.13.4,所以我想需要更多的配置。我无法在网上找到为内核 4.0 及更高版本启用此调试程序的资源,因此到目前为止我正在继续使用 3.2,欢迎任何和所有输入。
小智 5
我遇到了同样的问题,并从linux 内核新手邮件列表中找到了解决方案。
您应该禁用KASLR在内核中的命令行与nokaslr选项,或禁用内核选项“随机化的内核内存部分”内“处理器类型和功能”,当你建立你的内核映像。
| 归档时间: |
|
| 查看次数: |
2794 次 |
| 最近记录: |