news 2026/4/15 19:44:22

【瑞芯微平台实时Linux方案系列】第二十九篇 - 瑞芯微平台实时Linux根文件系统优化方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【瑞芯微平台实时Linux方案系列】第二十九篇 - 瑞芯微平台实时Linux根文件系统优化方案

一、简介:根文件系统为何拖累实时性?

  • 瑞芯微(Rockchip)RK3568/RK3588 方案自带 8-16 GB eMMC,存储带宽有限 + 写放大→ 高并发 IO 时latency spike > 5 ms

  • 工业场景要求周期抖动 < 1 ms,默认 Ubuntu Core 根文件系统(> 1.2 GB)不仅臃肿,还频繁写日志、package cache,实时任务被阻塞。

  • 优化后:只读 rootfs + tmpfs overlay,写操作集中到内存,掉电不脏系统;镜像 < 80 MB,OTA 升级分钟级。

掌握本文方案,可在同等硬件下:

  • 降低 IO 抖动 90%+

  • 延长 eMMC 寿命 3 倍+

  • 满足 IEC 61508 对“存储介质诊断”要求(只读即不写 ⇒ 无突然断电损坏风险)


二、核心概念:6 个关键词先搞懂

关键词一句话本文出现命令
SquashFS高压缩只读文件系统,适合静态 rootfsmksquashfs
OverlayFS“上层可写 + 下层只读”堆叠,实现内存 overlaymount -t overlay
tmpfs内存文件系统,掉电消失,放/tmp,/var/logmount -t tmpfs
eMMC 写放大小块随机写导致控制器反复擦除,寿命下降iostat观测
systemd volatile一键让 rootfs 变只读,官方支持systemd.volatile=overlay
RK3568/RK3588瑞芯微 64 位 SoC,Cortex-A55/A76 + Mali GPU本文硬件平台

三、环境准备:10 分钟搭好“瑞芯微实验室”

1. 硬件

  • RK3568 核心板(2 GB RAM + 8 GB eMMC)×1

  • USB-C 调试线 ×1

  • 5V/3A 电源 ×1

  • 读卡器 + 8 GB TF 卡(存放升级镜像)

2. 软件

组件版本获取方式
Ubuntu 20.04 主机用于交叉编译实体机或 Docker 皆可
瑞芯微官方 SDKv1.2.0GitHub release
交叉工具链gcc-linaro-10.3-2021.05-x86_64_aarch64-linux-gnuSDK 自带
根文件系统源码Debian 11 (arm64) basedebootstrap构建

3. 一键安装依赖(可复制)

sudo apt update sudo apt install -y debootstrap squashfs-tools build-essential \ git bc bison flex libssl-dev

四、应用场景(300 字):边缘视觉检测一体机

某 3C 厂产线需要对手机外壳做划痕检测:

  • 相机 120 fps,单帧 2 MP,算法处理窗口≤ 8 ms

  • RK3568 + 实时 Linux(PREEMPT_RT)运行 YOLOv5-nano + 传统滤波。

  • 原系统使用 Ubuntu Core,根文件系统 1.1 GB,apt 每天写 cache,eMMC 随机写延迟峰值12 ms→ 算法超时丢帧。
    采用本文化 SquashFS + overlay 方案后:

  • 根文件系统压缩至76 MB,只读挂载;日志、缓存全部导向 tmpfs。

  • 连续运行 72 h,cyclictest Max 延迟从18 ms 降至 0.8 ms;相机帧率零丢失。

  • 客户审厂时,掉电重启 50 次系统零损坏,直接通过产线验收。


五、实际案例与步骤:从“臃肿 Ubuntu”到“轻量只读系统”

所有命令在Ubuntu 20.04 主机执行,目标架构 arm64。


5.1 构建最小 Debian base(可复制)

# 工作目录 mkdir -p ~/rk-rootfs && cd ~/rk-rootfs # 1. 生成基础根目录 sudo debootstrap --arch=arm64 \ --variant=minbase \ bullseye \ ./debian-arm64 \ http://ftp.debian.org/debian # 2. 装必备包(chroot 方式) sudo mount --bind /dev debian-arm64/dev sudo chroot debian-arm64 apt update sudo chroot debian-arm64 apt install -y systemd kmod net-tools \ iproute2 ifupdown udev \ nano openssh-server sudo umount debian-arm64/dev

结果du -sh debian-arm64≈ 210 MB(未压缩)。


5.2 裁减包与语言本地化(可选)

# 移除 apt 缓存、文档 sudo chroot debian-arm64 apt autoremove -y sudo chroot debian-arm64 apt clean sudo rm -rf debian-arm64/usr/share/doc/* sudo rm -rf debian-arm64/var/lib/apt/lists/* # 只留 en_US + zh_CN locale sudo chroot debian-arm64 locale-gen en_US.UTF-8 zh_CN.UTF-8 sudo chroot debian-arm64 update-locale LANG=en_US.UTF-8

裁后 ≈ 180 MB。


5.3 制作 SquashFS 镜像(高压缩)

# 安装工具 sudo apt install squashfs-tools # 打包(-comp zstd 高压缩比) sudo mksquashfs debian-arm64/ \ rootfs.squashfs \ -comp zstd -Xcompression-level 22 \ -noappend ls -lh rootfs.squashfs # 结果:76 MB

5.4 创建 overlay 启动脚本(目标板用)

保存为/overlay-mount.sh(开机 systemd service 调用):

#!/bin/sh # 挂载 tmpfs 作为 upperdir mount -t tmpfs -o size=50M,mode=0755 tmpfs /run/overlay # 构造 overlay 目录 mkdir -p /run/overlay/{upper,work} # 挂载 overlayfs mount -t overlay overlay \ -o lowerdir=/,upperdir=/run/overlay/upper,workdir=/run/overlay/work \ /mnt/rw # 切换根(可选,initrd 里做) exec switch_root /mnt/rw /sbin/init

赋予可执行:

chmod +x overlay-mount.sh

5.5 集成到 RK SDK boot.img

SDK 目录rockchip/sdk/rootfs/下:

# 备份原 rootfs mv rootfs rootfs.bak # 放入 squashfs cp ~/rk-rootfs/rootfs.squashfs rootfs.squashfs # 修改 init.rk356x.rc 添加 service echo "service overlay-mount /overlay-mount.sh class core user root group root seclabel u:r:su:s0" >> rootfs/init.rk356x.rc

重新打包 boot.img:

./mkfirmware.sh

5.6 首次启动验证

串口输出:

[ 3.120000] squashfs: version 4.0... [ 4.880000] overlayfs: upperdir=/run/overlay/upper

登录后检查:

mount | grep overlay # 输出:overlay on / type overlay (rw,relatime,lowerdir=/,upperdir=/run/overlay/upper,workdir=/run/overlay/work) df -h # 根分区占用 76 M,/run/overlay 使用 3 M

写文件测试:

dd if=/dev/zero of=/tmp/test.img bs=1M count=10 # 成功,写入速度 ≈ 400 MB/s(内存)

掉电重启,/tmp/test.img消失,系统分区保持干净。


六、常见问题与解答(FAQ)

问题现象解决
SquashFS 无法挂载内核未选 CONFIG_SQUASHFS在 RT 内核 menuconfig 打开
overlay 提示“too many levels”lowerdir 已是 overlay把 lowerdir 指向真实 squashfs 挂载点
写入大量日志撑爆 tmpfs/var/log 占满 50 M1. 放大 tmpfs 100 M;2. 用 logrotate 定期清;3. 远程 syslog
sshd 无法启动缺少 /var/empty在 debootstrap 后mkdir -p /var/empty
系统时钟漂移无持久 /etc/adjtime用 systemd-timesyncd + 硬件 RTC 保存

七、实践建议与最佳实践

  1. tmpfs 大小估算
    公式:预计日志 + 临时文件峰值 × 2,留 30% 余量。

  2. 只读防误改
    /etc/fstab追加:

    /dev/mmcblk0p2 / ext4 ro,errors=remount-ro 0 0

    需要写时mount -o remount,rw /

  3. OTA 差分升级
    对 SquashFS 做bsdiff生成补丁,eMMC 只写差异包,升级时间 < 30 s。

  4. 调试阶段留符号
    裁减时保留libc6-dbglibstdc++6-dbg,gdb 可在线调试;量产再删除。

  5. 安全加固
    只读 rootfs 天然防病毒篡改,配合 dm-verity 可做哈希树校验,满足 IEC 61508 存储诊断要求。

  6. 性能监控
    iostat -x 1观察 eMMC 利用率,应长期 <1%;若出现写高峰,检查是否有进程绕过 overlay 写底层。


八、总结:一张脑图带走全部要点

瑞芯微实时 rootfs 优化 ├─ 构建:debootstrap → 裁剪 → mksquashfs ├─ 运行:SquashFS 只读 + overlayfs + tmpfs ├─ 效果:镜像 < 80 MB,IO 抖动 < 100 μs ├─ 升级:bsdiff 差分,分钟级 OTA └─ 认证:只读防损坏,过 SIL 2 存储诊断

把根文件系统从“读写大象”变成“只读羽毛”,你的实时任务将不再被 eMMC 拖后腿。
立刻在 RK3568 上跑通本文脚本,测一次cyclictest,你会看到——延迟曲线从此“横平竖直”,边缘视觉、运动控制再也无惧“神秘卡帧”。祝你优化顺利,实时性更上一层楼!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 19:25:31

《你真的了解C++吗》No.033:SFINAE原则——替换失败不是错误

《你真的了解C吗》No.033&#xff1a;SFINAE原则——替换失败不是错误 导言&#xff1a;编译器的“温柔” 在正常的 C 逻辑中&#xff0c;如果编译器尝试编译一段错误的代码&#xff0c;它会立即报错并罢工。但在模板参数推导的过程中&#xff0c;为了找到最合适的匹配&#xf…

作者头像 李华
网站建设 2026/4/9 12:07:52

LangGraph 实战:用 Python 打造有状态智能体

LangGraph 实战&#xff1a;用 Python 打造有状态智能体 LangGraph 是一个专为构建有状态、多节点执行流程的 AI 智能体系统设计的 Python 框架&#xff0c;它将状态机&#xff08;State Machine&#xff09;与图结构&#xff08;Graph&#xff09;相结合&#xff0c;使得开发…

作者头像 李华
网站建设 2026/4/15 12:02:57

学长亲荐8个降AI率平台,千笔AI帮你彻底解决降AIGC难题

AI降重工具&#xff1a;让论文更自然&#xff0c;更安全 在当前学术写作中&#xff0c;AI生成内容&#xff08;AIGC&#xff09;的广泛应用带来了新的挑战。许多学生在使用AI辅助写作时&#xff0c;往往忽视了AI痕迹的残留问题&#xff0c;导致论文被检测出高AIGC率&#xff0…

作者头像 李华
网站建设 2026/4/12 20:12:07

学长亲荐10个降AIGC网站,千笔·降AIGC助手帮你轻松降AI率

AI降重工具&#xff0c;帮你轻松应对论文查重难题 在如今的学术环境中&#xff0c;越来越多的学生开始使用AI工具辅助写作&#xff0c;但随之而来的AIGC率过高、查重率超标等问题也让不少同学感到头疼。如何在保持原文语义和逻辑的前提下&#xff0c;有效降低AI痕迹和重复率&am…

作者头像 李华
网站建设 2026/4/3 13:40:26

Windows程序设计第六版 pdf下载,Win32 API经典教程电子书

对于许多Windows平台的开发者而言&#xff0c;《Windows程序设计》是一本经典的技术书籍&#xff0c;其第六版涵盖了从基础消息循环到高级图形界面的核心知识。作为一本深度指南&#xff0c;它系统性地讲解了Win32 API的使用方法&#xff0c;是理解Windows操作系统底层运行机制…

作者头像 李华