so we can* distinguish "version mismatch" from "not a QEMU module", when the stamp* check fails during module loading */voidqemu_module_dummy(void);#define module_init(function, type) \static void __attribute__((constructor)) do_qemu_init_ ## function(void)...
当前qemu中是从父类开始,先复制父类的class到子类,然后一次进行type实例中class的初始化。 5.type_initialize还将Objectclass和TypeImpl进行了挂钩。 ti->class->type=ti; 6.MachineClass*mc=MACHINE_CLASS(oc);我理解直接指向class等于直接引用。 7.stm32f4_discovery_board_class_init_callback函数的关键路径。
void (*class_base_init)(ObjectClass *klass, void *data); void *class_data; void (*instance_init)(Object *obj); void (*instance_post_init)(Object *obj); void (*instance_finalize)(Object *obj); bool abstract; const char *parent; TypeImpl *parent_type; ObjectClass *class; int num_int...
1)type_init进行类型的初始化 设备文件的最后一行会调用type_init,对设备的TypeInfo类型进行处理。type_init宏对应module_init宏,其对应的函数添加了__attribute__((constructor))属性,因此会在main函数执行之前调用register_module_init: 该函数会动态分配一个指向ModuleEntry类型的节点,将i8259、ioapic、apic类型的in...
a) module_call_init(MODULE_INIT_QOM);--设备驱动初始化和注册 type_init(x86_cpu_register_types)(target-i386/cpu.c) b) module_call_init(MODULE_INIT_MACHINE); -- 机器类型注册初始化 machine_init(pc_machine_init) c) socket_init d) qemu_init_cpu_loop ...
staticvoid__attribute__((constructor))do_qemu_init_ ##function(void)\{\register_module_init(function,type);\} 这里我们主要关心这个__attribute__((constructor))这是一个gcc的扩展,意味着这个函数在main函数调用之前就会被调用,这样看来,如果传入的function函数名为kvm_accel_class_init,这个宏的作用就是...
void (*init)(MachineState *state); /* 主板的初始化入口函数 */ void (*reset)(void); void (*hot_add_cpu)(const int64_t id, Error **errp); /* VCPU 热插的调用入口 */ int (*kvm_type)(const char *arg); BlockInterfaceType block_default_type; int units_per_default_bus; int max_...
(typeof(*bar2_quirk), quirk->nr_mem); bar2_quirk[0].vdev = vdev; bar2_quirk[0].offset = ASCEND310P_XLOADER_OFFSET; bar2_quirk[0].bar = nr; /* * intercept w/r to the xloader-updating register, * so the vm can't enable xloader-updating */ memory_region_init_io(&quirk...
net_client_init1 net_init_tap net_init_tap_one 后端tap设备初始化 (vhost即虚拟机网卡IO数据通过一个内核线程在内核中直接处理而不需要经过qemu) vhost设备初始化--与内核交互,拉起vhost内核线程。 On 32-bit hosts, QEMU is limited by virtual address space ...
module_call_init在include/qemu/module.h中声明,在util/module.c中定义,其作用是遍历init_type_list[MODULE_INIT_QOM]调用所有已注册QOM(QEMU Object Module)模块的init函数,完成 QOM 模块的初始化。 QOM 模块的注册在每个模块文件末尾的type_init中进行,type_init通过include/qemu/module.h#module_init宏定义的...