ARM64 Virtualization
ARM64虚拟化基于ARMv8-A架构的异常等级和两阶段地址转换机制实现,涵盖平台虚拟化、资源虚拟化与应用程序虚拟化三类。通过Hypervisor在EL2控制虚拟机,利用硬件辅助技术管理内存(Stage 1&2页表)、I/O(软件模拟、设备透传、SR-IOV)和CPU(vCPU调度),并处理来自EL1的异常与中断,确保资源隔离与性能。
Qemu硬件建模
QEMU通过6个阶段创建虚拟机:命令行解析、机器类型选择注册、对象实例化、硬件设备初始化、加速器与CPU初始化、启动虚拟机。外设建模以PL011串口和edu教学设备为例,涵盖设备类型定义、状态结构、MMIO回调、中断生成、DMA传输等核心机制。中断建模从设备触发到Guest OS处理,包括PLIC仲裁和CPU中断注入。
Qemu Debug
QEMU调试支持本地与远程方式,可通过gdb直接调试或VSCode配置,远程调试利用内置gdbserver控制客户机。日志系统能观测指令流、中断等状态,tracing工具可跟踪内部函数执行与性能,支持多种后端(log、simple、ftrace、dtrace),并允许自定义trace-event用于监控状态变化与客户机操作。
Qemu TCG
QEMU TCG(Tiny Code Generator)是一种动态二进制翻译引擎,将Guest指令(被模拟架构)转换为Host可执行代码。它以基本块(Basic Block)为翻译单元生成Translation Block(TB),利用TB缓存和直接块链接(Direct Block Chaining)优化执行效率,避免重复翻译和上下文切换。TCG采用三级变量(temporary、local te
Qemu初始化流程
QEMU初始化virt Machine时,通过gdb跟踪调用栈观察QOM的class和object创建过程;先调用qemu_init和qemu_create_machine创建class并实例化,再通过virt_machine_init设置CPU socket、初始化设备和生成设备树;之后在machine_done中加载OpenSBI固件(通过riscv_find_and_load_firmwar
Qemu地址空间抽象
Qemu利用地址空间(AddressSpace)和内存区域(MemoryRegion)两个核心概念实现CPU访存模拟。AddressSpace描述CPU或总线看到的完整地址空间,每个AddressSpace对应一棵MemoryRegion树;MemoryRegion表示地址范围的具体映射规则(RAM、ROM、I/O或别名),支持嵌套、离散映射和地址重叠(通过优先级和别名解决)。初始化时创建全局根节
QOM
QEMU Object Model(QOM)是QEMU基于纯C语言实现的面向对象抽象层,支持继承、封装和多态,用于组织设备模拟、MemoryRegion、Machine等组件。其运作分为类型注册、类型初始化和对象初始化三阶段。文章以edu设备为例,详细分析了类型注册(通过DECLARE_INSTANCE_CHECKER、TypeInfo、DEFINE_TYPES及type_init宏在ELF加载阶
Qemu 编译
Qemu 编译涉及环境配置、aarch64 架构编译(可选开启 O0 和 -g3 调试信息)、编译 glib 和 qemu,自动生成 compile_command.json 文件,并支持通过 .gdbinit 脚本进行 GDB 调试。
SR-IOV原理与实现
SR-IOV通过创建原生可共享设备,为每个虚拟机提供独立的内存空间、工作队列和中断处理机制,使虚拟机无需虚拟机管理程序参与即可直接访问I/O设备,解决了纯软件虚拟化的性能瓶颈和直接分配的可扩展性问题。

