news 2026/2/6 21:27:57

【瑞芯微平台实时Linux方案系列】第十六篇 - 瑞芯微平台实时Linux系统备份与升级方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【瑞芯微平台实时Linux方案系列】第十六篇 - 瑞芯微平台实时Linux系统备份与升级方案

一、简介:边缘场景“升级”=“生命线”

  • 无人值守:电网塔、高速龙门架、矿山井下,升级失败 = 派人爬塔,成本 > 1 万元/次。

  • 实时性不能丢:升级过程若破坏 RT 内核或 rootfs,机械臂抖动 ≥ 5 ms → 废品率飙升。

  • 合规要求:GB/T 25000 安全更新、IEC 61508 生命周期管理,均需“可回滚 + 原子性”。

掌握“镜像备份 + 增量升级 + AB 分区 + 回滚”全流程,让你的瑞芯微实时 Linux 产品一次升级成功,失败自动回家


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

名词一句话本文出现场景
AB 分区两套 rootfs + kernel,升级时切换,失败回滚升级策略核心
OTA 包增量或全量镜像压缩包,网络下发文件后缀.swu
SWUpdate开源升级框架,支持原子、增量、签名命令行swupdate
原子性写镜像过程断电,仍保持旧系统可启动通过 image-checksum + 双备份实现
回滚新系统 3 次启动失败,自动回到旧版本uboot 计数器 + 脚本

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

1. 硬件

  • RK3568 开发板(带 ≥8 GB eMMC)×1

  • USB-TTL 串口线 ×1(115200-8-N-1)

  • 网线 1 根(千兆,TFTP/HTTP 升级用)

2. 软件

组件版本安装命令
主机 OSUbuntu 20.04 x86_64本地 PC
交叉工具链gcc-linaro-10.3-2021.03-x86_64_aarch64-linux-gnu下文一键脚本
实时内核linux-5.15-rt35官方 patch
SWUpdate2023.05apt install swupdate swupdate-client
根文件系统Ubuntu Base 20.04 arm64debootstrap构建

3. 一键装工具链(可复制)

#!/bin/bash # install_toolchain.sh TOOLCHAIN=gcc-linaro-10.3-2021.03-x86_64_aarch64-linux-gnu wget https://releases.linaro.org/components/toolchain/binaries/latest-10.3/aarch64-linux-gnu/${TOOLCHAIN}.tar.xz sudo tar -xf ${TOOLCHAIN}.tar.xz -C /opt/ echo 'export PATH=/opt/'${TOOLCHAIN}'/bin:$PATH' >> ~/.bashrc source ~/.bashrc

四、应用场景(300 字)

某省级“边缘视觉检测工站”部署 500 台 RK3568 盒子,运行 PREEMPT_RT 实时检测算法,对传送带矿泉水瓶做瓶盖缺陷检测,要求周期 ≤ 8 ms。现场无人值守,运维中心 200 km 外。早期采用“U 盘拷镜像”升级,失败率 8%,且断电必变砖。引入本文 AB 分区 + SWUpdate OTA 方案后:① 升级包 < 70 MB(增量,原 900 MB 全包);② 断电 3 次仍可回滚;③ 3 次启动失败自动回旧版本;④ 实时性验证 cyclictest Max < 50 μs 保持不变。最终单台升级时间从 30 分钟缩到 3 分钟,全年零现场维护,客户将方案复制到瓶盖、标签、装箱 3 条产线,成为集团模板。


五、实际案例与步骤:从“打包”到“回滚”全流程

所有脚本放~/rk-ota/目录,绝对路径避免串扰。

mkdir -p ~/rk-ota && cd ~/rk-ota

5.1 制作 AB 分区镜像

  1. 分区规划(eMMC 8 GB 示例)

    分区名字大小作用
    mmcblk0p1boot_a64 MBkernel + dtb
    mmcblk0p2rootfs_a2 GB系统 A
    mmcblk0p3boot_b64 MBkernel + dtb
    mmcblk0p4rootfs_b2 GB系统 B
    mmcblk0p5data余下用户数据,升级不碰
  2. 生成镜像(主机端)

    # make_ab_image.sh ROOTFS_A=rootfs_a.ext4 # 已用 debootstrap build 好 ROOTFS_B=rootfs_b.ext4 # 与 A 初始内容一致 mkfs.ext4 -d $ROOTFS_A -L rootfs_a -b 4096 rootfs_a.img 2G mkfs.ext4 -d $ROOTFS_B -L rootfs_b -b 4096 rootfs_b.img 2G
  3. 烧录脚本(U-Boot 下)

    # flash_ab.scr (mkimage -A arm64 -T script -C none -d flash_ab.cmd flash_ab.scr) echo "flash_ab.scr: 自动烧录 AB 镜像" fatload mmc 1:1 0x40000000 rootfs_a.img mmc write 0x40000000 0x4000 0x400000 # 计算好扇区 fatload mmc 1:1 0x40000000 rootfs_b.img mmc write 0x40000000 0x404000 0x400000

5.2 编译 SWUpdate

# 交叉编译 swupdate git clone https://github.com/sbabic/swupdate.git cd swupdate make menuconfig # 选择 # General ---> # Cross-compile prefix : aarch64-linux-gnu- # Bootloader ---> # U-Boot bootcount support make make install DESTDIR=$PWD/_install

生成swupdate可执行文件与swupdate.cfg配置模板。


5.3 生成增量 OTA 包

  1. 生成 file-list

    # 在旧系统 A 运行 find /usr /lib /opt -type f -exec md5sum {} \; > old_manifest.txt
  2. 新系统编译后同样生成 new_manifest.txt

  3. 计算差异

    # make_delta.sh sort old_manifest.txt > old.sort sort new_manifest.txt > new.sort comm -13 old.sort new.sort | awk '{print $2}' > delta.lst
  4. 打包

    tar -czf delta.tar.gz -T delta.lst cp delta.tar.gz swupdate.cfg ~/rk-ota/

5.4 下发升级(HTTP 模式示例)

  1. 主机启 HTTP

    cd ~/rk-ota && python3 -m http.server 8080
  2. 设备端升级

    # /usr/local/bin/ota_upgrade.sh #!/bin/bash SWUPDATE_ARGS="-H prod:1.0 -e stable,upgrade" swupdate $SWUPDATE_ARGS -i http://10.10.10.100:8080/delta.tar.gz
  3. U-Boot 启动计数器
    bootcmd加入:

    if test $bootcount -ge 3; then setenv boot_part 2; fi setenv bootargs root=/dev/mmcblk0p${boot_part} rootwait bootcount=${bootcount} saveenv

    新系统启动成功后在 systemd 服务里fw_setenv bootcount 0,失败则计数累加,3 次后自动切换回旧分区。


5.5 一键回滚(人工/自动)

# rollback.sh CUR_PART=$(mount | grep 'on / ' | awk '{print $1}') if [[ $CUR_PART == *"rootfs_a"* ]]; then TARGET=4 else TARGET=2 fi fw_setenv boot_part $TARGET reboot

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

问题现象解决
swupdate 报“image checksum error”增量包 md5 不匹配重新生成 manifest,确保新旧系统同一基线
升级后 cyclictest Max > 100 μs实时性下降检查新内核是否关闭 CONFIG_PREEMPT_RT,确认 cmdline 无nohz=off
bootcount 不生效3 次失败未回滚确认 U-Boot 已启用CONFIG_BOOTCOUNT_LIMIT
eMMC 寿命担忧频繁写镜像使用 tar 增量 +data分区分离,减少全块写入
现场无网络无法 HTTP 下载支持 U 盘离线升级:swupdate -i /media/sda1/delta.tar.gz

七、实践建议与最佳实践

  1. 版本号管理
    采用product:major.minor.build四段式,swupdate 支持-e硬件匹配,杜绝下错包。

  2. 双重校验
    镜像内嵌 SHA256 + 数字签名(openssl 私钥签名),公钥存放于/etc/swupdate/public.pem,防止恶意包。

  3. 灰度发布
    500 台设备按 1%-10%-50%-100% 四批升级,每批观察 24 h 无异常再继续。

  4. 实时监控
    设备上报upgrade_status到 MQTT,Grafana 大屏显示“升级中/成功/失败”热力图。

  5. 备份最后防线
    每次升级前自动dd if=/dev/mmcblk0 of=/data/emmc.img bs=1M count=100保存 boot 分区,极端情况串口救砖。

  6. 文档自动化
    使用 GitLab CI + PlantUML 自动生成《升级指导书》PDF,随 OTA 包一起下发,始终保持“代码-文档”同版本。


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

瑞芯微 AB 分区升级 ├─ 分区:boot_a/rootfs_a + boot_b/rootfs_b + data ├─ 工具:SWUpdate + U-Boot bootcount ├─ 流程:增量打包 → HTTP下发 → 启动计数 → 失败回滚 ├─ 校验:SHA256 + 数字签名 + 灰度 └─ 监控:MQTT + Grafana + 自动报表

实时性 + 无人值守 + 原子回滚,一套方案同时满足。

把脚本 push 到你的 GitLab,下次产线升级,只需点击 Merge RequestOTA 包自动生成设备半夜静默升级,第二天上班看 Grafana 绿灯一片——这就是工程化的力量!祝你升级零事故,回滚零现

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

这份最新 AI / 机器学习学习路线!强烈建议收藏并反复阅读

当初决定踏入的 AI / 机器学习领域时&#xff0c;我感觉自己像是走进了一座没有地图的迷宫。四处寻找&#xff0c;满眼都是无穷无尽的教程、博客文章和训练营&#xff0c;个个都承诺能让你一夜成功。 但内心深处&#xff0c;我始终在问自己&#xff1a;我学的东西真的对吗&…

作者头像 李华
网站建设 2026/2/3 14:07:26

Win11 升级后 C 盘告急?Windows.old 文件清理攻略,一键释放几十 GB 空间

不少用户升级 Win11 最新版本后&#xff0c;都会发现 C 盘存储空间莫名缩水&#xff0c;打开文件夹查看才发现多了一个占用巨大的 Windows.old 文件。这个文件是系统升级时保留的旧版本安装文件&#xff0c;本意是方便后续回滚系统&#xff0c;但对大多数不需要降级的用户来说&…

作者头像 李华
网站建设 2026/2/3 15:52:48

【小程序毕设全套源码+文档】基于微信小程序的百货中心供应链管理系统设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/2/3 16:03:22

HoRain云--TailwindCSS响应式设计实战指南

&#x1f3ac; HoRain云小助手&#xff1a;个人主页 &#x1f525; 个人专栏: 《Linux 系列教程》《c语言教程》 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站&#xff0c;性价比超高&#xff0c;大内存超划算&#xff01;…

作者头像 李华
网站建设 2026/2/5 15:14:00

私域流量生态重构:链动2+1模式S2B2C商城小程序的流量整合与价值创造

摘要&#xff1a;在公域流量成本攀升与用户注意力碎片化的双重压力下&#xff0c;企业私域流量运营成为突破增长瓶颈的关键。本文以链动21模式S2B2C商城小程序为核心研究对象&#xff0c;结合电梯广告、社区场景等线下流量入口&#xff0c;构建"百川入海"的私域流量整…

作者头像 李华
网站建设 2026/2/5 22:54:05

燕尾潮汐表查询2026-02-03

位置&#xff1a;燕尾&#xff0c;日期&#xff1a;2026-02-03&#xff0c;农历&#xff1a;乙巳[蛇]年十二(腊)月十六&#xff0c;星期&#xff1a;星期二&#xff0c;潮汐类型&#xff1a;大潮活汛 最高水位&#xff1a;469.00cm&#xff0c;最低水位&#xff1a;59.00cm&a…

作者头像 李华