1.QOM模型,先执行class_init初始化函数,类似C++中构造函数,在new对象的时候调用 2.QOM模型,instance_finalize实例化函数,本类的具体实现 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 主线程kvm初始化 |-qemu_init |-module_call_init(MODULE_INIT_QOM); //vl.c |-kvm_type_init //初始化注册kvm类...
class_id vendor_id device_id subsystem_vendor_id subsystem_id 1. 2. 3. 4. 5. 6. 7. 8. 9. 2)qemu的桥 在qemu中桥,总线,设备都会对应一个设备结构。最开始的初始化硬件的函数是pc_init1,在这里调用函数i440fx_init创建一个pci_bus,并且和isa_bus关联起来,(qemu模拟的还是pci-isa桥),然后再基...
structTypeInfo{constchar*name;constchar*parent;size_tinstance_size;size_tinstance_align;void(*instance_init)(Object*obj);void(*instance_post_init)(Object*obj);void(*instance_finalize)(Object*obj);boolabstract;size_tclass_size;void(*class_init)(ObjectClass*klass,void*data);void(*class_base_ini...
当Qemu命令通过-device传入参数时,device_init_func会根据参数去查找设备,并最终调用到该设备对应的类初始化函数、对象初始化函数、以及realize函数; 所以,我们的分析就是这三个入口; 4.2.1 class_init 在网卡虚拟化过程中,参数只需要指定PCI代理设备即可,也就是-device virtio-net-pci, netdev=tap0,从而会调用到...
= { .name = TYPE_PCI_EDU_DEVICE, .parent = TYPE_PCI_DEVICE,//父类型是PCI DEVICE .instance_size = sizeof(EduState), .instance_init = edu_instance_init, .class_init = edu_class_init, .interfaces = interfaces, }; type_register_static(&edu_info); } type_init(pci_edu_register_types...
PCIHostBridgeClass --- PCIHostState --- pci_host_type_info nullptr --- PCIExpressHost --- pcie_host_type_info nullptr --- Q35PCIHost --- q35_host_info 其中main_system_bus 是系统总线,在pc_q35_init中初始化的q35_host是北桥芯片
其中需要注意的是相关的realized函数是在xxx_xxx_class_init()函数中设定的。例如, static void pci_device_class_init(ObjectClass *klass, void *data) { DeviceClass *k = DEVICE_CLASS(klass); k->realize = pci_qdev_realize; k->unrealize = pci_qdev_unrealize; ...
初始化函数 class_init 代码底部有typeinit函数,可以看到这个函数实际是执行的registermodule_init,由于有`__attribute((constructor))`关键字,所以这个函数会在main函数之前执行。 type_init(pci_strng_register_types)#definetype_init(function) module_init(function, MODULE_INIT_QOM)#definemodule_init(function, ...
主板类型定义与实例化主板类型由MachineClass定义。在QEMU内部,选择主板类型主要在主函数中完成。通过MachineClass->init函数对主板进行初始化,此过程涉及地址空间划分、CPU初始化与内存初始化等关键步骤。地址空间划分为了适应内存结构与设备访问需求,QEMU将物理地址空间划分为RAM、MMIO、BIOS等部分。RAM分为...
qom: Have class_init() take a const data argument Apr 25, 2025 job-qmp.c qapi job: Elide redundant has_FOO in generated C Dec 15, 2022 job.c test-bdrv-drain: Fix data races Apr 8, 2025 meson.build util/qemu-sockets: Introduce inet socket options controlling TCP keep… ...