Linux kernel 与qemu和gdb的问题
我有一个设备驱动程序正在冻结操作系统。这只老鼠甚至一动不动。我正在尝试调试这个问题,我相信一个很好的方法是将gdb与qemu一起使用,这两件事我以前从未使用过。有更好的方法吗 所以首先我需要用调试符号编译内核,我已经完成了 现在,生成了一个名为vmlinux的新文件,它与源文件位于同一文件夹中。似乎我还需要一个bzImage文件,这样我就可以使用以下方法运行新编译的内核:Linux kernel 与qemu和gdb的问题,linux-kernel,gdb,qemu,Linux Kernel,Gdb,Qemu,我有一个设备驱动程序正在冻结操作系统。这只老鼠甚至一动不动。我正在尝试调试这个问题,我相信一个很好的方法是将gdb与qemu一起使用,这两件事我以前从未使用过。有更好的方法吗 所以首先我需要用调试符号编译内核,我已经完成了 现在,生成了一个名为vmlinux的新文件,它与源文件位于同一文件夹中。似乎我还需要一个bzImage文件,这样我就可以使用以下方法运行新编译的内核: qemu-system-i386 -kernel bzImage 或处于调试模式 qemu-system-i386 -s
qemu-system-i386 -kernel bzImage
或处于调试模式
qemu-system-i386 -s -S -kernel bzImage
我找不到bzImage文件。我在哪里找到它或者这里缺少什么?bzImage是指我使用qemu img create创建的OS映像吗
另外,我不明白的是,现在内核已经编译(vmlinux)了,我如何使用qemu运行它?所以我的问题是,当我使用qemu运行它时,或者调试器是作为应用程序在我的主操作系统中运行的内核
另外,如何安装设备驱动程序?我的理解是内核不是Ubuntu,所以没有UI
另外,我安装了qemu,当我键入qemu时,我找不到get命令。我猜我必须选择一个特定的处理器模拟器,如qemu-system-i386、qemu-system-x86_64或qemu-x86_64
qemu与kvm命令有何不同或相似
谢谢。因此,如果我正确理解了这个问题,您有一个不需要特定硬件的内核模块。当您使用模块时,系统会冻结,但内核日志不包含任何特殊内容 以下内容可能会有所帮助 获取日志 您描述的症状可能仍然是内核oops或恐慌的结果。日志记录工具有时会在将有关错误的信息输出到日志文件之前死亡。您可以尝试通过串行端口输出日志,这应该更可靠 由于内核模块不需要任何特定的硬件,最简单的方法可能是安装与虚拟机相同的Linux发行版,并将虚拟机的虚拟串行端口(COM)连接到主机系统上的管道 这通常很容易做到。例如,包含主机操作系统和来宾操作系统为Ubuntu 11.10时的详细说明 用于管理虚拟机。如果您喜欢QEMU,这也应该是可能的。我想使用VirtualBox会更容易一些,但这是个人喜好的问题 基本上,您需要执行以下步骤
- 创建一个虚拟机,并在那里安装作为来宾操作系统所需的Linux发行版
- 在虚拟机的配置中启用串行端口(COM1,…),并将其配置为连接到主机上的特殊文件(“主机管道”),例如
/tmp/vbox\u serial
- 启动来宾操作系统并调整其引导选项:至少,在引导加载程序菜单中的内核选项中添加
或类似的内容console=ttys0115200
- 在主机上,启动
、minicom
或从socat
读取的任何内容/tmp/vbox\u serial
- 就是这样。现在,您应该通过
获得来宾操作系统的内核日志。如果来宾系统崩溃,那么即使日志没有保存到来宾系统本身的文件中,您也会得到日志/tmp/vbox\u serial
socat
,而不是该博客作者建议的minicom
。这里可能不需要minicom
的功能
这样,您可以使用socat
和tee
将日志保存到guest.log
文件,同时仍将其输出到控制台:
socat /tmp/vbox_serial - | tee guest.log
如果出现内核oops或死机,日志中的回溯通常有助于找出原因
出了问题
检测死锁
如果您通过串行连接或其他方式获得了完整的日志,但仍然没有任何可疑之处,并且您怀疑内核中存在死锁,
lockdep
工具可能会有所帮助。它包含在内核中(但是您可能需要使用CONFIG\u LOCKDEP\u SUPPORT=y
重新构建内核)
Lockdep检测潜在的死锁并将结果输出到内核日志。可以帮助您分析其输出
追踪设施
如果您需要跟踪内核中的某些事件来调试系统,那么有一些工具可能很方便
- -一种可以在内核中几乎任意位置设置的断点。可用于跟踪函数调用等,对性能影响不大
- -用于分析内核中正在发生的事情的强大系统。它的一部分基于Kprobes
- -内核中包含的跟踪系统比Kprobes产生的开销要少(如果这很重要的话)