qemu中模拟设备的注册是在main函数之前
来源:互联网 发布:高程数据和影像 编辑:程序博客网 时间:2024/06/08 00:40
qemu将要模拟的设备分成了5类typedef enum { MODULE_INIT_BLOCK, MODULE_INIT_OPTS, MODULE_INIT_QAPI, MODULE_INIT_QOM, MODULE_INIT_TRACE, MODULE_INIT_MAX} module_init_type;#define block_init(function) module_init(function, MODULE_INIT_BLOCK)#define opts_init(function) module_init(function, MODULE_INIT_OPTS)#define qapi_init(function) module_init(function, MODULE_INIT_QAPI)#define type_init(function) module_init(function, MODULE_INIT_QOM)#define trace_init(function) module_init(function, MODULE_INIT_TRACE)这五类注册的时候最后都是调用module_init#define module_init(function, type) \static void __attribute__((constructor)) do_qemu_init_ ## function(void) \{ \ register_module_init(function, type); \}可以看到每个module注册的时候后一个__attribute__((constructor)) 参数。这是gcc的一个参数,给函数加上__attribute__((constructor))。表示此函数会在main函数调用之前被调用。与之对应的是__attribute__((destructor))会在main函数执行完的时候调用.__attribute__((constructor))-> main -> __attribute__((destructor)).这里也就是说通过module_init 注册的函数都会在main函数前被调用。这里也就说在main函数之前以及给你通过register_module_init注册设备了然后在main函数中就可以直接调用注册时候提供的init函数
void module_call_init(module_init_type type){ ModuleTypeList *l; ModuleEntry *e; l = find_type(type); QTAILQ_FOREACH(e, l, node) { e->init(); }}这里以type_init(machvirt_machine_init);为例的话,就会调用machvirt_machine_init。
阅读全文
0 0
- qemu中模拟设备的注册是在main函数之前
- c 语言模块接口函数在main之前注册
- 设置在main 之前运行的函数
- C++能不能在main之前执行自己的函数--答案是可以的
- linux中在main函数之前执行其他函数实现
- QEMU在main函数前对模块的初始化过程
- C++中如何在main()函数之前执行操作?
- C++中如何在main()函数之前执行操作?
- C++中如何在main()函数之前执行操作?
- C++中如何在main()函数之前执行操作?
- c语言中在main函数之前会执行什么
- c++中static变量在main函数之前执行
- 让自己的函数在main函数之前执行
- __attribute__((constructor)) 修饰的函数在main函数之前执行
- 可以在main函数之前执行的函数
- 在main函数之前被调用的函数
- 多玩YY语音的面试题:C++中如何在main()函数之前执行操作?
- 在C++工程中main函数之前跑代码的廉价方法
- HDU 4267 A Simple Problem With Integers
- editor.md国产markdown编辑器踩过的坑
- Linux及常用工具配置
- 将字符串中的小写字母转换成大写字母
- Window和Linux系统下获取U盘UUID
- qemu中模拟设备的注册是在main函数之前
- invalid comparator问题
- 什么是软件开发?
- Android DatePickerDialog和TimePickerDialog显示样式
- esxi
- STL_pair
- tomcat+nginx+redis实现均衡负载、session共享
- JAVA实现创建Excel表并导出
- EXE反编译方法及工具