RootFS 是嵌入式 Linux 用户态的地基。应用能不能启动、配置会不会丢、日志写到哪里、系统能不能长期运行,很多问题最后都会回到 rootfs 设计。
一、RootFS 里有什么
一个最小 rootfs 通常包括:
1 | /bin |
其中 /proc、/sys、/dev 通常是启动后挂载的伪文件系统或设备文件系统,不是普通静态目录。
二、只读 rootfs 和可写数据区
产品系统建议分层:
1 | rootfs: 只读,随固件升级 |
好处:
- 系统文件不容易被破坏。
- 断电时配置和日志集中管理。
- OTA 升级可以替换 rootfs,保留 data。
- 出问题时更容易区分系统问题和用户数据问题。
检查挂载:
1 | mount |
三、BusyBox init
精简系统常用 BusyBox init。
关键文件:
1 | /sbin/init |
/etc/inittab 示例:
1 | ::sysinit:/etc/init.d/rcS |
rcS 示例:
1 |
|
启动脚本要尽量简单、可重复执行,并且错误日志要能看见。
四、配置持久化
不要把运行时配置写进只读 /etc。推荐:
1 | /data/config/device.json |
写配置时要考虑异常断电。一个常用做法是写临时文件后原子替换:
1 | write_config() { |
这样比直接覆盖原文件更可靠。
五、日志目录
日志建议放到:
1 | /data/log |
注意控制大小:
- 单文件大小限制。
- 保留最近 N 个文件。
- 关键错误单独记录。
- 量产版本减少 debug 日志。
最简单的轮转方式:
1 | if [ -f /data/log/app.log ] && [ "$(wc -c < /data/log/app.log)" -gt 1048576 ]; then |
更完整可以引入 logrotate 或应用内部日志轮转。
六、RootFS 排查清单
系统进不了 shell 时查:
1 | ls -l /sbin/init |
配置丢失时查:
1 | mount | grep data |
日志写不出来时查:
1 | df -h |
RootFS 的关键不是目录背得多,而是知道每类文件应该放在哪里,以及重启和升级后会发生什么。
- 本文链接: https://blog.hansong.icu/2026/06/26/Embedded_Linux_Series_04_RootFS_Practice/
- 版权声明: 本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。