} PCIDeviceClass; typedef struct DeviceClass { /*< private >*/ ObjectClass parent_class; /*< public >*/ ... } DeviceClass; struct ObjectClass { /*< private >*/ Type type; GSList *interfaces; const char *object_cast_cache[OBJECT_CLASS_CAST_CACHE]; const char *class_cast_cache[OBJECT...
qemu_apply_legacy_machine_options(default_opts); object_set_properties_from_keyval(OBJECT(current_machine), default_opts, false, &error_abort); qobject_unref(default_opts); } } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24...
object_property_add_child(OBJECT(bus->parent), bus->name, OBJECT(bus), NULL); object_unref(OBJECT(bus)); } else if (bus != sysbus_get_default()) { /* TODO: once all bus devices are qdevified, only reset handler for main_system_bus should be registered here. */ qemu_register_re...
可以参考这篇博客在qemu中增加pci设备并用linux驱动验证 void memory_region_init_io(MemoryRegion *mr, Object *owner, const MemoryRegionOps *ops, void *opaque, const char *name, uint64_t size) { memory_region_init(mr, owner, name, size); mr->ops = ops; mr->opaque = opaque; mr->termin...
cpu->apic_state =DEVICE(object_new(object_class_get_name(apic_class)));object_property_add_child(OBJECT(cpu),"lapic",OBJECT(cpu->apic_state), &error_abort);object_unref(OBJECT(cpu->apic_state));qdev_prop_set_uint32(cpu->apic_state,"id", cpu->apic_id);/*TODO:convert to link<>...
object_unref(OBJECT(current_machine));exit(1); } 初始化虚拟化加速器configure_accelerator。这里的作用其实就是配置一些qemu与hypervisor层的交互接口。qemu通过一些句柄以ioctl的方式与kmod交互,完成虚拟化相关的操作。在qemu中维护的句柄包括: vmfd 虚拟机相关操作句柄,通过该句柄读写的都是与虚拟机相关的信息。
后续就是调用ppce500_init_mpic_qemu,而sysbus_realize_and_unref 之前也说过,会调用到具体的device.c的realize函数中,由于当前初始化的设备是TYPE_OPENPIC,对应的"openpic"字符串,也就是会跳转到openpic.c的openpic_realize函数 #define TYPE_OPENPIC "openpic" OBJECT_DECLARE_SIMPLE_TYPE(OpenPICState, OPEN...
object_unref(OBJECT(mr)); g_free(name_array); g_free(escaped_name); } } 可以看到函数定义的参数里面,对第一个参数使用的是*,在c语言中如果说传入的参数是一个地址,然后在函数定义里面参数定义的为指针,这样可以达到和C++里面传引用一样的效果,所以说memory_region_init函数也对system_memory进行了修改。
270 static void object_property_free(gpointer data) 271 { 272 ObjectProperty *prop = data; 273 object: add object_property_set_default Jan 10, 2020 274 if (prop->defval) { 275 qobject_unref(prop->defval); 276 prop->defval = NULL; 277 } qom: Allow properties to be ...
cpu->apic_state =DEVICE(object_new(object_class_get_name(apic_class)));object_property_add_child(OBJECT(cpu),"lapic",OBJECT(cpu->apic_state), &error_abort);object_unref(OBJECT(cpu->apic_state));qdev_prop_set_uint32(cpu->apic_state,"id", cpu->apic_id);/*TODO:convert to link<>...