嵌入式开发目录
一、VisionFive 2 JH7110 + Fedora RISC-V 嵌入式开发
更新时间:2026-07-26
目标平台:StarFive VisionFive 2,SoC 为 JH7110,系统主线为 Fedora RISC-V
目标结果:从“能启动板子”提升到“能做 Linux bring-up、RISC-V 架构分析、Fedora 系统集成、Device Tree、Kernel / Driver、性能调试和嵌入式产品化”的专业嵌入式开发能力。
(一) 资料参考:
下面链接建议保存到浏览器书签。由于 Fedora RISC-V、kernel、U-Boot、StarFive SDK 都会持续更新,开始每个阶段前请重新访问对应页面确认最新版本。
| 类别 | 用途 | 地址 |
|---|---|---|
| Fedora RISC-V 总入口 | 了解 Fedora RISC-V 的定位、镜像、hardware、build、wiki 入口 | https://fedoraproject.org/wiki/Architectures/RISC-V |
| Fedora RISC-V hardware 页面 | 确认 VisionFive 2 在 Fedora RISC-V 硬件生态中的位置和 mainline kernel 支持说明 | https://fedoraproject.org/wiki/Architectures/RISC-V/Hardware |
| Fedora VisionFive 2 安装页 | 完成 serial console、firmware、镜像、启动和初始登录 | https://fedoraproject.org/wiki/Architectures/RISC-V/Installing#Installing_on_StarFive_VisionFive_2 |
| StarFive / RVspace 文档库 | 下载 VisionFive 2 datasheet、quick start、JH7110 datasheet、JH7110 TRM、Linux SDK 文档、peripheral driver development guide | https://wiki.rvspace.org/en/project/Document_Publish_Status |
| VisionFive 2 Quick Start Guide | 板卡快速上手、接口、启动与基础配置 | https://doc-en.rvspace.org/VisionFive2/Quick_Start_Guide/ |
| VisionFive 2 Datasheet | 板级硬件规格、接口、电气和 pinout 信息 | https://doc-en.rvspace.org/VisionFive2/Datasheet/ |
| JH7110 Datasheet | SoC 模块、地址空间、外设能力概览 | https://doc-en.rvspace.org/JH7110/Datasheet/ |
| JH7110 TRM | SoC 寄存器、外设细节、底层 driver 开发参考 | https://doc-en.rvspace.org/JH7110/TRM/ |
| RISC-V 官方规范入口 | 系统学习 ISA、privileged architecture、debug、SBI、psABI 等 | https://docs.riscv.org/reference/ |
| RISC-V Unprivileged ISA | 学习基础指令集、扩展和用户态程序模型 | https://docs.riscv.org/reference/isa/unpriv/rv32.html |
| RISC-V Privileged Architecture | 学习 machine/supervisor/user mode、CSR、trap、interrupt、MMU | https://docs.riscv.org/reference/isa/priv/ |
| RISC-V psABI | 学习 calling convention、ELF、relocation、ABI 约定 | https://riscv-non-isa.github.io/riscv-elf-psabi-doc/ |
| RISC-V SBI | 理解 OpenSBI 与 supervisor mode OS 的接口 | https://github.com/riscv-non-isa/riscv-sbi-doc |
| OpenSBI | 学习 RISC-V machine mode firmware | https://github.com/riscv-software-src/opensbi |
| U-Boot VisionFive 2 文档 | 学习 OpenSBI、SPL、U-Boot、firmware image 构建与启动介质关系 | https://docs.u-boot.org/en/latest/board/starfive/visionfive2.html |
| Zephyr VisionFive 2 文档 | 从 RTOS / bare-metal 角度理解 VisionFive 2 与 Linux 的差异 | https://docs.zephyrproject.org/latest/boards/starfive/visionfive2/doc/index.html |
| Linux Kernel 文档总入口 | Driver、Device Tree、subsystem、debugging 的主参考入口 | https://docs.kernel.org/ |
| Linux Device Tree 文档 | 学习 Device Tree 使用模型与 Linux probe 机制 | https://docs.kernel.org/devicetree/usage-model.html |
| Linux Device Tree Bindings | 学习 YAML binding、compatible、外设节点规范 | https://docs.kernel.org/devicetree/bindings/writing-schema.html |
| Linux Driver API | 学习 kernel driver 基础 API 与 driver model | https://docs.kernel.org/driver-api/ |
| Fedora Packaging Guidelines | 学习 Fedora RPM 打包规范 | https://docs.fedoraproject.org/en-US/packaging-guidelines/ |
| Fedora RPM 打包介绍 | 学习 RPM 基础概念和 Fedora 打包流程 | https://developer.fedoraproject.org/deployment/rpm/about.html |
| Yocto Project 文档 | 从 Fedora 开发环境走向产品级定制 rootfs 时学习 | https://docs.yoctoproject.org/ |
| Buildroot 文档 | 学习轻量级 embedded Linux rootfs 构建 | https://buildroot.org/docs.html |
| Bootlin Embedded Linux Training | 系统学习嵌入式 Linux userspace、kernel、rootfs、交叉编译 | https://bootlin.com/training/embedded-linux/ |
| Bootlin Linux Kernel Training | 系统学习 Linux kernel 和 driver 开发 | https://bootlin.com/training/kernel/ |
| Bootlin Yocto Training | 系统学习 Yocto / OpenEmbedded 工程化 | https://bootlin.com/training/yocto/ |
(二) 能力清单
- 能从空白 microSD 重新启动 Fedora RISC-V。
- 能通过 serial console 保存完整 boot log。
- 能解释 OpenSBI、U-Boot、kernel、DTB、initramfs 的关系。
- 能编译和反汇编 RISC-V 程序,并解释 ABI。
- 能通过 userspace 控制 GPIO/I2C/SPI/UART。
- 能把外设应用做成 systemd service。
- 能把服务打成 RPM 并安装/卸载。
- 能修改 Device Tree 并安全恢复。
- 能构建自定义 kernel 或 kernel module。
- 能输出性能基线和最终项目报告。
(三) 学习目标
- 在 VisionFive 2 上稳定启动 Fedora RISC-V,并能通过 serial console 恢复系统。
- 解释
BootROM -> SPL -> OpenSBI -> U-Boot -> Linux kernel -> initramfs -> systemd的启动链。 - 阅读并修改 JH7110 / VisionFive 2 的 Device Tree。
- 构建 OpenSBI、U-Boot、Linux kernel、kernel modules 和 DTB。
- 使用 Fedora 工具链完成 userspace 外设开发、systemd 服务、RPM 打包。
- 编写基础 Linux kernel module / platform driver,并理解 driver model。
- 使用
dmesg、journalctl、ftrace、perf、gdb、trace-cmd、strace、fio、iperf3等工具定位问题。 - 建立一个可复现实验仓库,沉淀 boot log、配置、patch、脚本、性能报告和恢复方案。
(四) 前置准备
1.硬件
- VisionFive 2,建议
8 GB RAM版本。 - 稳定电源,优先使用官方推荐规格。
- 高质量 microSD 卡,建议准备 2 张以上。
- USB-UART 转接器,必须使用
3.3 V TTL,不要使用5 V。 - 网线,建议直连路由器或开发机。
- 可选:eMMC 模块、NVMe SSD、M.2 扩展、USB 网卡、逻辑分析仪、万用表。
- 外设练习套件:GPIO LED / 按键、I2C 温湿度传感器、SPI ADC / OLED、UART GPS / USB 串口模块。
2.主机环境
- Fedora x86_64 Linux 开发机。
- 至少
100 GB可用磁盘空间。 - 安装基础工具:
sudo dnf install -y git gcc make cmake ninja-build ncurses-devel flex bison \
openssl-devel bc elfutils-libelf-devel perl python3 python3-pip minicom \
picocom screen tmux wget curl xz rsync uboot-tools dtc rpmdevtools rpmlint \
fio iperf3 strace ltrace gdb perf trace-cmd
3. 建议仓库结构
visionfive2-fedora-lab/
README.md
docs/
00-lab-setup.md
01-fedora-bringup.md
02-boot-chain.md
03-riscv-architecture.md
04-device-tree.md
05-kernel-build.md
06-driver-dev.md
07-debug-performance.md
08-productization.md
logs/
serial/
dmesg/
journal/
scripts/
flash/
serial/
benchmark/
apps/
gpio-demo/
i2c-demo/
spi-demo/
uart-demo/
sensor-agent/
rpm/
sensor-agent/
kernel/
configs/
patches/
dts/
reports/
boot-report.md
performance-baseline.md
compatibility-matrix.md
二、一年路线图
| 阶段 | 时间 | 核心能力 | VisionFive 2 实战 | 达标产物 |
|---|---|---|---|---|
| 0. 实验台搭建 | 第 0–1 周 | 硬件安全、串口、供电、镜像烧录、日志习惯 | 准备 VisionFive 2、USB-UART、microSD / NVMe、网线、电源、逻辑分析仪 | lab-notes.md、串口 boot log、硬件连接图 |
| 1. Fedora RISC-V 启动 | 第 1–2 周 | Fedora 镜像、firmware、U-Boot、serial console、SSH | 按Fedora 文档启动系统,完成网络、用户、dnf update、备份 boot log | 可重复安装流程、故障恢复清单 |
| 2. RISC-V 架构基础 | 第 3–6 周 | RV64GC、ABI、CSR、trap、MMU、SBI、atomic、memory model | 编写C / assembly 小实验,对比 native 与 cross compile | riscv-labs/、ELF/反汇编笔记、异常/系统调用实验 |
| 3. Fedora Embedded Userspace | 第 7–10 周 | systemd、udev、RPM、SELinux、NetworkManager、GPIO/I2C/SPI/UART | 用 libgpiod、i2c-tools、spidev、UART 接传感器和外设 | 一个 RPM 打包的 sensor daemon |
| 4. Bootloader 与 Kernel | 第 11–16 周 | ROM → SPL → OpenSBI → U-Boot → Kernel → initramfs →systemd | 构建 OpenSBI、U-Boot、Linux kernel,修改 DTS,理解 SPI flash / SD / NVMe 启动 | 自定义 kernel、DTS 修改、恢复手册 |
| 5. Linux Driver 开发 | 第 17–28 周 | platform driver、Device Tree binding、GPIO、IRQ、I2C、SPI、DMA、regmap、IIO、hwmon | 写一个真实 I2C/SPI 外设 driver,带 DTS binding、错误处理和测试 | upstream-style driver、dt_binding_check 记录 |
| 6. Debug / 性能 / 实时 | 第 29–36 周 | ftrace、perf、dynamic_debug、trace-cmd、gdb、latency、IRQ affinity | 做 fio、iperf3、cyclictest、boot time、CPU/thermal profiling | 性能基线报告、RT/latency调优报告 |
| 7. Multimedia / Edge Vision | 第 37–44 周 | DRM/KMS、V4L2、GStreamer、MIPI CSI、HDMI、GPU/VPU 支持边界 | 比较 Fedora mainline 与 StarFive SDK/vendor kernel 的视频、摄像头、显示能力 | 兼容矩阵、camera/video demo |
| 8. 产品化与上游贡献 | 第 45–52 周 | CI、硬件在环、OTA、RPM repo、Yocto/Buildroot、security、upstream patch | 建立 QEMU + VF2 hardware-in-loop 测试;向 Fedora/RISC-V 或 kernel/U-Boot 提交小patch | 可发布 image、CI 报告、至少 1 个上游贡献尝试 |
三、阶段进展:
第 1 阶段:先把板子稳定跑起来
- 硬件准备:VisionFive 2 建议选 8 GB 版本;准备可靠电源、高质量 microSD、USB-UART、网线、备用启动
介质、万用表、逻辑分析仪。 - 串口接线:按 Fedora VisionFive 2 文档使用 40-pin header,常用参数为 115200 8N1;注意 USB-UART 必
须使用 3.3 V TTL,不要接 5 V。 - Fedora 启动:先不要追求桌面,先做 headless boot、serial console、SSH、网络、dnf update、时间同
步、用户权限、安全密码。 - Firmware 安全:Fedora 文档提示需要替换 firmware;你应先保存原始 boot log 和 SPI flash 状态,再按
官方步骤操作,避免把板子刷到不可恢复。 - 最小产物:写出一份 VisionFive2-Fedora-Bringup.md,记录 board revision、镜像版本、firmware 版本、
启动介质、串口日志、网络配置、失败恢复办法。
SivionFive 2-JH7110开发板子和刻录Fedora-riscv镜像
第 2 阶段:吃透 RISC-V,而不是只会 Linux
- 必读:RISC-V 官方规范页面包含 unprivileged ISA、privileged architecture、debug、psABI、vector、
crypto、SBI 等文档入口;你至少要掌握 RV64GC、lp64d ABI、CSR、trap、interrupt、Sv39、SBI。
citeturn8view0 - 实验 1:写 hello.S,用 riscv64-linux-gnu-gcc 或板上 native GCC 编译,使用 objdump -d 看函数调
用、栈、寄存器保存。 - 实验 2:写一个触发非法指令或除零的程序,观察 Linux signal、kernel log 和异常路径。
- 实验 3:对比 syscall、SBI call、U-Boot command、Linux userspace API 的边界。
- 实验 4:用 qemu-system-riscv64 启动最小 kernel/rootfs,理解 QEMU 与真实 VF2 的差异。
- 达标标准:你能解释 M-mode / S-mode / U-mode、OpenSBI 的位置、Linux 为什么运行在 S-mode、设备中断
如何进入 kernel。
第 3 阶段:把 Fedora 当嵌入式系统来用
- 系统管理:掌握 systemd service、udev rule、journald、NetworkManager、firewalld/nftables、
SELinux、tmpfiles.d、logrotate、chrony。 - 外设访问:用 libgpiod 替代旧的 sysfs GPIO;用 i2c-tools、spidev_test、pyserial、gpsd 等做用户态
外设原型。 - 打包能力:学习 RPM spec、rpmbuild、Fedora Packaging Guidelines、systemd service packaging,把自
己的 daemon 打成 RPM。Fedora packaging 文档是后续把工程交付成系统组件的基础。citeturn10view0 - 实战项目:做一个 vf2-sensor-agent,读取 I2C 温湿度传感器、GPIO 按键、UART GPS 或 SPI 小屏,通过
REST/MQTT 输出数据,并用 RPM 安装成 systemd 服务。 - 达标标准:拔电重启后服务自动恢复;外设异常时不会崩溃;日志可追踪;RPM 可卸载、升级、回滚。
第 4 阶段:掌握启动链与 Kernel
- 启动链必须会画出来:BootROM → SPL → OpenSBI → U-Boot → EFI/GRUB/extlinux → Linux kernel →
initramfs → systemd。 - U-Boot 实战:按官方 VisionFive 2 U-Boot 文档构建 OpenSBI、visionfive2_defconfig、u-boot.itb、
spl/u-boot-spl.bin.normal.out,理解每个文件烧到哪里、谁加载谁。citeturn4view3 - Kernel 实战:拉取 mainline kernel,找到 arch/riscv/boot/dts/starfive/,阅读 jh7110 相关 DTS/
DTSI,构建 kernel、modules、DTB,更新 Fedora 的启动项。 - Device Tree:重点学习 compatible、reg、interrupts、clocks、resets、pinctrl、status、aliases、
chosen。 - Initramfs:学习 dracut、kernel command line、rootfs UUID、early userspace、emergency shell。
- 达标标准:你能从源码构建并启动自定义 kernel;能修复一个 DTS 外设节点;能从坏 kernel 恢复回可启动
系统。
第 5 阶段:进入真正的 Driver 开发
- 先写简单 driver:miscdevice 或 platform_driver,通过 Device Tree 匹配,暴露 ioctl / sysfs /
debugfs / character device。 - 再写总线 driver:I2C 温度传感器、SPI ADC、GPIO interrupt button、PWM fan、IIO sensor、hwmon 设
备。 - 必学 kernel 子系统:driver model、Device Tree binding YAML、pinctrl、clk、reset、regmap、
irqchip、DMA、runtime PM、IIO、hwmon、netdev、V4L2 入门。 - 调试工具:dmesg -w、dynamic_debug、ftrace、trace-cmd、perf、lockdep、kmemleak、gdb vmlinux、
addr2line。 - 代码质量:driver 必须处理 probe defer、资源释放、错误路径、并发、用户输入校验、设备断开、
timeout。 - 达标标准:你的 driver 能通过 checkpatch.pl、有 DTS binding、能解释每条错误路径,并能写一封接近
upstream 质量的 patch mail。
第 6 阶段:性能、实时性和可靠性
- Benchmark:用 fio 测 microSD / eMMC / NVMe;用 iperf3 测以太网;用 stress-ng 测稳定性;用 perf
stat/top/record 找热点。 - 实时性:学习 PREEMPT_RT、cyclictest、IRQ affinity、CPU isolation、scheduler policy、timer
latency。 - 启动速度:分析 systemd-analyze blame、kernel initcall、U-Boot delay、network wait、服务依赖。
- 稳定性:加入 watchdog、只读根分区方案、断电保护、日志限额、自动恢复、健康检查。
- 安全性:最少权限 systemd service、SELinux policy 初步、firewall、禁用默认密码、SSH key、SBOM/CVE
追踪。 - 达标标准:你能提交一份工程级 performance-and-reliability-report.md,包含数据、图表、配置和可复现
实验命令。
第 7 阶段:多媒体和视觉方向要现实评估
- JH7110 硬件有 GPU、VPU、ISP、MIPI CSI/DSI、HDMI 等能力,但 Fedora RISC-V 文档提示 mainline
Fedora 镜像偏 headless,GPU 支持通常不是默认重点;所以这阶段要区分“硬件能力”“vendor SDK 能
力”“Fedora mainline 能力”。citeturn2view1 - 学习路线:DRM/KMS → Mesa → framebuffer → V4L2 → GStreamer → camera sensor → MIPI CSI → hardware
codec。 - 实战项目:做一个 camera capture + GStreamer pipeline;如果 Fedora 上缺驱动或用户态组件,就记录缺
口并切换 StarFive SDK/vendor kernel 做对照。 - 达标标准:你能输出一张 compatibility matrix,明确 HDMI、camera、VPU、GPU、OpenGL/Vulkan、
GStreamer 在 Fedora mainline 与 vendor SDK 下分别能不能用、怎么用、缺什么。
第 8 阶段:产品化能力
- Fedora 路线:掌握 RPM packaging、私有 dnf repo、系统镜像定制、systemd hardening、SELinux、日志、
升级、回滚。 - Embedded product 路线:学习 Yocto / OpenEmbedded 和 Buildroot;Fedora 适合开发、验证、服务器型边
缘设备,Yocto/Buildroot 更适合强约束产品镜像。 - CI 路线:QEMU riscv64 做快速测试;VisionFive 2 做 hardware-in-loop,自动上电、串口抓 log、SSH 跑
测试、收集 benchmark。 - 上游路线:至少尝试给 Fedora RISC-V、U-Boot、Linux kernel、StarFive 文档或开源 driver 提一个小
patch。 - 达标标准:你能从零生成一个可交付 image,包含 bootloader、kernel、rootfs、应用、服务、升级策略、
测试报告、故障恢复方案。
四、12周计划
第 1 周:实验台搭建与 Fedora RISC-V 初次启动
1.1 目标
- 完成 VisionFive 2 硬件连接。
- 建立 serial console。
- 启动 Fedora RISC-V。
- 保存完整 boot log。
1.2 阅读
- Fedora RISC-V 总入口。
- Fedora RISC-V hardware 页面。
- Fedora VisionFive 2 安装页。
- VisionFive 2 Quick Start Guide。
- VisionFive 2 Datasheet 的接口和启动相关部分。
1.3 实验
- 记录板卡信息:
- board revision;
- RAM 容量;
- 电源规格;
- microSD / eMMC / NVMe 型号;
- 当前 firmware / bootloader 状态。
- 连接 USB-UART:
- 确认
GND、TX、RX; - 使用
115200 8N1; - 保存第一次上电日志。
- 确认
- 下载 Fedora RISC-V image,并写入 microSD。
- 按 Fedora VisionFive 2 文档处理 firmware / bootloader 要求。
- 启动系统,完成初始登录。
- 配置网络、SSH、用户、时间同步。
推荐命令
lsblk
sudo dmesg -w
picocom -b 115200 /dev/ttyUSB0
ssh user@<board-ip>
uname -a
cat /etc/os-release
lscpu
lsblk -f
ip addr
journalctl -b > logs/journal/first-boot.log
dmesg > logs/dmesg/first-boot.dmesg
交付物
docs/00-lab-setup.mddocs/01-fedora-bringup.mdlogs/serial/first-boot.loglogs/dmesg/first-boot.dmesglogs/journal/first-boot.log
验收标准
- 能通过 serial console 看到完整启动日志。
- 能通过 SSH 登录 Fedora RISC-V。
- 能说明当前系统的 kernel version、Fedora version、启动介质。
- 能在启动失败时回到 serial console 排查。
第 2 周:启动链、Firmware、OpenSBI 与 U-Boot
2.1 目标
- 理解 VisionFive 2 从上电到 Linux 的完整启动链。
- 能解释 OpenSBI 和 U-Boot 的角色。
- 能查看和备份 U-Boot environment。
2.2 阅读
- U-Boot VisionFive 2 官方文档。
- Fedora VisionFive 2 安装页中的 firmware 说明。
- OpenSBI 项目文档。
- StarFive / RVspace JH7110 启动相关资料。
2.3 实验
- 画出启动链:
BootROMSPLOpenSBIU-Bootkernelinitramfssystemd
- 在 serial console 中进入 U-Boot。
- 查看 U-Boot environment:
printenv
bdinfo
help
version
- 记录启动命令、boot target、kernel command line。
- 对比正常启动和故意拔掉启动介质时的日志差异。
- 尝试从 U-Boot 手动列出启动分区。
推荐命令
journalctl -b -k
cat /proc/cmdline
ls /boot
ls /boot/dtb* 2>/dev/null || true
find /boot -maxdepth 3 -type f | sort
systemd-analyze
systemd-analyze blame
交付物
docs/02-boot-chain.mdlogs/serial/uboot-env.loglogs/serial/failed-boot-no-media.log- 一张启动链图,可以用 Mermaid:
flowchart LR
A[BootROM] --> B[SPL]
B --> C[OpenSBI]
C --> D[U-Boot]
D --> E[Linux kernel]
E --> F[initramfs]
F --> G[systemd]
验收标准
- 能解释 OpenSBI 为什么运行在 RISC-V machine mode。
- 能解释 Linux 为什么通常运行在 supervisor mode。
- 能从 boot log 中指出 OpenSBI、U-Boot、kernel 三个阶段。
- 能说明 firmware、bootloader、kernel、rootfs 分别存在哪里。
第 3 周:RISC-V RV64GC、ABI、ELF 与基础汇编
3.1 目标
- 理解 VisionFive 2 上运行的 RISC-V 64-bit Linux 程序。
- 掌握
RV64GC、lp64d ABI、寄存器、函数调用约定、ELF 基础。
3.2 阅读
- RISC-V Unprivileged ISA 相关章节。
- RISC-V psABI 文档。
- Fedora RISC-V 架构页面中关于架构、构建和包的说明。
3.3 实验
- 编译 C 程序并反汇编:
cat > hello.c <<'EOF'
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int main(void) {
printf("add=%d\n", add(1, 2));
return 0;
}
EOF
gcc -O0 -g hello.c -o hello-O0
gcc -O2 -g hello.c -o hello-O2
readelf -h hello-O0
objdump -d hello-O0 > hello-O0.S
objdump -d hello-O2 > hello-O2.S
- 观察:
a0–a7参数寄存器;sp栈指针;ra返回地址;- 函数 prologue / epilogue;
call、ret、ld、sd等指令。
- 写一个最小 assembly 程序。
- 用
gdb单步调试。 - 比较 native compile 和 cross compile 的结果。
3.4 推荐命令
gcc -v
file hello-O0
readelf -h hello-O0
readelf -A hello-O0
objdump -d hello-O0 | less
gdb ./hello-O0
strace ./hello-O0
3.5 交付物
docs/03-riscv-architecture.mdapps/riscv-elf-labs/apps/riscv-elf-labs/hello-O0.Sapps/riscv-elf-labs/hello-O2.S
3.6 验收标准
- 能解释
RV64GC中I/M/A/F/D/C的含义。 - 能解释
lp64dABI。 - 能根据反汇编指出函数参数、返回值和栈帧。
- 能用
gdb单步调试 RISC-V 程序。
第 4 周:Linux Userspace 外设访问:GPIO、I2C、SPI、UART
4.1 目标
- 在 Fedora RISC-V 上完成基础外设访问。
- 使用 userspace API 快速验证硬件。
- 建立外设 bring-up 方法论。
4.2 阅读
- VisionFive 2 pinout / datasheet。
- Linux GPIO userspace 文档。
libgpiod文档。- Linux I2C / SPI userspace 相关文档。
4.3 实验
- GPIO:
- 接 LED 和按键;
- 使用
gpioinfo、gpioset、gpioget测试; - 写 C 或 Python demo。
- I2C:
- 接一个温湿度传感器;
- 用
i2cdetect确认地址; - 写读取程序。
- SPI:
- 接 SPI loopback 或 SPI OLED / ADC;
- 使用
spidev_test。
- UART:
- 接另一个串口设备;
- 用
minicom/picocom/ Pythonpyserial通信。
4.4 推荐命令
gpioinfo
gpiodetect
gpioset <chip> <line>=1
gpioget <chip> <line>
i2cdetect -l
i2cdetect -y <bus>
i2cdump -y <bus> <addr>
ls -l /dev/spidev*
ls -l /dev/ttyS* /dev/ttyUSB*
4.5 交付物
apps/gpio-demo/apps/i2c-demo/apps/spi-demo/apps/uart-demo/docs/04-userspace-peripherals.md
4.6 验收标准
- 能在不改 kernel 的情况下验证 GPIO/I2C/SPI/UART 是否工作。
- 能区分硬件接线错误、Device Tree 未启用、driver 未加载、权限不足。
- 能写出一份外设 bring-up checklist。
第 5 周:systemd 服务、日志、udev、权限和守护进程
5.1 目标
- 把外设 demo 变成可靠的 Fedora 服务。
- 掌握嵌入式 Linux 常见 userspace 工程化方法。
5.2 阅读
- Fedora systemd 相关文档。
- systemd service unit 文档。
- udev rule 基础。
- Fedora 安全和服务权限相关资料。
5.3 实验
- 编写
vf2-sensor-agent:- 周期读取 I2C 传感器;
- 读取 GPIO 按键;
- 输出 JSON 日志;
- 提供简单 HTTP 或 MQTT 接口,二选一即可。
- 编写 systemd service:
Restart=on-failureUser=Group=NoNewPrivileges=trueProtectSystem=PrivateTmp=true
- 配置 udev rule,让服务用户拥有必要设备访问权限。
- 模拟外设断开、总线错误、进程崩溃,观察服务恢复。
5.4 推荐命令
systemctl daemon-reload
systemctl enable --now vf2-sensor-agent.service
systemctl status vf2-sensor-agent.service
journalctl -u vf2-sensor-agent.service -f
systemd-analyze security vf2-sensor-agent.service
udevadm info --attribute-walk --name /dev/i2c-<bus>
udevadm control --reload
5.5 交付物
apps/sensor-agent/apps/sensor-agent/vf2-sensor-agent.serviceapps/sensor-agent/README.mddocs/05-systemd-daemon.md
5.6 验收标准
- 服务开机自动启动。
- 外设错误不会导致系统失控。
journalctl能看到结构化日志。systemd-analyze security输出已被记录,并能解释主要风险。
第 6 周:RPM 打包与 Fedora 系统集成
6.1 目标
- 把 userspace 服务打包成 RPM。
- 掌握 Fedora/RPM 工程交付基本流程。
6.2 阅读
- Fedora Packaging Guidelines。
- Fedora Developer Portal RPM 打包介绍。
- RPM spec 文件基础。
6.3 实验
- 创建 RPM 打包目录。
- 为
vf2-sensor-agent编写.spec。 - 打包:
rpmdev-setuptree
rpmbuild -ba vf2-sensor-agent.spec
rpmlint vf2-sensor-agent.spec
rpmlint ~/rpmbuild/RPMS/*/*.rpm
- 安装、升级、卸载、回滚测试:
sudo dnf install ./vf2-sensor-agent-*.rpm
rpm -ql vf2-sensor-agent
rpm -qi vf2-sensor-agent
sudo dnf remove vf2-sensor-agent
- 可选:建立本地 RPM repo:
createrepo_c /path/to/repo
6.4 交付物
rpm/sensor-agent/vf2-sensor-agent.specrpm/sensor-agent/README.mddocs/06-rpm-packaging.md- 可安装的 RPM 包。
6.5 验收标准
- RPM 安装后自动部署二进制、配置、systemd unit。
- RPM 卸载后系统干净。
- spec 文件能解释
%prep、%build、%install、%files、scriptlets。 - 能说明 Fedora 包与普通手动复制文件的工程差异。
第 7 周:Device Tree 与 JH7110 外设描述
目标
- 能阅读并修改 VisionFive 2 / JH7110 Device Tree。
- 理解 kernel 如何通过 Device Tree 创建 platform device。
阅读
- Linux Kernel Device Tree 文档。
Documentation/devicetree/bindings/。- mainline kernel 中
arch/riscv/boot/dts/starfive/。 - StarFive JH7110 datasheet / TRM 的外设章节。
实验
- 找到板级 DTS / DTSI:
find arch/riscv/boot/dts -iname '*jh7110*' -o -iname '*visionfive*'
- 阅读关键节点:
cpusmemorychosenaliasessocuartgpioi2cspiethernetsdio/mmc
- 修改一个安全的节点,例如启用某个 I2C/SPI 控制器或调整别名。
- 重新编译 DTB 并启动。
- 用
/proc/device-tree、dmesg、ls /sys/bus/platform/devices验证。
推荐命令
dtc -I dtb -O dts -o running.dts /boot/<your-dtb>.dtb
find /proc/device-tree -maxdepth 3 -type d | sort | less
ls /sys/firmware/devicetree/base
ls /sys/bus/platform/devices
dmesg | grep -Ei 'of:|device tree|i2c|spi|gpio|uart'
交付物
docs/04-device-tree.mdkernel/dts/kernel/patches/0001-vf2-dts-lab.patch- 修改前后的 DTB / DTS 对比。
验收标准
- 能解释
compatible、reg、interrupts、clocks、resets、pinctrl、status。 - 能从 DTS 找到某个外设对应的 MMIO 地址。
- 能说明 Device Tree 与 driver probe 的关系。
- 能安全恢复到旧 DTB。
第 8 周:构建 Linux Kernel、Modules 与 DTB
目标
- 从源码构建适用于 VisionFive 2 的 kernel、modules 和 DTB。
- 能维护自己的 kernel config 和 patch。
阅读
- Linux Kernel build 文档。
- Fedora kernel / initramfs / boot loader 相关资料。
- U-Boot 启动 kernel 的方式。
实验
- 拉取 kernel 源码:
git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux
- 建立配置:
make ARCH=riscv defconfig
make ARCH=riscv menuconfig
- 构建:
make ARCH=riscv -j$(nproc) Image modules dtbs
- 安装 modules 到测试 rootfs 或板上。
- 更新
/boot中 kernel、DTB 和启动配置。 - 记录新旧 kernel 的启动差异。
推荐命令
uname -a
zcat /proc/config.gz > running.config 2>/dev/null || true
lsmod
modinfo <module>
dmesg -w
journalctl -b -k
交付物
docs/05-kernel-build.mdkernel/configs/vf2-lab.configkernel/patches/logs/serial/custom-kernel-boot.log
验收标准
- 能启动自己构建的 kernel。
- 能恢复到 Fedora 原 kernel。
- 能解释
Image、modules、dtbs的作用。 - 能说明 kernel config 与硬件支持的关系。
第 9 周:Kernel Module 与 Platform Driver 入门
目标
- 编写第一个 kernel module。
- 编写一个最小 platform driver,通过 Device Tree 匹配。
- 理解 probe / remove / resource management。
阅读
- Linux Kernel driver model 文档。
- Platform driver 相关示例。
- Device Tree binding 示例。
- Kernel coding style。
实验
- 编写
hello_vf2.ko:module_initmodule_exitpr_info
- 编写最小 platform driver:
of_match_tableplatform_driverprobedevm_*resource management
- 在 DTS 中添加实验节点。
- 加载模块并观察 probe。
推荐命令
make -C /lib/modules/$(uname -r)/build M=$PWD modules
sudo insmod hello_vf2.ko
lsmod | grep hello
dmesg -w
sudo rmmod hello_vf2
modinfo hello_vf2.ko
交付物
kernel/modules/hello_vf2/kernel/modules/vf2_platform_lab/docs/06-driver-dev.mdlogs/dmesg/platform-driver-probe.log
验收标准
- 能解释 module 生命周期。
- 能解释 platform driver 如何通过
compatible匹配。 - 能正确处理 probe 失败路径。
- 能说明
devm_kzalloc、platform_get_resource、devm_ioremap_resource的作用。
第 10 周:I2C / SPI / GPIO Interrupt Driver 实战
目标
- 从 userspace 外设 demo 过渡到 kernel driver。
- 掌握一个真实外设 driver 的基本结构。
阅读
- Linux I2C driver 文档。
- Linux SPI driver 文档。
- GPIO descriptor API。
- Interrupt handling 文档。
- IIO 或 hwmon 子系统入门。
实验
选择一个方向:
方向 A:I2C 传感器 driver
- 使用
i2c_driver。 - 通过 Device Tree 匹配。
- 读取寄存器。
- 通过
hwmon或IIO暴露数据。
方向 B:SPI 外设 driver
- 使用
spi_driver。 - 实现基本读写。
- 处理 mode、speed、bits-per-word。
方向 C:GPIO interrupt button driver
- 使用
gpiod_get。 - 使用
gpiod_to_irq。 - 注册 threaded IRQ。
- 通过 input subsystem 或 sysfs/debugfs 暴露事件。
推荐命令
dmesg -w
cat /proc/interrupts
ls /sys/bus/i2c/devices
ls /sys/bus/spi/devices
ls /sys/bus/platform/devices
trace-cmd record -e irq -e gpio sleep 5
trace-cmd report
交付物
kernel/drivers/vf2_<device>_lab/kernel/dts/<device>-overlay-or-patch.dtsdocs/06-driver-dev.md更新真实 driver 章节。logs/dmesg/real-driver.log
验收标准
- driver 能稳定 probe。
- 外设不存在时 driver 能优雅失败。
- 错误路径不泄漏资源。
- 能解释 driver 属于哪个 kernel subsystem。
- 能说明为何某些功能应该放在 userspace,某些功能应该放在 kernel。
第 11 周:Debug、Tracing、性能与稳定性
目标
- 建立嵌入式 Linux 调试工具箱。
- 对 VisionFive 2 + Fedora RISC-V 做基础性能基线。
- 能定位 boot、CPU、I/O、network、driver 问题。
阅读
- Linux Kernel debugging 文档。
ftrace、perf、dynamic_debug、trace-cmd文档。- systemd boot performance 文档。
实验
- Boot time:
systemd-analyze
systemd-analyze blame
systemd-analyze critical-chain
- CPU:
stress-ng --cpu 4 --timeout 60s --metrics-brief
perf stat stress-ng --cpu 4 --timeout 30s
perf top
- Storage:
fio --name=randread --filename=/tmp/fio.test --size=512M \
--rw=randread --bs=4k --iodepth=16 --numjobs=1 --runtime=60 --time_based
- Network:
iperf3 -s
iperf3 -c <server-ip>
- Kernel tracing:
trace-cmd record -e sched_switch -e irq_handler_entry -e irq_handler_exit sleep 10
trace-cmd report
- Driver debug:
echo 'file <driver-file>.c +p' | sudo tee /sys/kernel/debug/dynamic_debug/control
交付物
docs/07-debug-performance.mdreports/performance-baseline.mdscripts/benchmark/logs/trace/
验收标准
- 能给出 CPU、storage、network、boot time 的基线数据。
- 能用 tracing 工具分析一次中断或调度事件。
- 能打开和关闭某个 driver 的 dynamic debug。
- 能区分 userspace 慢、kernel 慢、I/O 慢、网络慢。
第 12 周:综合项目、产品化与后续路线
目标
- 做一个完整小项目,串起系统启动、外设、服务、打包、监控、性能和文档。
- 明确接下来 3–6 个月的进阶路线。
综合项目建议
项目名:vf2-edge-monitor
功能:
- 读取 I2C 温湿度传感器。
- 读取 GPIO 按键或中断事件。
- 可选读取 SPI 外设。
- systemd service 后台运行。
- 输出 JSON log。
- 提供 HTTP
/metrics或 MQTT 数据上报。 - RPM 打包。
- 提供 benchmark 脚本。
- 提供恢复文档。
- 提供一份 kernel / Device Tree 支持说明。
实验
- 整合前 11 周代码。
- 做一次从空白系统到完整部署的重装演练。
- 制作 release checklist。
- 做一次异常测试:
- 外设断开;
- 网络断开;
- 服务崩溃;
- 重启;
- 磁盘空间不足;
- 错误配置。
- 输出最终报告。
交付物
apps/vf2-edge-monitor/rpm/vf2-edge-monitor/docs/08-productization.mdreports/final-12week-report.mdreports/compatibility-matrix.mdscripts/install-from-scratch.sh
验收标准
- 能在新刷 Fedora RISC-V 系统上按文档部署项目。
- 服务能开机自启,并能自动恢复。
- RPM 能安装、升级、卸载。
- 报告包含硬件信息、系统版本、kernel version、测试命令、测试结果、已知限制。
- 能清楚说明下一步应进入 kernel driver 深水区、Yocto/Buildroot 产品化,还是 multimedia / AI / vision 方向。
五、进阶路线
---------------------------------------------------------------------------------------------------------------------------
路线 A:Linux Kernel / Driver 专家
---------------------------------------------------------------------------------------------------------------------------
- interrupt controller;
- pinctrl / clock / reset;
- DMA;
- regmap;
- IIO;
- hwmon;
- netdev;
- V4L2;
- DRM/KMS;
- power management;
- upstream patch workflow。
目标产物:
- 写一个接近 upstream 质量的 driver。
- 给 Linux kernel、U-Boot、Fedora RISC-V 或 StarFive 相关项目提交 patch。
---------------------------------------------------------------------------------------------------------------------------
路线 B:Fedora / Linux 系统集成专家
---------------------------------------------------------------------------------------------------------------------------
- RPM packaging;
- private dnf repo;
- systemd hardening;
- SELinux policy;
- image build;
- secure update;
- observability;
- hardware-in-loop CI。
目标产物:
- 做一个可交付的 Fedora RISC-V edge image。
---------------------------------------------------------------------------------------------------------------------------
路线 C:Yocto / Buildroot 产品化专家
---------------------------------------------------------------------------------------------------------------------------
继续学习:
- Yocto layers;
- recipes;
- machine configuration;
- kernel / bootloader recipes;
- SDK;
- reproducible build;
- OTA;
- license compliance。
目标产物:
- 为 VisionFive 2 做一个最小产品 rootfs。
---------------------------------------------------------------------------------------------------------------------------
路线 D:Multimedia / Edge Vision 专家
---------------------------------------------------------------------------------------------------------------------------
继续学习:
- DRM/KMS;
- Mesa;
- V4L2;
- GStreamer;
- MIPI CSI;
- HDMI;
- hardware codec;
- camera sensor driver;
- ISP pipeline。
目标产物:
- 输出 Fedora mainline、StarFive vendor SDK、Yocto 三种环境下的 camera / display / codec 兼容矩阵。

浙公网安备 33010602011771号