Qemu-Arm卡在黑屏上 - 运行香草内核

时间:2017-12-10 17:16:17

标签: linux-kernel qemu

我尝试使用编译好的Linux内核运行qemu-arm(版本4.9) 以及使用示例程序创建的initfs。

这是基于here的优秀帖子。

这是我执行的命令:

qemu-system-arm -M vexpress-a9 -kernel linux-4.9/arch/arm/boot/zImage -initrd initramfs -append "console=tty1"

然后,qemu向我展示了这些错误,其图形窗口卡住了:

pulseaudio: set_sink_input_volume() failed
pulseaudio: Reason: Invalid argument
pulseaudio: set_sink_input_mute() failed
pulseaudio: Reason: Invalid argument

即使我在没有-initrd参数的情况下运行它,只是加载内核 - 没有任何反应。

当我尝试在this示例中使用vmlinuz-3.2.0-4-vexpress图像运行它时,它对我有效。

有人知道可能是什么问题吗?有什么事实它是一个zImage?有没有办法调试它?

谢谢!

1 个答案:

答案 0 :(得分:0)

" QEMU坐在那里,什么都不打印"这是一个非常常见的症​​状,它几乎总是意味着客户内核在能够打印任何内容之前崩溃,因为它没有正确配置"。如果您尝试在真实硬件上启动错误配置的内核,这与您获得的效果几乎相同,并且调试它的过程大致相同:

  • 检查明显的内核配置选项是否设置正确:特别是,您已构建它以支持您尝试运行它的ARM板和CPU,并且您已启用支持您试图用于控制台输出的任何设备
  • 通过配置QEMU输出串口信息,配置guest虚拟机将其控制台输出发送到串口,并启用任何earlycon / earlyprintk选项(串行输出发生很多),给自己最大的机会看到一些东西早于图形输出,Linux内核earlycon / earlyprintk选项意味着内核将比默认值更早开始打印输出。
  • 如果你有一个有效的内核,而且没有内核,那么看一下内核配置之间的差异,看看是否有遗漏
  • 如果所有其他方法都失败了,你必须打破调试器以找出正在进行的操作

关于这一点,没有什么特别针对QEMU的 - 如果您尝试在硬件上进行内核启动,那么您必须经历同样的痛苦。

PS:我的第一个猜测是内核崩溃了,因为它没有足够的内存 - 你还没有通过QEMU' -m'选项,因此默认为128MB; vexpress-a9主板最高可处理1GB。 earlycon可能是足够的调试输出来识别这个问题。您也没有通过-dtb传递设备树blob,这对于较新的内核可能是一个问题(较旧的内核很乐意在没有内核的情况下启动)。

相关问题