QEMU 在引导时挂起

Posted

技术标签:

【中文标题】QEMU 在引导时挂起【英文标题】:QEMU Hangs At Boot Time 【发布时间】:2020-05-24 23:19:23 【问题描述】:

尝试在 macOS Catalina 下使用 QEMU 从 Live Linux Mint 18.4 (x64) ISO 引导(使用 hvf 作为虚拟机管理程序代替 kvm 的补丁)。 我可以进入启动菜单,但尝试启动安装程序会让我的光标闪烁。 以详细模式启动,我看到它挂在:

clocksource:切换到clocksource tsc

我也尝试过启动 CentOS 和 Kali iso。 CentOS 虚拟机在以详细模式启动时突然退出,因为文本闪过太快以至于我无法阅读,而 Kali iso 仅显示黑屏,甚至没有闪烁的光标。

我也尝试在启用 notsc 内核标志的情况下启动,但这只会导致 Mint ISO 挂起

PCI Interrupt Link [LNKB] enabled at IRQ 10

相反,在 Kali 和 CentOS iso 的情况下没有明显区别。

我不确定这是否是一个专门的 hvf 问题,但欢迎提出任何建议。

这些是我启动虚拟机时使用的命令参数。

qemu-system-x86_64 \
  -m 4096 \
  -show-cursor \
  -vga virtio \
  -usb \
  --device usb-tablet \
  -enable-kvm \
  -cdrom ./linuxmint.iso \
  -drive file=./mint.qcow2,if=virtio \
  -accel hvf \
  -cpu max

【问题讨论】:

过去我不得不修复 qemu 中的错误。使用调试器进行挖掘并找出它挂在哪里。 更新:我可以毫无问题地启动到 Windows XP ISO。 @jwilikers 解决方案帮助了我,但标志应该是 -rdtscp(不是 -rtdspc 感谢您指出我的错字。很抱歉,如果这引起您的任何困惑,我已经修复了我的答案中的错字。再次感谢! 【参考方案1】:

在将 hvf 加速器与 CPU 主机直通一起使用时,我遇到了类似的问题。 当我尝试启动 Ubuntu 20.04.1 桌面安装程序 ISO 时,在启动加载程序的启动屏幕后立即出现内核崩溃。 使用 HomeBrew 的 QEMU 5.1,我通过使用 default qemu64 CPU model 成功模拟了 CPU。

要显式使用模拟 CPU,您的命令行应如下所示:

qemu-system-x86_64 \
  -m 4096 \
  -show-cursor \
  -vga virtio \
  -usb \
  --device usb-tablet \
  -enable-kvm \
  -cdrom ./linuxmint.iso \
  -drive file=./mint.qcow2,if=virtio \
  -accel hvf \
  -cpu qemu64

更新

我的错误报告中的response 为我解决了这个问题。 Ubuntu 20.04 崩溃是因为它试图使用 CPU 支持的 RDTSCP 功能。 问题是 Hyperkit.Framework 未能通过此功能,导致崩溃。 如果您的崩溃是由 RDTSCP 引起的,那么您应该能够通过禁用此选项来解决此问题。 可以通过提供 CPU 类型 host,紧跟 ,-rdtscp 来禁用此特定功能,如下所示:

qemu-system-x86_64 \
  -m 4096 \
  -show-cursor \
  -vga virtio \
  -usb \
  --device usb-tablet \
  -enable-kvm \
  -cdrom ./linuxmint.iso \
  -drive file=./mint.qcow2,if=virtio \
  -accel hvf \
  -cpu host,-rdtscp

【讨论】:

Albert Cervin 发布了 Answer 说“@jwilikers 解决方案帮助了我,但标志应该是 -rdtscp(不是 -rtdspc)” 该死!你说得对。对此我很抱歉!现在已经修好了。感谢您通过评论我的回答再次指出这一点! Albert Cervin 的回答已被删除,因为它不被视为对问题的回答。但我们现在谁也看不到。谢谢你的回复。至少我知道手动将此类答案转换为 cmets 很有用:)

以上是关于QEMU 在引导时挂起的主要内容,如果未能解决你的问题,请参考以下文章

使用 nasm 和 qemu 运行引导加载程序的问题

qemu模拟vexpress-a9及u-boot引导 linux

如何从源代码构建 grub2 引导加载程序并使用 qemu 模拟器对其进行测试

STM32 USB OTG HOST 库挂起尝试使用 FatFs 创建文件

npm 在安装后/解锁时挂起

Dapper 在执行时挂起