# Ruyi RISC-V Linux 嵌入式实践课 · 课程说明

本文说明课程定位、为何这样设计、调研了什么（含 `reference/` 与校外公开课），以及当前章节与实验怎么组织。详细目录以 [`CourseOutline.html`](./CourseOutline.html) 为准。

---

## 一、课程是什么、为什么好

本课是面向本科 / 初学者的 **RISC-V Linux 嵌入式实践课**：在真板（如 LicheePi 4A，以 [RuyiSDK support-matrix](https://github.com/ruyisdk/support-matrix) 为准）上，用 **C + RuyiSDK** 走完「环境 → 外设 → 可维护应用 → 联网 → 多线程 → 综合项目」。

**相对常见嵌入式课，本课刻意做好这几件事：**

| 做法 | 用意 |
|------|------|
| **项目递进 + 每章一个完整实验** | 不是知识点堆砌；每章有硬验收、能看见板上现象 |
| **讲义固定三节 + 一块实验** | 结构统一，避免讲义切碎、实验只剩尾巴 |
| **讲义讲原理与单项跟做；实验给 C 脚手架** | 学生按讲义往后补，必须结合硬件验收（有别于纯刷题 / 纯 CSAPP 式 Shell 作业） |
| **推 RuyiSDK** | 一键准备 / 一键编译进讲义；实验不强制一键写入，手工烧录可过；ch01 用 **CoreMark 上板跑分** 做通道硬验收 |
| **综合项目：量化本地模型 + 终端 DeepSeek Harness** | 脑子可替换（本地 GGUF 或云端 DeepSeek）；手仍是前六章的 C 与 MQTT |

当前六章 + 综合（摘要）：

| 章 | 名称 | 本章实验（一句话） |
|----|------|-------------------|
| ch01 | 环境与工具链 | 上板通道验收（CoreMark 硬性跑分） |
| ch02 | 够用的 C 语言基础 | 模拟温度：写滞回并改读数 |
| ch03 | GPIO 与执行器 | 继电器控制风扇（模拟温度） |
| ch04 | 串口对话与温控 | DHT22 + status/set 温控 |
| ch05 | 网络与 MQTT | MQTT 远程控灯 |
| ch06 | 线程与协同 | 三线程协同 |
| 综合 | 端侧 Agent 环境终端 | 量化 + 终端 Harness + 荔枝派三线程 |

在线大纲：[`docs/CourseOutline.html`](./CourseOutline.html)（正式预览站：https://duoqilai.github.io/ruyi-riscv-linux-book/docs/CourseOutline.html）  
综合项目：[`docs/project.html`](./project.html)

---

## 二、我们调研了什么

设计大纲前对照过几类材料，目的不是「再办一届培训班」，而是：**借好用的心智与骨架，丢掉与本课身份冲突的包袱。**

### 1. 仓库 `reference/`（嵌入式资料包）

目录里主要是两类本地大包（git 不跟踪）：较大的旧包 `embedded-course-materials/`，以及精简后的 `linux-emb-material2/`。课程旧稿与板卡备忘在可跟踪的 `reference/archive/`、`reference/boards/`。

| 态度 | 材料 | 用法 |
|------|------|------|
| **采纳（改写进讲义骨架）** | 《C 语言高级专题》笔记 | 服务 **ch02**：指针 / 结构体 / 多文件「够用就停」，不整本搬 |
| **采纳（精炼进 ch04）** | 《Linux 应用编程和网络编程》笔记里的**文件 I/O** | 文件编号、读写、出错；接到「配置 / 历史 / 告警」实验。标题虽带「网络」，正文几乎无 MQTT → 网络章仍自写 |
| **轻度参考** | 嵌入式 Linux 学习经验 / 路线图 | 「先上层应用、交叉编译与 Make 绕不开」等原则；**不当章节目录** |
| **舍弃（主线不进）** | 整柜 C++ / Qt 书 | 与本课 C + 用户态项目无关 |
| **舍弃** | 内核 / 驱动大部头、LFS、过时 Debian 教程 | 不做内核课、不做发行版安装课 |
| **舍弃（主线）** | ARM 裸机全集、uboot/内核移植笔记 | 身份是 **Linux 用户态 + 真板项目**；裸机/移植不占主线 |
| **舍弃** | Windows 串口工具、旧 ARM 交叉链安装包等 | 本课走 SSH / 现代工具链与 RuyiSDK |

原则：**长 PDF 只认书名级用途，不当学生必读、不当灌水来源。** 真金在「可改写的笔记骨架 + 我们自己的板上 C」。

### 2. 南京大学计算机系统基础 PA（NJU PA / ICS-PA）

`reference/` 里**没有**整份 PA 仓库；我们主动对照了公开讲义（如 [输入输出 2.5](https://nju-projectn.github.io/ics-pa-gitbook/ics2025/2.5.html)、[最简单的操作系统 3.1](https://nju-projectn.github.io/ics-pa-gitbook/ics2025/3.1.html)、[文件系统 3.4](https://nju-projectn.github.io/ics-pa-gitbook/ics2025/3.4.html)、多道程序等）。

| 从 PA 借什么（说人话） | 落在本课哪里 | 明确不借什么 |
|------------------------|--------------|--------------|
| 访问设备 ≈ 读 / 写 / 控；MMIO 心智；抽象梯子 | **ch03 讲义**加厚原理，实验仍做温控拼装 | 不抄 NEMU、不写裸机驱动、不做 PA 必做题 |
| 文件是字节串；打开后用编号操作；「一切皆文件」直觉 | **ch04** 讲义 + C 文件实验 | 不实现简易文件系统内核 |
| 程序找「管家」（操作系统）办事 | ch04/ch05 开篇心智 | 不写批处理 OS / 特权级课 |
| 一个在等时另一个还能干 | **ch06** 双线程温控直觉 | 不讲虚存实现、不做 Shell/作业控制（有别 CSAPP） |

**和 PA / CSAPP 的边界：** 我们结合 **RISC-V 真板硬件** 与 **C 脚手架**，验收看灯 / 风扇 / 电脑终端消息；不把课程做成「从零写操作系统」或「深入理解计算机系统」式作业集。

### 3. 官方课件框架与其它路线

- 官方《RuyiSDK RISC-V 嵌入式编程技术》类框架：借「可验收、术语清楚、实验别过长」等制作标准；章节按**项目技能链**重排，不照搬「向量加速 / 机器学习专章」命名。
- 市面 STM32 / 裸机长课、纯就业班路线图：承认其「项目驱动」口号，但**不跟**「单片机 → RTOS → 内核移植」全图；本课身份固定为 **Linux 用户态 + RuyiSDK**。

---

## 三、设计理念（定稿口径）

1. **一门课一条线**：RuyiSDK + 交叉编译 + C + 真机；无选修双轨。  
2. **每章 = 讲义三节 + 一个完整实验**；实验不重贴讲义教程。  
3. **实验 = C 脚手架 + 硬件可见验收**。  
4. **综合项目可组装前面模块**：滞回与 MQTT 继续跑；人在终端 Harness 里打字；本地量化模型与云端 DeepSeek 只换地址。

---

## 四、与官方课件框架的章级对照（简）

| 框架常见主题 | 本课 |
|--------------|------|
| 环境 / C 开发调试 | ch01 环境工具链 + ch02 够用的 C 语言基础 |
| GPIO / UART / 外设 | ch03（原理加厚 + 温控实验） |
| 文件与网络 | ch04 + ch05（拆开；网络以 MQTT 为主） |
| 进程 / 线程 | ch06（进程内多线程 + 真风扇；不写 Shell） |
| 机器学习专章 | 综合项目内 **量化部署 + Agent 调工具**（llama.cpp / DeepSeek Harness；见 [`project.html`](./project.html)） |

---

## 五、评价与进度

评价口径见 [`course-evaluation-standard.md`](./course-evaluation-standard.md)：CIPP 四层 + 第 1–4 章板上证据。

| 范围 | 状态 |
|------|------|
| CourseOutline（ch01–ch06 + 综合） | 已按定稿更新；综合见 [`project.html`](./project.html) |
| ch01–ch04 讲义/实验 HTML | 已完成并实机验证 |
| ch05–ch06 讲义/实验 HTML | 初稿完成，实机验证待补 |

发布分支：`main`（GitHub Pages 自动发布）。正式预览：https://duoqilai.github.io/ruyi-riscv-linux-book/
