linux - 模拟 Linux 内核时黑屏

标签 linux kernel boot qemu

我正在尝试为 arm(多功能板)构建 linux 并使用 Qemu 模拟它:

我关注了以下 tutorial

下载 Qemu 和 arm-linux-gnueab 工具链后,基本步骤如下:

  • 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 为 versatibleab 和 versatilepb 机器模拟 AMBA PL011,它们使用设备名称 ttyAMA0,因此您可以尝试使用 console=ttyAMA0

帧缓冲控制台在启动期间可能需要由内核绑定(bind),这是通过在内核配置中设置 FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y 来控制的,这应该允许 tty0 上的控制台使用 console=tty0 的设备。

您可以指定多个 console= 选项,因此使用 console=ttyAMA0 console=tty0 应该在两个模拟控制台端口(在 stdio 上,与您的选项)和帧缓冲区。

关于linux - 模拟 Linux 内核时黑屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45310867/

相关文章:

debugging - IDA内核调试错误

linux - 限制硬盘驱动器访问

java - 无法让基本的 Apache Axis 网络服务工作

linux - 内核如何区分线程和进程

linux - 构建 RPM 以安装包含 MimeType 的 .desktop 文件

ios - 在哪里可以找到有关 Mach 内核消息传递的良好文档

linux - Fedora 24 启动缓慢,可能由 plymouth-quit-wait.service 引起

ubuntu - 如何将 BCDEdit 恢复为默认值?

python 或 bash - 在行尾添加 "at beginning of line and "

Node.js 安装版本错误。为什么 apt install 不能正常工作?