Warm tip: This article is reproduced from serverfault.com, please click

arm-无法在qemu上引导为vexpress-a9构建的内核映像:黑屏

(arm - Unable to boot kernel image built for vexpress-a9 on qemu : Blank Screen)

发布于 2018-02-23 05:02:06

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

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

然后我用一个简单的hello world程序作为初始化过程创建了ramdisk

#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屏幕(完全空白): 在此处输入图片说明

我是第一次使用Qemu,并且正在使用本文作为参考。

Questioner
Insane Coder
Viewed
0
Peter Maydell 2018-02-24 00:11:40

“ QEMU黑屏不执行任何操作”几乎总是表示“ QEMU运行正常,但是来宾代码在引导过程中早已崩溃或停止,但未发送任何输出”。

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