首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与qemu和gdb的问题

与qemu和gdb的问题
EN

Stack Overflow用户
提问于 2013-02-18 19:54:14
回答 1查看 1.9K关注 1票数 3

我有一个设备驱动程序正在冻结操作系统。老鼠甚至动也不动。我正在尝试调试这个问题,我相信一种很好的方法是在qemu中使用gdb,这是我以前从未使用过的两种方法。有没有更好的方法?

因此,首先,我需要用调试符号编译内核,我已经这样做了。

现在,有一个名为vmlinux的新文件被生成,它位于与源相同的文件夹中。看来,我还需要一个bzImage文件根据这个,这样我就可以使用以下方法运行新编译的内核:

代码语言:javascript
复制
qemu-system-i386 -kernel bzImage 

或处于调试模式

代码语言:javascript
复制
qemu-system-i386 -s -S -kernel bzImage

我无法找到bzImage文件。我在哪里能找到它或者这里缺了什么?bzImage是指我使用创建的OS映像吗?

另外,我不明白的是,现在内核已经编译(vmlinux),我是如何使用qemu运行它的?所以我的问题是,当我用qemu运行它时,还是调试器在我的主操作系统中作为应用程序运行的内核?

另外,如何安装我的设备驱动程序?我的理解是内核不是Ubuntu,所以没有UI?

另外,我安装了qemu,当我输入qemu时,我得到命令not。我猜我必须选择一个特定的处理器仿真器,如qemu i 386、qemu-system-x86_64或qemu-x86_64?

qemu与kvm命令有何不同或相似之处?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-20 07:51:27

因此,如果我正确理解这个问题,那么您就有了一个不需要特定硬件的内核模块。当您使用该模块时,系统会冻结,但是内核日志没有包含任何特殊的内容。

以下内容可能会有所帮助。

拿到日志

您所描述的症状可能仍然是内核oops或恐慌的结果。日志记录工具有时在将有关错误的信息输出到日志文件之前就会死掉。您可以尝试通过串口输出日志,这应该更可靠。

由于内核模块不需要任何特定的硬件,最简单的方法可能是安装与虚拟机相同的Linux发行版,并将该机器的虚拟串口(COM)连接到主机系统上的管道。

这通常是很容易做到的。例如,这篇博客文章包含详细的说明,以防主机操作系统和来宾操作系统是Ubuntu11.10。

在那里使用VirtualBox来管理虚拟机。如果您更喜欢QEMU,这也应该是可能的。不过,我认为使用VirtualBox要容易一些,但这是个人偏好的问题。

基本上,您需要执行以下步骤。

  • 创建一个虚拟机,并在那里安装您需要的Linux发行版。
  • 启用串行端口(COM1,.)在虚拟机的配置中,并将其配置为连接到主机上的一个特殊文件(“主机管道”),比如/tmp/vbox_serial
  • 启动来宾操作系统并调整其引导选项:至少,将console=ttyS0,115200或类似的内容添加到引导加载程序菜单中的内核选项中。
  • 在主机上,启动minicomsocat或其他从/tmp/vbox_serial读取的内容。
  • 就是这样。现在,您应该可以通过/tmp/vbox_serial获得客户操作系统的内核日志。如果来宾系统崩溃,那么即使日志没有保存到客户本身的文件中,也会得到日志。

为了让事情变得更简单,您可以在您的主机系统上使用socat,而不是像博客文章的作者所建议的那样使用minicom。这里可能不需要minicom的强大功能。

这样,您可以使用socattee将日志保存到guest.log文件,同时仍将其输出到控制台:

代码语言:javascript
复制
socat /tmp/vbox_serial - | tee guest.log

如果存在内核oops或惊慌,日志中的回溯通常有助于找出哪里出了问题。

检测死锁

如果您已经通过串行连接或其他方式获得了完整的日志,但是仍然没有什么可疑之处,并且您怀疑内核中存在死锁,那么lockdep工具可能会有所帮助。它包含在内核中(但您可能需要用CONFIG_LOCKDEP_SUPPORT=y重新构建内核)。

Lockdep检测潜在的死锁并将结果输出到内核日志。这份报告可以帮助您分析其输出。

追踪设施

如果您需要跟踪内核中的某些事件来调试您的系统,那么可以使用一些工具。

  • K探针 -一种在内核中几乎任意设置的断点。可用于跟踪函数调用等,对性能有一定的影响。
  • SystemTap -一个强大的系统,用来分析内核中正在发生的事情。其中一部分是基于K探针的。
  • 费特莱 -一个包含在内核中的跟踪系统,如果这很重要的话,它所带来的开销要比K探测少。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14944229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档