模拟 Linux 内核时黑屏
Black screen when emulating Linux kernel
我正在尝试为手臂(多功能板)构建 linux 并使用 Qemu 对其进行仿真:
我关注了以下内容tutorial
下载 Qemu 和 arm-linux-gnuab 工具链后,步骤基本上是:
make -C build ARCH=arm distclean
make -C build ARCH=arm versatile_defconfig
make -C build ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
qemu-system-arm -M versatileab -m 256M -kernel build/arch/arm/boot/zImage -append "console=ttyS0" -serial stdio -dtb build/arch/arm/boot/dts/versatile-ab.dtb
我得到的是顶部有光标的黑色屏幕和以下消息:
pulseaudio: set_sink_input_volume() failed
pulseaudio: Reason: Invalid argument
pulseaudio: set_sink_input_mute() failed
pulseaudio: Reason: Invalid argument
Uncompressing Linux... done, booting the kernel.
vpb_sic_write: Bad register offset 0x2c
我不确定问题出在哪里:是不是内核配置错误?dtb?;这些消息并没有真正提供很多信息
欢迎您提出建议
Qemu 版本:
qemu-system-arm --version
QEMU emulator version 2.0.0 (Debian 2.0.0+dfsg-2ubuntu1.31), Copyright (c) 2003-2008 Fabrice Bellard
我的机器:
uname -a
Linux user-SATELLITE-C855-169 4.2.0-27-generic #32~14.04.1-Ubuntu SMP Fri Jan 22 15:32:26 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
设备 ttyS0
通常用于 PC 风格的 8250/16550 串行端口,而 QEMU 为使用设备名称 ttyAMA0
的 versatibleab 和 versatilepb 机器模拟 AMBA PL011,因此您可以尝试使用 console=ttyAMA0
代替。
帧缓冲区控制台可能需要在启动期间由内核绑定,这是通过在内核配置中设置 FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
来控制的,这应该允许 tty0
设备上的控制台使用 console=tty0
.
您可以指定多个 console=
选项,因此使用 console=ttyAMA0 console=tty0
应该会在模拟控制台端口(在 stdio 上,使用您的选项)和帧缓冲区上显示内核启动消息。
我正在尝试为手臂(多功能板)构建 linux 并使用 Qemu 对其进行仿真:
我关注了以下内容tutorial
下载 Qemu 和 arm-linux-gnuab 工具链后,步骤基本上是:
make -C build ARCH=arm distclean
make -C build ARCH=arm versatile_defconfig
make -C build ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
qemu-system-arm -M versatileab -m 256M -kernel build/arch/arm/boot/zImage -append "console=ttyS0" -serial stdio -dtb build/arch/arm/boot/dts/versatile-ab.dtb
我得到的是顶部有光标的黑色屏幕和以下消息:
pulseaudio: set_sink_input_volume() failed
pulseaudio: Reason: Invalid argument
pulseaudio: set_sink_input_mute() failed
pulseaudio: Reason: Invalid argument
Uncompressing Linux... done, booting the kernel.
vpb_sic_write: Bad register offset 0x2c
我不确定问题出在哪里:是不是内核配置错误?dtb?;这些消息并没有真正提供很多信息
欢迎您提出建议
Qemu 版本:
qemu-system-arm --version
QEMU emulator version 2.0.0 (Debian 2.0.0+dfsg-2ubuntu1.31), Copyright (c) 2003-2008 Fabrice Bellard
我的机器:
uname -a
Linux user-SATELLITE-C855-169 4.2.0-27-generic #32~14.04.1-Ubuntu SMP Fri Jan 22 15:32:26 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
设备 ttyS0
通常用于 PC 风格的 8250/16550 串行端口,而 QEMU 为使用设备名称 ttyAMA0
的 versatibleab 和 versatilepb 机器模拟 AMBA PL011,因此您可以尝试使用 console=ttyAMA0
代替。
帧缓冲区控制台可能需要在启动期间由内核绑定,这是通过在内核配置中设置 FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
来控制的,这应该允许 tty0
设备上的控制台使用 console=tty0
.
您可以指定多个 console=
选项,因此使用 console=ttyAMA0 console=tty0
应该会在模拟控制台端口(在 stdio 上,使用您的选项)和帧缓冲区上显示内核启动消息。