You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QEMU中virtio-mmio寄存器配置主体及virtio_net启用故障排查

关于QEMU中virtio_net的virtio-mmio配置问题

我需要在QEMU中启用virtio_net,根据virtio v1.1规范,若设备ID为0,virtio_net驱动应返回错误。在QEMU中,0x0A000000地址用作virtio-mmio区域,对该地址内存转储后,仅能看到QEMU设置的幻数、厂商ID和MMIO版本,但驱动所需的设备ID、设备特性、最大队列大小等值均为0。

我的问题是:谁负责向virtio-mmio设备寄存器(我的MMIO区域为0x0A000000)写入配置数据?若为QEMU,需使用哪条命令?(我使用自定义kdi)

当前QEMU命令

qemu-system-aarch64 -M virt-7.1,virtualization=on -cpu cortex-a72 -m 512 -smp 1 -display none -serial mon:stdio -device loader,addr=0x50004000,cpu-num=0,file=/tftp/sd.kdi -device loader,addr=0x50004020,cpu-num=0 -netdev tap,id=mynet0,ifname=tap0,script=no,downscript=no -device e1000,netdev=mynet0,mac=52:55:00:d1:55:01

0x0A000000内存转储

(gdb) x/64x 0x0a000000
0xa000000: 0x74726976 0x00000001 0x00000000 0x554d4551
0xa000010: 0x00000000 0x00000000 0x00000000 0x00000000
0xa000020: 0x00000000 0x00000000 0x00000000 0x00000000
0xa000030: 0x00000000 0x00000000 0x00000000 0x00000000
0xa000040: 0x00000000 0x00000000 0x00000000 0x00000000
0xa000050: 0x00000000 0x00000000 0x00000000 0x00000000
0xa000060: 0x00000000 0x00000000 0x00000000 0x00000000
0xa000070: 0x00000000 0x00000000 0x00000000 0x00000000
0xa000080: 0x00000000 0x00000000 0x00000000 0x00000000
0xa000090: 0x00000000 0x00000000 0x00000000 0x00000000
0xa0000a0: 0x00000000 0x00000000 0x00000000 0x00000000
0xa0000b0: 0x00000000 0x00000000 0x00000000 0x00000000
0xa0000c0: 0x00000000 0x00000000 0x00000000 0x00000000
0xa0000d0: 0x00000000 0x00000000 0x00000000 0x00000000
0xa0000e0: 0x00000000 0x00000000 0x00000000 0x00000000
0xa0000f0: 0x00000000 0x00000000 0x00000000 0x00000000

解答

  • 负责写入virtio-mmio配置数据的是QEMU,但你当前命令使用的是e1000传统PCI网卡,和virtio_net无关联,因此QEMU不会向0x0A000000的virtio-mmio区域写入任何相关配置。
  • 要让QEMU正确配置virtio-mmio寄存器并启用virtio_net,需将网卡设备替换为MMIO总线的virtio网卡,并绑定到指定地址。

修改后的QEMU命令示例

qemu-system-aarch64 -M virt-7.1,virtualization=on -cpu cortex-a72 -m 512 -smp 1 -display none -serial mon:stdio -device loader,addr=0x50004000,cpu-num=0,file=/tftp/sd.kdi -device loader,addr=0x50004020,cpu-num=0 -netdev tap,id=mynet0,ifname=tap0,script=no,downscript=no -device virtio-net-device,netdev=mynet0,mac=52:55:00:d1:55:01,mmio-base=0x0A000000

关键说明

  • 替换-device e1000,...为-device virtio-net-device,...,通过mmio-base=0x0A000000将设备绑定到你指定的MMIO地址区域。
  • 配置完成后,QEMU会自动向该MMIO地址写入virtio_net所需的设备ID(0x1,对应virtio_net)、设备特性、队列大小等数据,驱动即可正常识别设备。

内容的提问来源于stack exchange,提问作者Sweet_Dobariya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 13:32:04