.instance_init = x86_cpu_initfn, .abstract = true, .class_size = sizeof(X86CPUClass), .class_init = x86_cpu_common_class_init, }; x86_cpu类型注册: |-type_init //初始化的时候注册,main函数运行前 |-x86_cpu_register_types |-x86_cpu_type_info //class_init类似构造函数 |-x86_cpu_co...
qemu_opts_foreach(qemu_find_opts("device"), device_init_func, NULL, NULL) //vl.c qdev_device_add //qdev-monitor.c object_new() ->class_init ->instance_init object_property_set_bool(realized) --> virtio_balloon_device_realize //virtio-balloon.c ->virtio_init ->virtio_add_queue 1...
}staticvoidmyhw_instance_init(Object *obj){ }staticconstTypeInfo myhw_info = { .name = TYPE_MYHW, .parent = TYPE_PCI_DEVICE, .instance_size =sizeof(MYHWState), .class_init = myhw_class_init, .instance_init = myhw_instance_init, .interfaces = (InterfaceInfo[]) { { INTERFACE_PCI...
由于实现了类的继承关系,在子类初始化之前,需要先调用父类的实现,图中也表明了继承关系以及调用函数顺序; C语言实现继承,也就是将父对象放置在自己结构体的开始位置,图中的颜色能看出来; 4.2.2 instance_init 类初始化结束后,开始对象的创建: 针对Virtio-Net-PCI的实例化比较简单,作为代理,负责将它的后继对象初...
然后,在执行机器时,通过 class_init 初始化在机器中注册的外围设备,并通过 instance_init 创建和初始化设备实例。Stm32f405_soc_realize 使用 memory_region_init_xxx、memory_region 和 add_subregion 来初始化各种存储器并分级分配内存。DEVICE() 包含在添加 SoC 时添加的外设信息。外设可通过 sysbus_mmio_map ...
staticconstTypeInfo kvm_accel_type = {.name = TYPE_KVM_ACCEL,.parent = TYPE_ACCEL,.instance_init = kvm_accel_instance_init,.class_init = kvm_accel_class_init,.instance_size =sizeof(KVMState),}; kvm_init主要代码如下: staticint kvm_init(MachineState *ms){MachineClass *mc = MACHINE_GET...
.class_init =vfio_pci_dev_class_init, .instance_init = vfio_instance_init, .instance_finalize = vfio_instance_finalize, .interfaces = (InterfaceInfo[]) { { INTERFACE_PCIE_DEVICE }, { INTERFACE_CONVENTIONAL_PCI_DEVICE }, { } },
4.2.2 instance_init 类初始化结束后,开始对象的创建: 针对Virtio-Net-PCI的实例化比较简单,作为代理,负责将它的后继对象初始化,也就是本文的前端设备Virtio-Net; 4.2.3 realize realize的调用,比较绕,简单来说,它的类继承关系中存在多个realize的函数指针,最终会从父类开始执行,一直调用到子类,而这些函数指针的...
4.2.2 instance_init 类初始化结束后,开始对象的创建: 针对Virtio-Net-PCI的实例化比较简单,作为代理,负责将它的后继对象初始化,也就是本文的前端设备Virtio-Net; 4.2.3 realize realize的调用,比较绕,简单来说,它的类继承关系中存在多个realize的函数指针,最终会从父类开始执行,一直调用到子类,而这些函数指针的...
确定了设备位置后,我们接下来就是看设备对象初始化函数FastCP_instance_init,为了方便观看,首先我们要还原变量类型。而变量类型实际上是储存在符号中的,我们可以通过 Shift + F1 打开 Local Types 窗口查看。 通过搜索可以定位到相关的三个类型信息,可以知道类型信息是存在的,只是 IDA 的伪代码没能够自动还原,我们可...