这篇文章的背景是通过9p文件系统在host os与guest os间共享一个目录,或许更专业点的叫法是File system Passthru. 因此需要配置guest os中Linux内核,使之支持下面的选项(.config):
CONFIG_NET_9P=y
CONFIG_NET_9P_VIRTIO=m
CONFIG_9P_FS=y
CONFIG_9P_FS_POSIX_ACL=y
在上述的背景下, 如果我们使用QEMU命令行来启动一个VM,在命令行中加入类似: -device virtio-9p-pci 这样的参数选项时, 那么在Guest OS中不但在/sys/bus/pci/devices中出现一个对应的pci设备,而且在/sys/bus/virtio/devices中也会出现一个virtio类型设备。
我们知道PCI总线是现代计算机体系结构中普遍存在的一个物理总线,而virtio总线则纯粹是软件定义的,在KVM+QEMU的世界里,两者之间到底是何关系?或者假设我们现在想在QEMU+KVM中添加一个新的virtio设备及其驱动,应该怎么做?
通常,Guest OS在初始化过程中会扫描pci bus num = 0的host bridge,也就是北桥,通过它来发现其下挂载的一系列pci设备(包括桥设备),所以我们想添加的的新的virtio设备必须对外展现出一个pci的接口。因为host bridge本身就是靠QEMU模拟出来的,所以在QEMU中模拟一个新的pci设备也是很简单的事情。如果QEMU成功模拟了一个挂在host bridge上的pci设备,那么Guest OS将会通过PCI总线扫描发现之,继而通过device_add函数把该设备添加到