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)...
通过virtio_net_pci_register来进行信息注册,然后最终会调用type_init(virtio_net_pci_register)初始化这个注册。这个type_init函数相当关键,其具体实现如下: #define type_init(function) module_init(function, MODULE_INIT_QOM) #define module_init(function, type) \ static void __attribute__((constructor)) ...
1)type_init进行类型的初始化 设备文件的最后一行会调用type_init,对设备的TypeInfo类型进行处理。type_init宏对应module_init宏,其对应的函数添加了__attribute__((constructor))属性,因此会在main函数执行之前调用register_module_init: 该函数会动态分配一个指向ModuleEntry类型的节点,将i8259、ioapic、apic类型的in...
staticvoid__attribute__((constructor))do_qemu_init_ ##function(void)\{\register_module_init(function,type);\} 这里我们主要关心这个__attribute__((constructor))这是一个gcc的扩展,意味着这个函数在main函数调用之前就会被调用,这样看来,如果传入的function函数名为kvm_accel_class_init,这个宏的作用就是...
然后是type_init一直往下调用的函数do_qemu_init_pci_hitb_register_types,里面继续调用module_init用来初始化typeinfo、typelmpl结构体。 然后调用hitb_class_init初始化基类 然后调用pci_hitb_realize初始化类对象 hitb_instance_init是总的结构体中的一个函数 ...
object_new(Type)函数用来初始化一个对象,如果对象的类型没有初始化,它会先初始化类结构体,然后会递归调用父类的instance_init函数(先调用父类再调用子类),与instance_post_init(先调用子类,再调用父类),来初始化对象。 在QEMU中每个对象或设备都有一些属性,这些属性有可能是设备的某种状态,也有可能是某个标志等...
Qemu中设备模拟通过type_init先编译进系统,在module_call_init时进行回调,比如图中的xxx_register_types,在这些函数中都是根据TypeInfo类型信息来创建具体的实现信息; net_init_client用来创建网络设备,比如Tap设备; device_init_func根据Qemu命令的传入参数创建虚拟设备,比如Virtio-Net; ...
(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...
the corresponding kernels and initrds:1d58f831f5e5064753c0c138d8d74057 debian_squeeze_mips_standard.qcow2 cb56139b63b88fdb38776051d28bb750 vmlinux-2.6.32-5-4kc-malta 7165e80b0e5c5c3e40f2ca46401373ce vmlinux-2.6.32-5-5kc-malta bf699f435160b0bd9ac62905fa64701e debian_wheezy_mips_standa...
intnet_init_clients(void)net_init_netdev 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 ...