我有一个设备驱动程序正在冻结操作系统。鼠标甚至不会移动。我正在尝试调试这个问题,我相信一个好的方法是将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命令有什么不同或相似之处?
谢谢。
所以,如果我正确理解这个问题,你有一个不需要特定硬件的内核模块。当您使用该模块时,系统会冻结,但内核日志不包含任何特殊内容。
以下可能会有所帮助。
您描述的症状可能仍然是内核OOP或死机的结果。日志记录工具有时会在将错误信息输出到日志html" target="_blank">文件之前死亡。您可以尝试通过串行端口输出日志,这应该更可靠。
由于您的内核模块不需要任何特定的硬件,最简单的方法可能是在虚拟机上安装与您使用的相同的Linux发行版,并将该机器的虚拟串行端口(COM)连接到主机系统上的管道。
这通常很容易做到。例如,这篇博客文章包含了主机操作系统和客户操作系统为Ubuntu11.10时的详细说明。
虚拟框在那里用于管理虚拟机。如果你更喜欢QEMU,这也应该是可能的。我想使用虚拟盒子会更容易一些,但这是个人喜好的问题。
基本上,您需要执行以下步骤。
/tmp/vbox_serial
。sole=ttyS0,115200
或类似的内容。minicom
、ocat
或从/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检测潜在的死锁,并将结果输出到内核日志。这个演示可能有助于你分析它的输出。
如果您需要跟踪内核中的一些事件来调试您的系统,有一些工具可能会很方便。
问题内容: 我是内核开发的新手,我想知道如何使用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(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 平台使用