k->notify = virtio_mmio_update_irq; k->save_config = virtio_mmio_save_config; @@ -819,6 +836,7 @@ static void virtio_mmio_bus_class_init(ObjectClass *klass, void *data) k->ioeventfd_assign = virtio_mmio_ioeventfd_assign; k->pre_plugged = virtio_mmio_pre_plugged; k->has_variab...
virtio_device_realize接口实现调用了virtio_net_device_realize,对于特定virtio设备(net类型)的初始化都是在这里进行的。所以这部分是对VirtIONet及其包裹的VirtIODevice数据结构进行初始化,包括VirtIODevice结构里的vq指针就是在这里根据队列个数动态申请空间的。 virtio_device_realize接口还执行了virtio_bus_device_plugged...
virtio-net-device 本节我们给系统添加网络相关的配置,和之前一样virtio-mmio还提供了网络设备的注册,这里我们选择添加qemu支持的最简单的user模式网络,其他博客中有大量介绍使用tap网桥等方式虚拟化的标准网络设备,但是在现在大家多使用笔记本开发,无线网卡往往都不支持虚拟网桥,因此免配置的user模式的虚拟网络是比较简单...
sizeasusize) };letdt= DeviceTree::load(dtb_data).expect("failed to parse device tree");walk_dt_node(&dt.root);//遍历数据}//发现了一个支持 "virtio,mmio" 的设备,就进入下一步加载驱动的逻辑fnwalk_dt_node(dt: &Node) {ifletOk(compatible...
(1)virtio-net-pci设备命令行 首先从QEMU的命令行入手,创建一个使用virtio设备的虚拟机,可使用如下命令行: gdb --args ./x86_64-softmmu/qemu-system-x86_64 \ -machine accel=kvm -cpu host -smp sockets=2,cores=2,threads=1 -m 3072M \
至此,我们已经在 QEMU 层面实现了对 M1 的 CPU、PMGR、AIC、PCIE 总线等设备的基本模拟,可以通过 QEMU 命令在 PCIE 线上插上所需的 PCI 设备,如 virtio-blk、virtio-net 等,来尝试启动 MacOS 虚拟机了。 虚拟化下的MacOS和启动 既然已经完成了对 M1 虚拟机所需要的基本组件的模拟,接下来我们考虑如何在模拟...
至此,我们已经在 QEMU 层面实现了对 M1 的 CPU、PMGR、AIC、PCIE 总线等设备的基本模拟,可以通过 QEMU 命令在 PCIE 线上插上所需的 PCI 设备,如 virtio-blk、virtio-net 等,来尝试启动 MacOS 虚拟机了。 虚拟化下的MacOS和启动 既然已经完成了对 M1 虚拟机所需要的基本组件的模拟,接下来我们考虑如何在模拟...
在Guest端,virtio驱动中vm_setup_vq建立与queue对应的Virtqueue num = readl(vm_dev->base+ VIRTIO_MMIO_QUEUE_NUM_MAX);//获取vring.num//vring_create_virtqueuequeue =vring_alloc_queue(vdev, vring_size(num, vring_align),&dma_addr, GFP_KERNEL|__GFP_ZERO);//分配Virtqueue空间//vring_size...
-device常用于指定guest上总线挂载的外部设备,例如virtio-mmio、usb、pci等总线,示例如下: -device virtio-blk-device,drive=disk0,id=hd0 \ -device virtio-gpu-device,xres=$WIDTH,yres=$HEIGHT,id=video0 \ -device virtio-mouse-device,id=input0 \ ...
对于QEMU/KVM虚机,我们使用virtio架构来创建这些设备,包括virtio-net网络设备,virtio-blk块设备,virtio-scsi SCSI设备,virtio-rng RNG设备等等。这些半虚拟化设备得益于采用虚拟化思路设计,所以它们比全虚拟化设备运行更快,更容易管理。 QEMU也与其他程序做交互,例如为客户机提供BIOS服务的SeaBIOS。