无法在qemu:空白屏幕上启动为vexpress-a9构建的内核映像

时间:2018-02-23 05:02:07

标签: linux-kernel arm embedded qemu boot

我使用以下步骤编译了linux内核v4.9:

export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabi-
make vexpress_defconfig
make all -j40

然后我用一个简单的hello world程序创建了ramdisk作为init进程

#include <stdio.h> 

void main() {
  printf("Hello World!\n");
  while(1);
}

//compile and pack
arm-linux-gnueabi-gcc -static init.c -o init
echo init|cpio -o --format=newc > initramfs

现在,当我尝试使用qemu运行时,我得到一个黑屏,没有别的

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

这是我的qemu屏幕(完全空白): enter image description here

我第一次使用Qemu并使用this article作为参考。

2 个答案:

答案 0 :(得分:2)

“QEMU对黑屏一无所知”几乎总是意味着“QEMU正常运行,但是客户代码在启动过程中早期崩溃或停止而没有发送任何输出”。

您的命令行最明显的问题是您没有使用-dtb向QEMU传递设备树blob。较旧的Arm内核只使用内核和initrd启动,但较新的内核需要dtb,否则它们将无法启动。您正在查看的教程使用的内核版本早于此更改,但看起来您使用的是更新版本需要dtb。您应该能够在内核构建树中的arch / arm / boot / dts /中找到相关的dtb(可能是vexpress-v2p-ca9.dtb)。您可能需要专门告诉内核makefile从dts构建它 - 我忘了。检查内核构建文档以了解如何在必要时执行此操作。

答案 1 :(得分:0)

我已经与上面的人合作

qemu-system-arm -monitor none -nographic -M vexpress-a9 -kernel linux/arch/arm/boot/zImage -initrd initramfs -dtb linux/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -serial stdio
<身体>
内核版本 v5.8-rc7
arm-linux-gnueabi-gcc --version (Ubuntu / Linaro 7.5.0-3ubuntu1〜18.04)7.5.0