【发布时间】:2013-02-18 19:54:14
【问题描述】:
我有一个冻结操作系统的设备驱动程序。鼠标甚至不会移动。我正在尝试调试这个问题,我相信一种好的方法是将 gdb 与 qemu 一起使用,这是我以前从未使用过的两件事。有更好的方法吗?
所以首先我需要用我已经完成的调试符号编译内核。
现在,生成了一个名为 vmlinux 的新文件,它与源文件位于同一文件夹中。看来我还需要一个 bzImage 文件according to this,这样我就可以使用以下命令运行新编译的内核:
qemu-system-i386 -kernel bzImage
或处于调试模式
qemu-system-i386 -s -S -kernel bzImage
我找不到 bzImage 文件。我在哪里可以找到它或这里缺少什么? bzImage 是指我使用 qemu-img create 创建的 OS Image 吗?
另外,我不明白的是现在内核已经编译(vmlinux)我如何用qemu运行它?所以我的问题是,当我使用 qemu 或调试器运行它时,内核是否在我的主操作系统中作为应用程序运行?
我如何安装我的设备驱动程序?我的理解内核不是Ubuntu所以没有UI?
另外,我安装了 qemu,当我输入 qemu 时,我得到 command not found。我猜我必须选择一个特定的处理器模拟器,如 qemu-system-i386、qemu-system-x86_64 或 qemu-x86_64?
qemu 与 kvm 命令有何不同或相似之处?
谢谢。
【问题讨论】:
-
您可能在系统死机后重新启动系统时查看了系统日志?那里有关于内核错误的消息吗?如果你没有,我建议你这样做。有时,从分析系统日志开始可能比按照您描述的路线更容易。
-
如果系统日志中没有保存故障信息,可以尝试其他方式获取。如果有故障的驱动程序可以在虚拟机的来宾操作系统(您似乎使用 Ubuntu)中运行,您可以在启动时配置该操作系统以将日志输出到串行端口并从主机上从那里检索它。如果驱动程序用于虚拟机不支持的硬件,QEMU 也无济于事。
-
kern.log 中没有任何内容。不确定我是否应该查看其他文件。我只是在猜测,但我认为这是一个死锁而不是崩溃,这就是为什么 kern.log 中可能没有任何内容。
-
驱动程序甚至不是硬件,它是一个跟踪工具,可以拦截文件系统调用并基本上记录它们。然后驱动程序进行较低级别的文件系统调用以执行实际操作。如果我可以记录“文件系统”调用(在 ext3-4 级别),实际上对我来说更好。因此,如果有一种方法可以跟踪那些也可以解决我的问题的调用。谢谢。
标签: linux-kernel gdb qemu