pci的注册逻辑很大一部分在父类PCIDevice中,需要先来看看父类的逻辑,看一下父类注册的类型 hw/pci/pci.c static const TypeInfo pci_device_type_info = { .name = TYPE_PCI_DEVICE, .parent = TYPE_DEVICE, .instance_size = sizeof(PCIDevice), .abstract = true, .class_size = sizeof(PCIDeviceCl...
简介:EDU Device是用于编写(内核)驱动程序的教育设备。它的初衷是支持在马萨里克大学教授的 Linux 内核讲座。学生将获得此虚拟设备,并应编写具有 I/O、IRQ、DMA 等的驱动程序。PCI ID: 1234:11e8PCI Region 0: I/O 内存,大小为 1 MB。用户应该通过此内存与卡进行通信。
3. 调用qemu_opts_foreach(&qemu_device_opts, device_init_func, NULL, 1) 创建命令行上指定的设备 4. device_init_func调用qdev_device_add(opts) 5. qdev_device_add函数的流程如下: a) 调用qemu_opt_get(opts, "driver")获取driver选项,这里应该是virtio-net-pci b) 调用qdev_find_info(NULL, d...
View Code stackoverflow 上也有讨论怎么增加一个设备How to add a new device in QEMU source code?
-device <dev>[,bus=pcie.0] 2.1.2 要公开新的 PCI Express 根总线,请使用: -device pxb-pcie,id=pcie.1,bus_nr=x[,numa_node=y][,addr=z] PCI Express 根端口和 PCI Express 至 PCI 桥接器可以连接到 PCIe.1 总线: -device ioh3420,id = root_port1 [,bus= PCIe.1] \ [,chassis= x] ...
memory_region_add_subregion_overlap(vdev->bars[nr].region.mem, bar2_quirk[1].offset, &quirk->mem[1], 1); } QLIST_INSERT_HEAD(&vdev->bars[nr].quirks, quirk, next); } static void vfio_probe_ascend310b_bar2_quirk(VFIOPCIDevice *vdev, int nr) { VFIOQuirk *quirk; VFIOAscendBar...
device_init_func, NULL, NULL)) { exit(1); } device后跟的第一个参数qemu称为driver,其实就是根据不同的设备类型(我们的场景为“virtio-net-pci")匹配不同的处理。而device采用的是通用的设备类,根据驱动的名字在device_init_func函数里调用qdev_device_add()接口,然后匹配到相应的DeviceClass(就是virtio-...
-deviceisa-ipmi-bt,bmc=id[,ioport=val][,irq=val] Like the KCS interface, but defines a BT interface. The default port is 0xe4 and the default interrupt is 5. -devicepci-ipmi-kcs,bmc=id Add a KCS IPMI interafce on the PCI bus.bmc=idThe BMC to connect to, one of ipmi-bmc-sim...
ivshmem:(Inter-VM shared memory device)是QEMU提供的一种宿主机与虚拟机之间或多个虚拟机之间共享内存的特殊设备。它有两种形式: ivshmem-plain: 简单的共享内存区域 ivshmem-doorbell: 除了共享内存,还能提供基于中断的通信机制 这种设备在虚拟机内部表现为PCI设备,共享的内存区域则以PCI BAR的形式存在。ivshmemPCI设...