跳转到内容

预编译镜像

仓库 02_Firmware/Linux-Buildroot/ 提供 YuzukiNeko F101-S3 用 Buildroot 构建的 SPI NOR 启动镜像。启动链为:

BROM → SyterKit → OpenSBI → Linux → BusyBox

按 CPU 模式提供两个镜像:RV32(C907,ilp32d)和 RV64I(lp64)。根文件系统是 SquashFS,上面叠一层可写的 JFFS2 overlay,所以在板子上做的改动重启后仍在。镜像针对 16 MiB RAM + 16 MiB SPI NOR 的板子构建。

想自己构建这些镜像,见 Linux + Buildroot(一条命令)和 手动构建(逐步构建)。

文件架构ABI大小(字节)
linux-7.2-YuzukiNeko-sun252i-f101-buildroot-nor.imgRV32 (C907)ilp32d16,777,216
linux-7.2-YuzukiNeko-sun252i-f101-buildroot-rv64i-nor.imgRV64Ilp6416,777,216
SHA256SUMS以上两个镜像的 SHA-256——
manifest.json区域布局、各组件校验和、来源版本——
licenses/许可证与第三方声明——

每个镜像都是完整的——引导加载器、设备树、SBI 固件、内核、根文件系统——并且正好是整片 Flash 的大小。不存放载荷的空隙和 overlay 分区都擦成 0xFF。

与 RustSBI + Asterinas 不同:那个是 7 MiB 的部分镜像、启动到 initramfs;这里的镜像覆盖整片 16 MiB,并从 Flash 挂载可持久化的根文件系统。

.img 是按固定偏移拼好的原始 SPI NOR 数据,既不是 PhoenixSuit 容器,也不是带分区表的磁盘镜像。

Windows、Linux、macOS 都可以做刷机主机。 先按 FEL 下载模式与工具 装好 xfel 或 rfel。下面假设工具在 PATH 里,终端位于镜像所在目录。

首次安装或从其他固件切换时用完整镜像。因为每个镜像都是整片 16 MiB,写入会覆盖整片 Flash,包括存放板子持久化改动的 overlay 分区。想保留板上的内容,请先备份。

  1. 按住 FEL 键,重新接上 USB 数据线,松开。
  2. 检查芯片和 Flash:
    终端窗口
    xfel version
    xfel spinor
    应识别出 chip ID 0x00193700 的 F101 和 16 MiB Flash。这一步不需要执行 ddr 命令。
  3. 按需要的架构写入并回读。RV32:
    终端窗口
    xfel spinor write 0x0 linux-7.2-YuzukiNeko-sun252i-f101-buildroot-nor.img
    xfel spinor read 0x0 0x1000000 readback-rv32.img
    RV64I:
    终端窗口
    xfel spinor write 0x0 linux-7.2-YuzukiNeko-sun252i-f101-buildroot-rv64i-nor.img
    xfel spinor read 0x0 0x1000000 readback-rv64i.img
    rfel 同理,把 xfel 换成 rfel。
  4. 计算原始镜像和回读文件的 SHA-256,确认两者一致且与 SHA256SUMS 中记录相同。有报错或校验不一致时先解决,再启动。
  5. 松开 FEL 键,复位:
    终端窗口
    xfel reset

用 115200 波特、8N1、无流控连接板子的 UART。内核命令行固化在设备树里:

console=ttyS1,115200n8 earlycon=uart8250,mmio32,0x02500400 loglevel=8 printk.time=1 root=/dev/mtdblock4 rootfstype=squashfs ro

控制台是 UART1 / ttyS1。启动时先把 SquashFS 根挂载为只读,再由 /sbin/init 在上面搭好 overlayfs,然后出现登录提示。配置里没有设置 root 密码,因此适用 Buildroot 的默认值:用 root 登录,密码为空。

前提:板子已经装有本目录中架构匹配的完整镜像。按住 FEL 重新接 USB,先用 version 和 spinor 检查设备。

在这个布局里 Flash 偏移和 RAM 载入地址不同,请使用下面的 NOR 偏移:

组件NOR 偏移本布局预留RAM 载入地址
SyterKit0x00000064 KiB0x00020000(由 BROM 载入 SRAM)
设备树0x010000256 KiB0x40f40000
OpenSBI fw_jump0x050000512 KiB0x40f80000
Linux Image0x0d00006 MiB0x40000000
SquashFS 根文件系统0x6d0000到 0xf00000(约 8.2 MiB)从 MTD 挂载,不复制到 RAM
JFFS2 overlay0xf000001 MiB,已擦除从 MTD 挂载

这些区域就是设备树里声明的 MTD 固定分区,名字分别是 bootloader、dtb、opensbi、kernel、rootfs、overlay。

按需选择写入命令,替换一个组件不必重写其他组件:

终端窗口
xfel spinor write 0x0 spinor-boot_spi.bin
xfel spinor write 0x10000 sun252i-f101-yuzukineko.dtb
xfel spinor write 0x50000 fw_jump.bin
xfel spinor write 0xd0000 Image

RV64I 镜像使用 spinor-boot-rv64i_spi.bin 和 sun252i-f101-yuzukineko-rv64i.dtb,偏移相同。

写完后按实际文件大小回读相应范围并校验。例如用本包的 RV32 内核替换后:

终端窗口
xfel spinor read 0xd0000 0x4c3be8 Image-readback.bin

0x4c3be8 是本包 RV32 内核 Image 的大小(4,996,072 字节),其他版本请按实际大小调整长度;各镜像的数值见 manifest.json。回读的 SHA-256 与写入文件一致后,执行 xfel reset。

根文件系统可写:/sbin/init 会 pivot 到一层 overlayfs,其 upper 是 JFFS2 的 overlay 分区,所以新建和修改的文件会保留到下次刷机为止。/etc/init.d/ 里是常规的 BusyBox 启动脚本。reboot 重启系统。poweroff 停止系统,但板子仍由 USB 供电,并不会切断电源。

想把板子的持久化状态恢复到镜像内容,可以在系统里擦除 overlay 分区(flash_erase /dev/mtd5 0 0),或者重新刷入镜像。

来自 manifest.json:

组件版本 / 提交备注
SyterKitf95d29d6由外部树精确锁定,两个镜像相同
OpenSBI1.9,分支 sun252i-f101defconfig 指定的是分支,不是提交
Linux7.2.0,分支 sun252i_f101_7.2defconfig 指定的是分支,不是提交
BusyBox1.38.0从镜像里的 BusyBox 横幅读出
musl1.2.6
Buildroot2026.08 + 若干提交两个镜像由不同版本构建
工具链GCC 15.3.0,binutils 2.45.1Buildroot 自带 musl 工具链

manifest.json 里的校验和、区域大小和版本字符串都来自两个镜像文件本身。本包没有记录真机启动测试,这里不声称任何板级结果。

固件及其第三方软件遵循各自的许可证,仓库的 CC0 声明不适用于它们。这些镜像中各组件的许可证文本和来源见 licenses/README.md。