当前位置: 首页 > 知识库问答 >
问题:

qemu和gdb的问题

汲利
2023-03-14

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

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

现在,生成了一个名为vmlinux的新文件,它与源文件位于同一个文件夹中。我似乎还需要一个bzImage文件,这样我就可以运行新编译的内核,使用:

qemu-system-i386 -kernel bzImage 

或者处于调试模式

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命令有什么不同或相似之处?

谢谢。

共有1个答案

权胜泫
2023-03-14

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

以下可能会有所帮助。

您描述的症状可能仍然是内核OOP或死机的结果。日志记录工具有时会在将错误信息输出到日志html" target="_blank">文件之前死亡。您可以尝试通过串行端口输出日志,这应该更可靠。

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

这通常很容易做到。例如,这篇博客文章包含了主机操作系统和客户操作系统为Ubuntu11.10时的详细说明。

虚拟框在那里用于管理虚拟机。如果你更喜欢QEMU,这也应该是可能的。我想使用虚拟盒子会更容易一些,但这是个人喜好的问题。

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

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

为了使事情变得更容易,您可以在主机系统上使用socat,而不是该博客文章的作者建议的minicom。这里可能不需要迷你通信的强大功能。

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

socat /tmp/vbox_serial - | tee guest.log

如果出现了内核出错或死机,日志中的回溯通常有助于找出问题所在。

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

Lockdep检测潜在的死锁,并将结果输出到内核日志。这个演示可能有助于你分析它的输出。

如果您需要跟踪内核中的一些事件来调试您的系统,有一些工具可能会很方便。

    < Li > k probes——一种可以在内核中任意位置设置的断点。可用于跟踪函数调用等,对性能有一定的影响。 < li>SystemTap -分析内核运行情况的强大系统。一部分是基于Kprobes。 < Li > Ftrace——包含在内核中的跟踪系统,比Kprobes产生的开销更少(如果有必要的话)。
 类似资料:
  • 问题内容: 我是内核开发的新手,我想知道如何使用QEMU和gdb运行/调试Linux内核。我实际上正在阅读罗伯特·洛夫(Robert Love)的书,但不幸的是,它没有帮助读者了解如何安装适当的工具来运行或调试内核。因此,我要做的是遵循本教程http://opensourceforu.efytimes.com / 2011/02 / kernel-development-debugging-usi

  • QEMU是一套由Fabrice Bellard所编写的模拟处理器的自由软件。它与Bochs,PearPC近似,但其具有某些后两者所不具备的特性,如高速度及跨平台的特性。经由kqemu这个开源的加速器,QEMU能模拟至接近真实电脑的速度。QEMU有两种主要运作模倾: User mode模拟模式,亦即是使用者模式。QEMU 能启动那些为不同中央处理器编译的Linux程序。而Wine及 Dosemu是其

  • QEMU-VMI 基于QEMU,实现了部分虚拟机监控功能(Virtual Machine Introspection)。 以下功能集成到了QEMU中,用户不需要进入虚拟机(Linux)就可以获得虚拟机内部信息,不需要对虚拟机中内核代码进行修改。 top: 获得某虚拟机CPU利用率 free: 获得某虚拟机内存利用率 虚拟机系统调用表保护功能 ps: 列出某虚拟机中所有进程信息 lsmod: 列出某

  • 本文将使用的GDB-Demo例子程序可以从我的github账户上下载。请确保在你的设备上安装和运行。 现在让我们SSH进入设备。 现在我们开启GDB,然后让GDB在应用开启之后就挂钩这个应用。可以通过命令 attach -waitfor Appname来完成。你也可以 在设备上运行这个应用,然后用attach命令挂钩这个运行的进程,如下图所示。 一旦GDB挂钩进了这个应用,你会注意到这个应用目前是

  • GDB

    GDB(GNU symbolic debugger)是 GNU Project 调试器,它使你可以查看另一个程序在“执行”期间正在执行的操作–或该程序崩溃时正在执行的操作。 GDB 可以做四种主要的事情(以及支持这些事情的其他事情)来帮助你捕获行为中的错误: 启动你的程序,并指定可能影响其行为的所有内容。 使程序在指定条件下停止。 检查程序停止时发生的情况。 更改程序中的内容,以便你可以尝试纠正一

  • 提示 视频 PPT 下载 本文的目的和背景 VS Code(全称 Visual Studio Code)是一个轻量且强大的代码编辑器,支持 Windows,OS X 和 Linux。内置 JavaScript、TypeScript 和 Node.js 支持,而且拥有丰富的插件生态系统,可通过安装插件来支持 C++、C#、Python、PHP 等其他语言。 本文主要介绍在 Windows 平台使用