type_init中调用type_register_static函数初始化的设备信息和函数都会在插入到hash表中,在qemu_machine_create函数种,通过从hash表中遍历,根据key的值获取一开始保存的信息,然后往下调用type_initialize staticvoidtype_initialize(TypeImpl*ti){TypeImpl*parent;if(ti->class){return;}ti->class_size=type_class_get...
有了上面的先验知识这个函数看起来就比较容易,其核心逻辑就是通过driver这里是virtio-net-pci找到其所属的type,然后对type进行初始化并返回这个type的class。这里重点讲一下type_initialize,它采用的是循环嵌套逻辑先初始化完成的父类之后才实现最终的子类。这里的初始化主要class_init和class_base_init。而且会把初始完...
4.type_initialize是一个关键函数,利用了归递方式,这是类似图形HMI编程常用的方法,比如litegul和LVGL都有类似的归递代码来处理图层,从底层绘制到顶层。当前qemu中是从父类开始,先复制父类的class到子类,然后一次进行type实例中class的初始化。 5.type_initialize还将Objectclass和TypeImpl进行了挂钩。 ti->class->ty...
type_initialize是一个关键函数,利用了归递方式,这是类似图形HMI编程常用的方法,比如litegul和LVGL都有类似的归递代码来处理图层,从底层绘制到顶层。当前qemu中是从父类开始,先复制父类的class到子类,然后一次进行type实例中class的初始化。 type_initialize还将Objectclass和TypeImpl进行了挂钩。ti->class->type = t...
return type_table; } 通过上边的代码可知,qemu通过哈希表找到与设备名称相对应的struct TypeImpl结构体对象,并接着执行type_initialize函数来初始化该结构体,其中OjectClass则是该结构体所指向的class对象。 static void type_initialize(TypeImpl *ti) {
object_new_eith_type函数调用type_initialize。type_initialize首先设置了一些field,并为clazz成员分配了一个ObjectClass,然后初始化了所有的父类和祖类类型,包括实际类型和抽象类型,最后依次调用了父类和祖类的class_base_init函数与自己的class_init函数。
2. 会依次调用device_init_func-> qdev_device_add -> object_new -> object_initialize_with_type。主要的初始化工作都是在object_initialize_with_type中完成的。 3. 首先会调用type_initialize完成类的初始化。在类的初始化中会设置类的realize回调函数为virtio_balloon_pci_realize。该函数在做类对象的实例化...
object_initialize(mr,sizeof(*mr), TYPE_MEMORY_REGION); mr->size =int128_make64(size);if(size ==UINT64_MAX) { mr->size =int128_2_64(); } mr->name =g_strdup(name); mr->owner =owner; mr->ram_block = NULL;//别名MR的ram_block设置为null... } 在该...
245 static void type_initialize(TypeImpl *ti); 246 qom: Do not register interface "types" in the type table and fix names Dec 3, 2013 247 static void type_initialize_interface(TypeImpl *ti, TypeImpl *interface_type, 248 TypeImpl *parent_type) qom: Reimplement Interfaces Aug 10,...
EXDI: DbgCoInitialize returned 0x00000001 EXDI: CoCreateInstance() returned 0x00000000 EXDI: QueryInterface(IExdiServer3) returned 0x00000000 Target command response: QEMU exdiCmd: The function: 'ExdiDbgType' was completed. EXDI: Server::GetTargetInfo() returned 0x00000000 EXD...