pci_device_type_info的父类型是TYPE_DEVICE Qdev.c (c:\code\qemu-5.0.0\qemu-5.0.0\hw\core) static const TypeInfo device_type_info = { .name = TYPE_DEVICE, .parent = TYPE_OBJECT, .instance_size = sizeof(DeviceState),
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 (*instance_init)(Object *obj); void (*instance_post_init)(Object *obj); void (*instance_finalize)(Object *obj); bool abstract; /*表示类是否是抽象类*/ const char *parent; /*父类的名字*/ TypeImpl *parent_type; /*指向父类TypeImpl的指针*/ ObjectClass *class; /*该类型对应的类的...
1)type_init进行类型的初始化 设备文件的最后一行会调用type_init,对设备的TypeInfo类型进行处理。type_init宏对应module_init宏,其对应的函数添加了__attribute__((constructor))属性,因此会在main函数执行之前调用register_module_init: 该函数会动态分配一个指向ModuleEntry类型的节点,将i8259、ioapic、apic类型的in...
首先在TYPE_PCIE_HOST_BRIDGE中的对象初始函数pcie_host_init初始化MMCONFIG这段内存空间(主要是初始化该MemoryRegion的ops函数集合为pcie_mmcfg_ops,也就是该段空间的读写函数)。然后在TYPE_MCH_PCI_DEVICE中的config_write(mch_write_config)函数中,将该地址空间映射到物理地址空间。
代码底部有typeinit函数,可以看到这个函数实际是执行的registermodule_init,由于有`__attribute((constructor))`关键字,所以这个函数会在main函数之前执行。 type_init(pci_strng_register_types)#definetype_init(function) module_init(function, MODULE_INIT_QOM)#definemodule_init(function, type) \ ...
QEMU运行在系统模式下,需要为QEMU指定 内核镜像、IDE硬盘0/1镜像、内核命令行 等参数,QEMU虚拟机才能正常运行。Debian官网提供了QEMU虚拟机各种平台架构的内核镜像、硬盘文件镜像文件的下载,下载地址为:https://people.debian.org/~aurel32/qemu/,其中mips为大端机的,mipsel为小端机的。
初始化表头用到QLIST_INIT: 代码语言:javascript 代码运行次数:0 运行 AI代码解释 103#defineQLIST_INIT(head)do{\104(head)->lh_first=NULL;\105}while(/*CONSTCOND*/0) 初始化NotifierList就可以这样进行: 代码语言:javascript 代码运行次数:0
(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...