1. 课程导入

各位同学好,我是你们这门课的老张。做嵌入式固件开发十几年了,从ARM转到RISC-V,踩过的坑不少。今天咱们先聊聊RISC-V和QEMU这对黄金搭档。

说实话,我第一次接触RISC-V时,心里也犯嘀咕——又一套指令集?学得过来吗?但深入了解后我发现,这东西跟ARM、x86完全不是一个路数。它更像一个指令集框架,让你能按需裁剪。嗯,咱们慢慢聊。

1.1 RISC-V指令集架构简介

RISC-V,念作"risk-five",是加州大学伯克利分校2010年启动的开源指令集架构。它跟ARM、x86最大的区别就一个字——简。

核心特点:

  • 开源免费:没有授权费,没有NDA,谁都能用
  • 模块化设计:基础指令集+可选扩展,按需组合
  • 简洁优雅:基础整数指令仅47条,ARMv7-A有上千条
  • 可扩展性强:预留了大量自定义指令编码空间

RISC-V的指令集分为两部分:基础指令集和标准扩展。基础指令集是必选的,扩展按需添加。我习惯把基础指令集比作"骨架",扩展就是"肌肉"。

基础指令集 说明 典型应用
RV32I 32位整数指令集,47条指令 嵌入式MCU、IoT设备
RV64I 64位整数指令集,兼容RV32I 应用处理器、Linux设备
RV128I 128位整数指令集(实验性) 高性能计算、AI加速器

标准扩展里,最常用的是这几个:

  • M扩展:整数乘除法指令。做固件开发时,没有M扩展的CPU算个乘法要写循环,效率极低
  • F/D扩展:单精度/双精度浮点。跑算法、信号处理必备
  • C扩展:压缩指令,指令长度16位。代码密度提升25%-30%,我曾在Flash只有64KB的芯片上靠它省出8KB空间
  • A扩展:原子操作指令。多核同步、锁机制的基础

我的经验:做裸机固件时,RV32IMC是最常见的组合。M扩展做乘除,C扩展省空间。如果跑Linux,至少需要RV64IMAFD,也就是所谓的RV64GC。

1.2 QEMU仿真器介绍

QEMU,全称Quick EMUlator,是个开源的虚拟化/仿真器。它能仿真完整的计算机系统——CPU、内存、外设、网络,全都能跑。

我最早用QEMU是2012年,当时给一个ARM Cortex-M3的IoT项目做固件开发。硬件板子还没回来,我就用QEMU把整个协议栈调通了。板子到手后,固件直接烧进去就跑起来了。那种感觉,嗯,挺爽的。

QEMU支持两种工作模式:

  • 系统仿真(System Emulation):仿真整台机器,能跑操作系统。咱们这门课主要用这个模式
  • 用户态仿真(User Mode Emulation):只仿真CPU,运行单个程序。适合交叉编译测试

QEMU对RISC-V的支持从2017年开始逐步完善。到现在,它已经能仿真从低功耗MCU到高性能服务器级别的RISC-V芯片了。

QEMU版本 RISC-V支持情况 我的评价
v2.12 (2018) 基础RV32I/RV64I,无特权级 能跑裸机,跑不了Linux
v4.0 (2019) 特权级架构v1.10,S模式 能跑Linux了,但外设少
v5.0 (2020) 向量扩展v0.7.1,更多外设 实用阶段,我开始用它做项目
v7.0 (2022) 特权级v1.12,完整外设模型 成熟稳定,适合教学
v8.0+ (2023) RVA22 profile,AI加速器模型 企业级应用也没问题

1.3 为什么选择QEMU进行RISC-V开发

你可能会问:我有真芯片,干嘛用仿真器?

这个问题我当年也问过。后来在几个项目中吃了亏,才明白QEMU的价值。我给你列几个场景:

  1. 硬件还没回来:芯片流片周期3-6个月,QEMU能让你提前3个月开始写代码
  2. 调试困难:真芯片上出bug,可能连log都打不出来。QEMU可以单步、断点、查看所有寄存器
  3. 回归测试:每次改代码都要烧录到板子上?太慢了。QEMU启动只需几秒
  4. 团队协作:10个人的团队,每人一块开发板?成本太高。QEMU免费,人手一份
  5. 极端场景:想测试内存越界、栈溢出?真芯片上可能直接死机。QEMU能捕获这些异常

注意:QEMU不是万能的。它仿真的是"理想硬件",时序、功耗、模拟信号这些它管不了。所以我的建议是:QEMU做功能验证,真芯片做硬件测试。两者互补,不是替代。

1.4 课程目标与学习路径

这门课的目标很明确:让你能独立用QEMU搭建RISC-V开发环境,完成从裸机固件到RTOS移植的全流程。

咱们的课程分四个阶段:

阶段 内容 产出
基础篇(第1-8章) 环境搭建、QEMU基本用法、RISC-V汇编基础 能运行第一个RISC-V程序
进阶篇(第9-16章) 中断、异常、内存管理、外设仿真 能写完整的裸机固件
实战篇(第17-24章) FreeRTOS移植、设备驱动、网络协议栈 能在QEMU上跑RTOS
高阶篇(第25-30章) 多核仿真、性能分析、自定义指令扩展 能定制自己的RISC-V仿真平台

学习路径上,我建议你:

  • 每章都动手敲代码,光看是学不会的
  • 遇到问题先自己查文档,QEMU的文档其实写得不错
  • 多跟同学交流,有些坑我踩过,但你们可能会踩新的

好了,概览就到这里。下面这张图总结了本章的知识结构,你可以对照着梳理一下思路。

第1章:RISC-V与QEMU概览 · 知识结构 RISC-V指令集架构 开源 · 模块化 · 简洁 QEMU仿真器 系统仿真 · 用户态仿真 课程学习路径 基础→进阶→实战→高阶 基础指令集 RV32I / RV64I 标准扩展 M/F/D/C/A 系统仿真 跑Linux/RTOS 用户态仿真 单程序测试 为什么选择QEMU做RISC-V开发? 提前开发 · 调试方便 · 回归测试 · 团队协作 · 极端场景 基础篇 环境搭建·汇编 进阶篇 中断·内存·外设 实战篇 RTOS·驱动·网络 高阶篇 多核·自定义扩展 课程核心产出 从零搭建QEMU RISC-V开发环境 → 独立完成固件开发全流程 掌握系统仿真、裸机编程、RTOS移植、多核调试等核心技能