gpt4 book ai didi

linux-kernel - qemu 和 gdb 的问题

转载 作者:行者123 更新时间:2023-12-04 04:59:27 25 4
gpt4 key购买 nike

我有一个卡住操作系统的设备驱动程序。鼠标甚至不会移动。我正在尝试调试这个问题,我相信一个好的方法是将 gdb 与 qemu 一起使用,这是我以前从未使用过的两件事。有没有更好的方法?

所以首先我需要使用我已经完成的调试符号编译内核。

现在,生成了一个名为 vmlinux 的新文件,它位于与源​​相同的文件夹中。看来我还需要一个bzImage文件according to this所以我可以使用以下命令运行新编译的内核:

qemu-system-i386 -kernel bzImage 

或处于 Debug模式

qemu-system-i386 -s -S -kernel bzImage

我找不到 bzImage 文件。我在哪里可以找到它或这里缺少什么? bzImage 是指我使用 qemu-img create 创建的操作系统镜像吗?

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

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

此外,我安装了 qemu,当我输入 qemu 时,我得到命令未找到。我猜我必须选择一个特定的处理器模拟器,如 qemu-system-i386、qemu-system-x86_64 或 qemu-x86_64?

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

谢谢。

最佳答案

所以,如果我理解正确的话,你有一个不需要特定硬件的内核模块。当您使用该模块时,系统会卡住,但内核日志不包含任何特殊内容。

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

获取日志

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

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

这通常很容易做到。例如,this blog post如果主机操作系统和 guest 操作系统是 Ubuntu 11.10,则包含详细说明。

VirtualBox用于管理虚拟机。如果您更喜欢 QEMU,这也应该是可能的。我想虽然使用 VirtualBox 会更容易一些,但这是个人喜好的问题。

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

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

为了使事情更简单,您可以在您的主机系统上使用 socat 而不是该博文作者建议的 minicom。此处可能不需要 minicom 的强大功能。

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

socat /tmp/vbox_serial - | tee guest.log

如果出现内核 oops 或 panic,日志中的回溯通常有助于找出是什么出错了。

检测死锁

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

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

追踪工具

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

  • Kprobes - 一种你可以在内核中几乎任意位置设置的断点。可用于跟踪函数调用等,对性能影响适中。
  • SystemTap - 一个强大的系统来分析内核中发生的事情。其中一部分基于 Kprobes。
  • Ftrace - 包含在内核中的跟踪系统,如果重要的话,会比 Kprobes 产生更少的开销。

关于linux-kernel - qemu 和 gdb 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14944229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com