一、简介:工业场景下"升级"为何成了硬骨头?
国产替代加速:飞腾芯片+实时Linux已在变电站、矿用皮带机、地铁信号系统批量部署,生命周期≥10年,必然经历多次功能迭代与安全修复。
传统升级痛点:
人工拔U盘,矿山巷道100km,维护车往返1天;
包体1.8G,4G工业卡月流量30G,费用爆表;
升级断电变砖,无自动回滚,SIL证书面临撤回。
掌握"加密+增量+回滚"策略=让国产设备"边运行边升级",0砖0中断,满足《GB/T 25000.51-2016》与《IEC 62443-3-3》安全要求,提升客户复购率30%+。
二、核心概念:6个关键词先搞懂
| 关键词 | 一句话 | 飞腾平台关注点 |
|---|---|---|
| OTA | Over-The-Air,远程升级 | 4G/5G工业CPE+北斗短报文备用链路 |
| A/B双分区 | 双rootfs,切换即回滚 | U-Boot2022已支持A/B,需打开CONFIG_AB_OPTIONS |
| 增量包 | 只发二进制diff,体积降80% | bsdiff/bspatch,ARM64原生加速 |
| 加密签名 | AES-256-CBC + RSA-2048-PSS | 使用国密SM4/SM2亦可,OpenSSL1.1.1k已内置 |
| 掉电保护 | 升级中掉电→下次自动回滚 | 依靠U-Boot bootcount + bootlimit |
| 实时约束 | 升级线程优先级<控制线程 | 避免抢占实时任务,调度策略SCHED_IDLE |
三、环境准备:10分钟搭好"飞腾升级实验室"
1. 硬件
飞腾FT-2000/4 工业板卡(2.2GHz,4核)×1
工业级eMMC 16GB(支持≥2分区)
4G模块EC20(移远)或5G RM500Q,用于OTA通道
调试串口(UART0)→USB转TTL线
2. 软件
| 组件 | 版本 | 获取方式 |
|---|---|---|
| 实时内核 | linux-5.15.71-rt53 | 飞腾官方仓库 |
| U-Boot | 2022.04 + ft2004补丁 | 同仓库 |
| Buildroot | 2022.02 | 生成根文件系统 |
| 升级工具 | swupdate 2022.05 | 开源,已适配ARM64 |
| 国密SDK | GmSSL 3.0 | GitHub |
3. 一键编译A/B双分区镜像(可复制)
#!/bin/bash # build_ab_image.sh set -e BUILDROOT_DEFCONFIG=ft2004_ab_defconfig # 1. 编译Buildroot A分区 make -C buildroot O=output/a ${BUILDROOT_DEFCONFIG} make -C buildroot O=output/a # 2. 编译Buildroot B分区(配置相同) make -C buildroot O=output/b ${BUILDROOT_DEFCONFIG} make -C buildroot O=output/b # 3. 打包成swupdate镜像 cat > sw-description <<EOF software = { version = "1.2.0"; hardware-compatibility = "ft2004"; images: ( { filename = "rootfs-a.img"; device = "/dev/mmcblk0p2"; compressed = true; sha256 = "$$(sha256sum output/a/images/rootfs.tar.xz | cut -d' ' -f1)"; }, { filename = "rootfs-b.img"; device = "/dev/mmcblk0p3"; compressed = true; sha256 = "$$(sha256sum output/b/images/rootfs.tar.xz | cut -d' ' -f1)"; } ); } EOF swupdate-pack -s sw-description -o ab_swu.img输出:ab_swu.img约180MB(全镜像),后续做增量可降到18MB。
四、应用场景(300字示例)
某西部煤矿井下皮带运输系统,全长12km,共160台飞腾FT-1500A节点,实时Linux控制皮带速度、跑偏与急停。巷道无光纤,仅靠4G cat.1中继。原有人工升级需停井、断电、拆防爆箱,单台耗时45分钟;全系统轮巡需3名工程师×5天,且存在误操作导致皮带误停风险。采用本文升级策略后:
控制中心下发增量包(仅18MB),4G夜闲时传输,单节点<3分钟;
A/B分区切换,零中断,皮带保持运行;
升级失败自动回滚,SIL2安全记录无污点;
160台设备2晚完成,节省人力70%,每年少停井6次,增产煤炭3.2万吨。
五、实际案例与步骤:30分钟跑通“加密+增量+回滚”
5.1 生成增量包(bsdiff)
# 旧镜像:rootfs-old.img,新镜像:rootfs-new.img bsdiff rootfs-old.img rootfs-new.img delta.bspatch # 签名 openssl dgst -sha256 -sign private.pem -out delta.sig delta.bspatch # 打包swu cat > sw-description-delta <<EOF software = { version = "1.2.1"; hardware-compatibility = "ft2004"; images: ( { filename = "delta.bspatch"; device = "/dev/mmcblk0p2"; compressed = true; signature = "$$(openssl dgst -sha256 delta.bspatch | cut -d' ' -f1)"; sign-file = "delta.sig"; } ); } EOF swupdate-pack -s sw-description-delta -o delta_swu.img # 仅18MB5.2 服务端下发(Python脚本,可集成SCADA)
# upload.py import requests, hashlib, os url = "http://10.0.1.100:8080/swupdate" file = "delta_swu.img" md5 = hashlib.md5(open(file,'rb').read()).hexdigest() files = {'file': (os.path.basename(file), open(file,'rb'))} data = {'version':'1.2.1','md5':md5,'install':'yes'} r = requests.post(url, files=files, data=data) print(r.status_code, r.text)5.3 设备端接收与安装(swupdate)
# /etc/swupdate/swupdate.cfg globals : { postupdatecmd = "/usr/bin/boot-select switch"; bootcount = 3; bootlimit = 3; }; identify : { hardware = "ft2004"; version = "1.2.0"; }; suricatta : { uuid = "fc4c9a30-7532-4e62-9e7c-03e6c3f3b1f2"; vendor = "mine-pit"; server = "10.0.1.100:8080"; };执行升级:
swupdate -i delta_swu.img -e "stable,main"过程日志:
INFO : SHA256 verified INFO : Applying delta.bspatch to /dev/mmcblk0p2 INFO : Patch ok, 2048s blocks INFO : Running post-update INFO : Switching to partition A INFO : Reset boot-count5.4 回滚触发(bootcount 机制)
# /etc/fw_env.config /dev/mmcblk0boot0 0x400000 0x20000 # 升级成功后清除计数 fw_setenv bootcount 0 # 若3次启动失败→自动切换 fw_setenv bootlimit 3 fw_setenv bootcmd "run bootcount_check; run boot_a_or_b"六、常见问题与解答(FAQ)
| 问题 | 现象 | 解决 |
|---|---|---|
| bsdiff 内存不足 | >1GB 包体 OOM | 改用 imgdiff 或分块 delta |
| swupdate 报“signature verify failed” | 公钥未烧录 | 在 dtb 添加rsa,public-key = &pk_rsa>;并烧 eFuse |
| 4G 信号弱,下发中断 | 升级 80% 掉线 | 支持断点续传:HTTP Range + 本地临时文件校验 |
| A/B 分区空间不足 | 双镜像 180MB×2 > eMMC | 采用 squashfs-lzo,压缩率 50%;或改用差分 in-place |
| 升级后实时任务抖动变大 | 新内核 HZ 值不同 | 保持CONFIG_HZ_1000+CONFIG_PREEMPT_RT配置一致 |
七、实践建议与最佳实践
流量配额
增量包 <10% 原镜像,矿井 4G 月包 5GB 可覆盖 200 台。灰度发布
先 10 台→观察 24h→全量,支持按设备 UUID 白名单。断电保护
UPS 续航 5 min 足够写完镜像;无 UPS 时靠 bootcount 回滚。国密改造
替换 openssl 为 GmSSL,单条命令:gmssl sm4 -encrypt -in delta.bspatch -out delta.sm4审计追踪
所有升级日志→syslog→rsyslog→集中存储,保存≥3 年,满足安监检查。一键回滚按钮
Web 控制台提供“立即回滚”,5 秒切换分区,司机室远程可操作。
八、总结:一张脑图带走全部要点
飞腾实时Linux升级策略 ├─ 加密:RSA/SM2 签名 + AES/SM4 加密 ├─ 增量:bsdiff 80% 体积↓ ├─ A/B分区:U-Boot bootcount 自动回滚 ├─ 通道:4G/5G + 断点续传 └─ 合规:SIL2 审计日志 + 国密可选升级不是“锦上添花”,而是工业国产芯全生命周期的“燃料”。
把本文脚本 push 到你的 GitLab,下次客户审厂,只需打开浏览器——5 分钟展示加密传输、增量大小、回滚录像,国产飞腾+实时 Linux 的“自主可控”将立刻从口号变成可量化的证据!祝你升级顺利,系统永不停机。