1. 课程导论与目标

1.1 什么是QEMU系统级模拟?

QEMU(Quick EMUlator)是一款开源的、跨平台的虚拟化与模拟器软件。在嵌入式开发领域,QEMU的系统级模拟(System Mode)能力尤为关键:它能够模拟完整的硬件平台,包括CPU、内存、中断控制器、定时器、串口、网卡、存储控制器等外设,从而在无需真实硬件的情况下,运行完整的操作系统内核(如Linux、RT-Thread、Zephyr)。

核心概念区分:

  • 用户态模拟(User Mode): 仅模拟CPU指令集,用于运行单个应用程序,不模拟外设。
  • 系统级模拟(System Mode): 模拟完整硬件平台,可引导操作系统,是嵌入式开发调试的核心场景。

本课程聚焦于系统级模拟,因为它是验证设备树配置、调试内核启动流程、开发底层驱动的最佳环境。

QEMU系统级模拟架构 QEMU系统级模拟架构 用户应用程序 Linux 内核 / RTOS 进程调度 · 内存管理 · 驱动框架 设备树(Device Tree) QEMU 模拟硬件平台 ARM Cortex-A72 GICv3 PL011 UART Virtio Net/Blk 内存控制器 时钟与定时器 PCIe主机桥

1.2 ARM64架构的重要性

ARMv8-A架构(即ARM64)已成为现代嵌入式系统、边缘计算、服务器和移动设备的主流选择。其核心优势包括:

特性 说明 对嵌入式开发的意义
64位指令集 支持超过4GB物理内存寻址 可运行大型应用、数据库、AI推理框架
AArch64执行状态 统一异常等级(EL0~EL3) 清晰的权限分离:用户/内核/安全监控器/固件
GICv3/v4中断控制器 支持虚拟化中断、LPI、ITS 适合虚拟化场景和复杂多核系统
生态成熟 Linux、U-Boot、TF-A、OP-TEE全面支持 开发资源丰富,社区活跃

为什么选择QEMU学习ARM64? 真实ARM64开发板(如树莓派4B、Jetson Nano)价格较高且调试手段有限。QEMU提供了灵活的虚拟硬件配置、强大的GDB调试接口和快照功能,是学习ARM64底层原理的最佳实践平台。

1.3 本课程学习目标

完成本课程后,你将具备以下核心能力:

  1. 搭建QEMU ARM64开发环境: 从源码编译QEMU、配置交叉编译工具链、构建最小根文件系统。
  2. 理解设备树(Device Tree)机制: 掌握.dts语法、中断映射、时钟绑定、pinctrl配置等核心概念。
  3. 实战设备树配置: 为QEMU的virt平台编写和调试设备树,添加自定义外设。
  4. 内核启动与调试: 使用QEMU启动Linux内核,通过设备树传递硬件信息,利用GDB进行源码级调试。
  5. 驱动开发基础: 基于设备树编写简单的字符设备驱动,理解platform驱动模型。
课程知识体系 课程知识体系与学习路径 环境搭建 QEMU编译 · 工具链 设备树基础 语法 · 绑定 · 中断 QEMU实战 启动内核 · 调试 驱动 开发 课程核心产出 ✅ 可复现的QEMU ARM64开发环境 ✅ 自定义设备树文件(.dts + .dtb) ✅ 基于设备树的字符驱动示例

1.4 前置知识要求

为了获得最佳学习体验,建议你具备以下基础:

领域 具体要求 推荐学习资源
C语言编程 指针、结构体、内存操作、链表 《C程序设计语言》K&R
Linux基础 命令行操作、文件系统、进程概念 《鸟哥的Linux私房菜》基础篇
计算机体系结构 CPU流水线、内存层次、中断机制 《计算机组成与设计》 Patterson
嵌入式基础(可选) 交叉编译、启动流程、寄存器操作 《嵌入式Linux基础教程》

注意: 如果你对ARM64汇编或Linux内核驱动完全陌生,不必担心。本课程会从基础概念讲起,并在每章提供必要的背景知识。但请确保你已掌握C语言和Linux基本操作,否则学习曲线会较为陡峭。

1.5 课程实验环境概览

本课程所有实验均基于以下软件栈:

  • 宿主机: Ubuntu 22.04 LTS (x86_64) 或 WSL2
  • QEMU版本: 8.2.x(从源码编译,启用KVM加速)
  • 交叉编译工具链: aarch64-linux-gnu-gcc 13.x
  • Linux内核: 6.6 LTS
  • 根文件系统: Buildroot 2024.02 构建的initramfs
  • 目标机器: QEMU virt (ARM64)