加上-monitor unix:qemu-monitor-socket,server,nowait启动qemu,从另一个shell进入monitor。info qom-tree可以看到所有的device以qom格式展示。通过qom-get可以得到对应设备的指定propoty。
info qom-tree大概长这个样子:
(qemu) info qom-tree
info qom-tree
/machine (virt-6.2-machine)
/device-memory[0] (memory-region)
/fw_cfg (fw_cfg_mem)
/\x2from@etc\x2facpi\x2frsdp[0] (memory-region)
/\x2from@etc\x2facpi\x2ftables[0] (memory-region)
/\x2from@etc\x2ftable-loader[0] (memory-region)
/fwcfg.ctl[0] (memory-region)
/fwcfg.data[0] (memory-region)
/fwcfg.dma[0] (memory-region)
/mach-virt.ram[0] (memory-region)
/nvdimm-acpi-io[0] (memory-region)
/peripheral (container)
/console0 (virtconsole)
/nv0 (nvdimm)
。。。
/peripheral-anon (container)
/device[0] (virtio-rng-pci)
/bus master container[0] (memory-region)
/bus master[0] (memory-region)
/virtio-backend (virtio-rng-device)
/virtio-bus (virtio-pci-bus)
/virtio-pci-common-virtio-rng[0] (memory-region)
/virtio-pci-device-virtio-rng[0] (memory-region)
/virtio-pci-isr-virtio-rng[0] (memory-region)
/virtio-pci-notify-pio-virtio-rn
比如要得到virtio-rng-pci的device id,也就是bridge上的addr property,可以这样做:
(qemu) qom-get /machine/peripheral-anon/device[0] "addr"
qom-get /machine/peripheral-anon/device[0] "addr"
32
(qemu)
32并不是device id的值,它的单位是byte,addr/8应该是device id。可以通过lspci验证。