当PCI总线上出现ID在这个范围的设备时,virtio-pci就会认为是virtio设备并为其注册一个virtio_device设备信息到virtio总线上。virtio-pci本身并不需要知道virtio设备到底是什么类型,而是会遍历已经加载的virtio-net、virtio-blk等virtio驱动来找到合适的驱动。virtio总线只是virtio-pci中的逻辑,因此在linux kernel看来,所有的...
virtio_bus是一个bus_type的实例,和pci_bus_type并列;virtio_net驱动其实是一分为二,它利用pci_driver和virtio_driver两个driver实现,所以virtio_pci_driver和virtio_net_driver分别挂载在pci和virtio总线上;他们的device也是类似的结构,device之间通过一个virtio_pci_device连接。在初始化时,virtio设备会先在pci...
以virtio-blk为例,首先介绍PCI配置空间内容,virtio-pci实现的硬件基础——capability,最后分析PIC设备的初始化以及virtio-pci设备的初始化。 PCI配置空间 virtio设备作为pci设备,必须实现pci local bus spec规定的配置空间(最大256字节),前64字节是spec中定义好的,称预定义空间,其中前16字节对所有类型的pci设备都相同,...
以virtio-blk为例,首先介绍PCI配置空间内容,virtio-pci实现的硬件基础——capability,最后分析PIC设备的初始化以及virtio-pci设备的初始化。 PCI配置空间 virtio设备作为pci设备,必须实现pci local bus spec规定的配置空间(最大256字节),前64字节是spec中定义好的,称预定义空间,其中前16字节对所有类型的pci设备都相同,...
qemu-system-aarch64: -netdev tap,ifname=tap1,id=network-0,vhost=on,script=../qemu-ifup,vnet_hdr=on: info: net_client_init_fun call10+switch=virbr0+'['-n tap1']'++whoami+ip tuntap add tap1 mode tap user rootioctl(TUNSETIFF): Device or resource busy+ ip linksettap1 up+ sle...
内核提供一个通用的 virtio-pci 驱动程序,供实际的 Virtio 传输设备(例如 virtio-net 或 virtio-scsi)使用。 2)virtqueues 规范 virtqueue 是在 virtio 设备上进行批量数据传输的实现机制。每个设备可以有零个或多个 virtqueue。它由 Guest 分配的缓冲区队列组成,Host 通过读取或写入缓冲区与之交互。此外,virtio 规...
图[1]. virtio-net前后端在QEMU/KVM中的实现 virtio设备发现和初始化 在虚拟机启动之后,virtio前端驱动会把自己标识成一个PCI设备,其中包括PCI厂家标识符,PCI设备标识符。这样虚拟机的内核可以基于这个标识符判断使用哪种驱动程序。因为虚拟机中的Linux内核已经包括了virtio驱动程序,所以virtio驱动会被调用去初始化这个...
virtio分为很多设备类型virtio-net/virtio-blk/virtio-scsi等等,virtqueue实现通用部分,每种设备再实现具体功能部分,可以扩展feature部分,在virtqueue传输的数据中定义自己功能相关标准等。 举例分析 以qemu中实现的virtio-net-pci举例来说 首先它是一个virtio-net类型设备,其次它承载在pci上,所以VirtIONetPCI就把两者结合...
检查CONFIG_VIRTIO_BLK、CONFIG_VIRTIO_NET、CONFIG_SCSI_VIRTIO、CONFIG_VIRTIO_PCI,他们分别表示virtio_blk、virtio_net、virtio_scsi、virtio_pci驱动的配置。 如果值为y,那么表示对应的驱动已经正确安装。 如果为m,那么还需要对对应的驱动进行步骤2检查,以确认临时文件系统是否包含virtio驱动。
表3 Virtio的PCI capability结构 其中cfg_type标识virtio_pci_cap类型,共有五种,代表了映射在BAR空间的五组寄存器。virtio_pci_cap类型如表4所示。 表4 Virtio PCI capability类型 2.2 Virtqueue交互队列 Virtio 1.1引入了Packed Virtqueue的概念,对应的Virtio 1.0的Virtqueue被称为Split Virtqueue。