1. 课程导论与目标
1.1 什么是QEMU系统级模拟?
QEMU(Quick EMUlator)是一款开源的、跨平台的虚拟化与模拟器软件。在嵌入式开发领域,QEMU的系统级模拟(System Mode)能力尤为关键:它能够模拟完整的硬件平台,包括CPU、内存、中断控制器、定时器、串口、网卡、存储控制器等外设,从而在无需真实硬件的情况下,运行完整的操作系统内核(如Linux、RT-Thread、Zephyr)。
核心概念区分:
- 用户态模拟(User Mode): 仅模拟CPU指令集,用于运行单个应用程序,不模拟外设。
- 系统级模拟(System Mode): 模拟完整硬件平台,可引导操作系统,是嵌入式开发调试的核心场景。
本课程聚焦于系统级模拟,因为它是验证设备树配置、调试内核启动流程、开发底层驱动的最佳环境。
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 本课程学习目标
完成本课程后,你将具备以下核心能力:
- 搭建QEMU ARM64开发环境: 从源码编译QEMU、配置交叉编译工具链、构建最小根文件系统。
- 理解设备树(Device Tree)机制: 掌握.dts语法、中断映射、时钟绑定、pinctrl配置等核心概念。
- 实战设备树配置: 为QEMU的virt平台编写和调试设备树,添加自定义外设。
- 内核启动与调试: 使用QEMU启动Linux内核,通过设备树传递硬件信息,利用GDB进行源码级调试。
- 驱动开发基础: 基于设备树编写简单的字符设备驱动,理解platform驱动模型。
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)