存储与自定义文件系统
本篇目标:搞懂板子 NAND 上的分区结构、为什么你能直接往根文件系统里写文件、以及怎么把你自己的文件/程序预置进出厂固件(而不是每次手动拷)。
涉及分区表与 overlay 机制,均为本 SDK 真实配置。
NAND 上的分区一览
固件烧录到 NAND 后,被划分成几个区(定义见 SDK 的 sys_partition.fex):
| 分区 | 作用 | 可否日常写 |
|---|---|---|
boot-resource |
开机 Logo 等启动资源 | 一般只读(用 logo_update 写) |
env / env-redund |
U-Boot 环境变量(双备份) | 由 uboot/env 工具管理 |
bootA |
内核镜像 | 否 |
rootfsA |
根文件系统(ubifs,可读写) | ✅ 是 |
private |
厂商私有数据 | 视情况 |
根文件系统 rootfsA 是 ubifs 格式,可读可写。所以你在板子上 vi 改个配置、cp 放个程序、新建个目录,都是直接写进 NAND 的,重启不丢(前提是写到了根文件系统里、且没重烧固件)。
在板子上直接改(临时/调试最方便)
如果只是自己调试,直接操作即可:
root@YPT153EVB:~# echo "hello" > /root/myfile.txt # 写文件
root@YPT153EVB:~# cp /mnt/app.bin /usr/bin/ # 放个程序
root@YPT153EVB:~# vi /etc/rc.local # 改启动脚本⚠️ 这种方式重烧整包固件会丢(因为整包覆盖了 rootfsA)。如果只是自己用、不量产,完全够用。
把文件预置进固件(量产必看:overlay 机制)
如果想”烧完固件,板子一起来的时候就已经有你的文件/程序/配置”,要用 overlay(叠加)机制:
SDK 里有目录 BoardConfig/filesSystem/,构建时会把它原样叠加(overlay)到根文件系统里。也就是说:
- 你在
BoardConfig/filesSystem/下建什么目录、放什么文件,最终都会出现在板子根文件系统的对应位置。
举例:想把 myapp 预置到 /usr/bin/、把自启脚本放到 /etc/init.d/:
# 在开发电脑的 SDK 目录
mkdir -p BoardConfig/filesSystem/usr/bin
mkdir -p BoardConfig/filesSystem/etc/init.d
cp myapp BoardConfig/filesSystem/usr/bin/
cp S99myapp BoardConfig/filesSystem/etc/init.d/然后重新打包并烧录:
./yz_build.sh pack # 重新生成固件
# 再用 PhoenixSuit 烧录(见《固件烧录与系统升级》)板子起来后,/usr/bin/myapp 和 /etc/init.d/S99myapp 就已经在了。
设置开机自启
overlay 放进 /etc/init.d/S9xmyapp 的脚本,会在系统启动时按序号执行(Tina 用 procd / init.d 机制)。最简示例:
#!/bin/sh /etc/rc.common
START=99
start() {
/usr/bin/myapp &
}
stop() {
killall myapp
}具体 init 语法以本 SDK 的 procd 约定为准;不确定就直接把启动命令加到
/etc/rc.local(若存在)。
查看存储设备
root@YPT153EVB:~# cat /proc/mtd # 看 mtd 分区(boot-resource 等)
root@YPT153EVB:~# df -h # 看根文件系统剩余空间
root@YPT153EVB:~# mount | grep ubi # 确认根 fs 是 ubifs排障
| 现象 | 处理 |
|---|---|
| overlay 放的文件没出现 | 路径要相对于根 /;确认重新 pack 并重烧 |
| 根文件系统写满 | df -h 看空间;删无用文件或扩大 rootfsA 分区(改 sys_partition.fex 重编) |
| 改了配置重启丢失 | 你写到的是临时位置 / 或重烧了固件;用 overlay 预置 |
| mtd 分区损坏 | 重新整包烧录(见《固件烧录与系统升级》) |
作者:Mai 创建时间:2026-10-20 16:53
最后编辑:Mai 更新时间:2026-11-05 14:56
最后编辑:Mai 更新时间:2026-11-05 14:56