我尝试使用编译好的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?有没有办法调试它?
谢谢!
答案 0 :(得分:0)
" QEMU坐在那里,什么都不打印"这是一个非常常见的症状,它几乎总是意味着客户内核在能够打印任何内容之前崩溃,因为它没有正确配置"。如果您尝试在真实硬件上启动错误配置的内核,这与您获得的效果几乎相同,并且调试它的过程大致相同:
关于这一点,没有什么特别针对QEMU的 - 如果您尝试在硬件上进行内核启动,那么您必须经历同样的痛苦。
PS:我的第一个猜测是内核崩溃了,因为它没有足够的内存 - 你还没有通过QEMU' -m'选项,因此默认为128MB; vexpress-a9主板最高可处理1GB。 earlycon可能是足够的调试输出来识别这个问题。您也没有通过-dtb传递设备树blob,这对于较新的内核可能是一个问题(较旧的内核很乐意在没有内核的情况下启动)。