首页 > 解决方案 > Ubuntu升级后qemu无法启动OpenWRT

问题描述

当我拥有 Ubuntu 18.04 时,我使用以下命令声明了 OpenWRT:

qemu-system-arm -machine virt -cpu cortex-a15 -nographic -netdev bridge,id=lan,br=br-lan,helper=/usr/lib/qemu/qemu-bridge-helper -device virtio-net-pci,id=devlan,netdev=lan,mac=52:54:00:32:52:3a -netdev bridge,id=wan,br=br-wan,helper=/usr/lib/qemu/qemu-bridge-helper -device virtio-net-pci,id=devwan,netdev=wan,mac=52:54:00:35:04:84 -kernel openwrt-armvirt-32-zImage -drive file=openwrt-armvirt-32-root.ext4,format=raw,if=virtio -append root=/dev/vda rootwait

现在,升级到 Ubuntu 19.10 后,我无法使用 qemu 启动 OpenWRT。由于无法挂载/dev/vda设备,引导过程停止:

[    0.358902] Concatenating MTD devices:
[    0.359031] (0): "0.flash"
[    0.359113] (1): "0.flash"
[    0.359193] into device "0.flash"
[    0.378013] rtc-pl031 9010000.pl031: rtc core: registered pl031 as rtc0
[    0.382185] NET: Registered protocol family 10
[    0.392266] Segment Routing with IPv6
[    0.392847] NET: Registered protocol family 17
[    0.394003] 8021q: 802.1Q VLAN Support v1.8
[    0.395030] 9pnet: Installing 9P2000 support
[    0.395488] Registering SWP/SWPB emulation handler
[    0.403133] rtc-pl031 9010000.pl031: setting system clock to 2020-01-02 08:17:06 UTC (1577953026)
[    0.415460] Waiting for root device /dev/vda...

怎么了?新版本的 qemu 有什么变化吗?谢谢你。

标签: virtualizationqemuopenwrt

解决方案


我的第一个猜测是,您遇到了新 QEMU 中默认启用的新功能和来宾内核错误的组合,它被设备树信息宣传该新功能所混淆。

较新的 QEMU 版本的“virt”板提供了一些设备,包括 PCI 窗口的扩展,地址超过 4GB。这应该没问题,因为 32 位非 LPAE 内核应该将这些地址视为不可访问而忽略,并继续使用低于 4GB 标记的较小 PCI 窗口。不幸的是,旧版本的 Linux 32 位 Arm 内核中的一个错误意味着他们截断了设备树中的 64 位地址,并认为与其他设备发生冲突,并且根本拒绝启用 PCI。(在您的问题中未引用的引导日志部分中可能有一条关于此的消息。)

可能的修复:

  • 添加-machine highmem=off到 QEMU 命令行,禁用额外功能
  • 构建具有 LPAE 支持的来宾内核
  • 使用更新版本的来宾内核,该内核修复了地址截断错误

(从第一个开始检查我的诊断是否正确。)


推荐阅读