Rockchip 设备从 NVMe 启动 fnOS:将 U-Boot 写入 SPI
本教程用于为受支持的 Rockchip 设备写入 SPI 启动固件,使设备能够从 NVMe 启动 fnOS。请先将 fnOS 安装到 NVMe;本文写入的 U-Boot 只负责引导,不会把 fnOS 安装到硬盘。
重要: 写错固件、选错存储设备或在写入过程中断电,都可能导致设备无法启动。开始前请备份重要数据,并准备好该设备的 Maskrom/Recovery 操作方法。
1. 确认设备型号
在设备现有的 Linux 系统中运行:
tr -d '\0' </proc/device-tree/model; echo
tr '\0' '\n' </proc/device-tree/compatible
将输出与下表核对。只有下表中的型号支持使用本教程提供的 U-Boot 写入 SPI,并从 NVMe 启动 fnOS。 型号不一致时不要尝试刷写;名称相近也不代表固件兼容。
| 设备型号 | 飞牛OS U-Boot 下载 | SHA-256 |
|---|---|---|
| ROCK 5 ITX | 下载 | ce16775346accdbeb6e14e128df5af6a66d8a9fc06199eef214bd81396ff1011 |
| Orange Pi 5 Plus | 下载 | 17cb94f87b724fdf7945033cb05042afb0d70bd87cec0cbb82d3c7b8d02a87b3 |
| Orange Pi 3B | 下载 | 4e9bca18e7fc1892aa02fd89c62e1961186b7be7e2d95bbb5daacf58978a5d3f |
| NanoPi M5(UFS) | 下载 | d1c9769ce46a2537aa6bcb847b2687ddc3c41a8dee244c44f23616e8f90cdb96 |
| ROCK 5B Plus | 下载 | 0e5bbfaae3ccdc40aa3b057ec71e9d40a83cf5c7d8b0e87da94b0d09aa6cb656 |
| NanoPi M5 | 下载 | 2225cd2aed512c508196d89ea0e93a8787aeb2b1e6f3ab5be27d42d3670b4b94 |
| HinLink HNAS | 下载 | 0f4b7fe08fe74544c3c91923924cc96608695b230fded4434881d8f127cb332a |
| ROCK 4D | 下载 | ae9338235d0e9baacc1176af21b6c5e964c99830f5010fba71a34dd8975d6390 |
| NanoPC T6 | 下载 | eecff0a98277daa1b33ccc7f4f3c7e8eb7433d7a4277993a3abde4ac6cbedf82 |
| ROCK 4D(UFS) | 下载 | 9cfeda0ef08b064a822420c36db7457be5d82209de1667ede60524a2ff89e82f |
| ROCK 5B / 5B Plus / 5T 通用版 | 下载 | 08e35a6a0eae97a1ba017ca4f0221b56601fa5359542f2e970668579471648eb |
| Orange Pi 5 | 下载 | 8e5756fc7fa990d0cc6c68b5c743da08092a2a0a09a06accc906ec824a83a5a2 |
| ROCK 5B | 下载 | cb0ff7a51fd53196be55951f3ae4a8f51c6ece3f18c3d0916c3543f4030b7dcb |
| ROCK 5T | 下载 | 20ce57b9325bdbf3be17f9033f24e35c57fbfbdad27a75d41458c83fae2fa6a0 |
下载后将文件保存为 u-boot-rockchip-spi.bin。建议先确认文件不是下载失败产生的 HTML 页面:
file u-boot-rockchip-spi.bin
stat -c '%n: %s bytes' u-boot-rockchip-spi.bin
接下来任选一种方式写入 SPI:使用电脑刷写,或者在设备当前运行的 Linux 系统中刷写。不要重复执行两种方式。
2A. 通过电脑写入 SPI
Linux:使用 rkdeveloptool
准备以下文件:
- 本教程中与设备型号完全对应的
u-boot-rockchip-spi.bin。 - 与设备 SoC 完全匹配、且支持 SPI NOR 的 Rockchip Loader(通常名为
MiniLoaderAll.bin或*loader*.bin)。Loader 只用于初始化设备,不是要写入 SPI 的 U-Boot,不能跨 SoC 混用。
先获取 rkdeveloptool 源码(例如 rockchip-linux/rkdeveloptool),在 Debian/Ubuntu 上进入源码目录后编译:
sudo apt update
sudo apt install -y build-essential autoconf automake libtool pkg-config \
libusb-1.0-0-dev libudev-dev zlib1g-dev
./autogen.sh
./configure
make -j"$(nproc)"
-
断开设备电源,按设备说明进入 Maskrom 模式,并通过 USB OTG/升级口连接电脑。
-
确认工具检测到设备,输出末尾应为
Maskrom:sudo ./rkdeveloptool ld -
将匹配的 Loader 临时下载到设备内存,使设备进入 Loader 模式:
sudo ./rkdeveloptool db /path/to/MiniLoaderAll.bin sudo ./rkdeveloptool ld -
切换目标存储为 SPI NOR。
9代表SPINOR:sudo ./rkdeveloptool cs 9 sudo ./rkdeveloptool rfics 9必须显示Change Storage OK,并且rfi应显示合理的 SPI 容量。若切换失败,请立即停止,不要执行下一步。 -
从 SPI 起始位置写入对应的 U-Boot,然后重启设备:
sudo ./rkdeveloptool wl 0 u-boot-rockchip-spi.bin sudo ./rkdeveloptool rd
wl 成功完成前不要拔线或断电。这里的 0 是 SPI 的起始扇区,不是电脑上的磁盘编号。
Windows:使用 RKDevTool 图形工具
以下步骤以 RKDevTool_Release_v3.28 为例:
-
打开瑞芯微开发工具
执行
RKDevTool_Release_v3.28\RKDevTool.exe,让设备进入 Maskrom 模式,再将设备的 USB OTG 接口连接到电脑。界面底部应显示“发现一个 MASKROM 设备”。- 如果设备有多个 USB 接口,请依次尝试,直到工具正确识别设备;也可以参考设备制造商的 Wiki 确认 USB OTG 接口。
- 部分使用 Type-C 供电的设备会复用供电口作为 OTG 接口。如果其他 USB 接口均无法识别,请尝试将供电口连接到电脑。
-
配置烧录镜像

- Loader:根据设备的实际芯片选择 Loader。工具所需的 Loader 均放在
Firmware目录中。例如,RK3399 使用.\Firmware\rk3399_loader_v1.30.130.bin,RK3588 使用.\Firmware\rk3588_spl_loader_v1.10.112.bin。Loader 必须与设备 SoC 匹配。 - System:选择与设备型号对应的
u-boot-rockchip-spi.bin,可以使用相对路径或绝对路径;然后在“存储”列选择 Flash。不同版本的工具也可能将其显示为 SPI 或类似名称。 - 其余项目无需配置,也不要勾选。
- Loader:根据设备的实际芯片选择 Loader。工具所需的 Loader 均放在
-
烧录镜像
勾选“强制按地址写”,然后点击“执行”。工具会自动开始烧录,并在烧录完成后自动重启设备。在工具显示烧录成功前,不要拔出 USB 线或断开设备电源。
如果烧录失败,请先检查 Loader 是否与设备芯片匹配。也可以改用
RKDevTool_Release_v2.86,配置方法相同,但该版本不需要勾选“强制按地址写”。
如果工具没有提供 Flash/SPI 存储选项,或显示的目标存储仍为 eMMC,请停止操作,不要点击“执行”。
Windows 刷机工具也可参考 Rockchip 瑞芯微系列 eMMC USB 线刷教程 中的驱动与 RKDevTool 下载。
2B. 在设备当前系统中写入 SPI
这种方式适用于设备已经能从 SD 卡、eMMC 或其他介质启动 Linux,并且内核已将 SPI NOR 暴露为 /dev/mtdblock0 的情况。
-
下载与设备型号对应的 U-Boot。例如,下面以 ROCK 5B 为例;其他设备必须替换为表格中的对应地址:
curl -fL --retry 3 \ -o /tmp/u-boot-rockchip-spi.bin \ https://help-static.fnnas.com/arm/uboot/rock-5b/u-boot-rockchip-spi.bin -
确认 SPI 设备。
/proc/mtd中的mtd0必须明确对应 SPI NOR;若文件不存在、容量小于镜像,或无法确认用途,请停止:cat /proc/mtd ls -l /dev/mtd0 /dev/mtdblock0 image_size=$(stat -c %s /tmp/u-boot-rockchip-spi.bin) flash_size=$(($(cat /sys/class/block/mtdblock0/size) * 512)) printf 'image=%s bytes, spi=%s bytes\n' "$image_size" "$flash_size" test "$image_size" -le "$flash_size" -
备份当前 SPI 内容。请把备份复制到另一台电脑或其他不会被本次操作影响的存储介质:
sudo dd if=/dev/mtdblock0 of="$HOME/spi-backup.bin" \ bs=1M status=progress sync -
写入并校验。整个过程必须保持稳定供电:
sudo dd if=/tmp/u-boot-rockchip-spi.bin of=/dev/mtdblock0 \ bs=1M conv=fsync,notrunc status=progress sync sudo cmp -n "$(stat -c %s /tmp/u-boot-rockchip-spi.bin)" \ /tmp/u-boot-rockchip-spi.bin /dev/mtdblock0
cmp 没有输出且退出码为 0 表示写入内容一致:
echo $?
sudo reboot
3. 验证从 NVMe 启动
重启后登录 fnOS,确认根文件系统所在设备:
findmnt -no SOURCE /
lsblk -o NAME,TYPE,SIZE,FSTYPE,MOUNTPOINTS,MODEL
NVMe 根设备通常显示为 /dev/nvme0n1p...。应以 findmnt 的实际输出为准。
如果设备无法启动,请先断电,移除 NVMe 后重试;仍无法恢复时,进入 Maskrom 模式,使用此前备份或设备厂商提供的恢复固件还原 SPI。
