文章目录
- 1、QOM简介
- `register_module_init` 的实现
- Machine 类型注册
- Machine 类定义
- MachineClass 结构体定义
- MachineState 结构体定义
- virt 机器初始化流程
- 自定义设备初始化
1、QOM简介
QEMU Object Model (QOM) 是 QEMU 中的一种对象系统,用于实现 QEMU 设备模型和设备模拟功能(面向对象的机制)。
QEMU Object Model (QOM) 是 QEMU 中的一种对象系统:
- 一个支持动态地注册 “类” 的系统
- “类” 的单继承
- “无状态接口” 的多重继承
QEMU的Machine通过QOM进行抽象:https://qemu.readthedocs.io/en/latest/devel/qom.html(QEMU官方文档)。
QOM注册类的流程如下所示(qemu5以上版本为例,qemu4中类的注册通过宏完成):
QOM 中定义一个类 MyType 一般需要 TypeInfo, MyTypeClass, MyTypeState, TypeImpl 等结构,其中 TypeInfo 是用户定义类时提供的该类的信息,其会在注册到系统时被转换成 TypeImpl, MyTypeClass 与 MyTypeState 两个结构体分别是类与该类的对象的结构体,前者提供该类的虚函数列表供子类实现,后者记录了该类的对象的相关信息。
QOM中的注册的类在main函数执行之前会被添加到链表中,就是通过type_init将对应设备注册到了系统中,ty