当前位置: 首页 > news >正文

基于 RAUC 的 Jetson OTA 升级全攻略


📖 推荐阅读:《Yocto项目实战教程:高效定制嵌入式Linux系统》
🎥 更多学习视频请关注 B 站:嵌入式Jerry


基于 RAUC 的 Jetson OTA 升级全攻略

0. 引子:常见问题

在 Jetson 平台做 OTA 升级时,你可能会问:

  • RAUC 是什么?它和 meta-rauc 的关系?
  • Jetson 的 Bootloader 如何配合 OTA?
  • OTA 会不会刷新分区表?
  • 如何在 Yocto + meta-tegra 中集成 RAUC?
  • 健康检查与回滚机制怎么做?

本文将结合实战经验,从原理、关键技术到落地过程,完整讲清 RAUC 在 Jetson 上的 OTA 升级方案。


在这里插入图片描述

1. 核心概念

1.1 RAUC

RAUC(Robust Auto-Update Controller)是一个嵌入式 Linux 的安全升级框架,支持:

  • A/B 分区更新(冗余槽位,失败可回滚)
  • 签名校验(保证镜像来源和完整性)
  • 健康检查(启动验证,失败自动回滚)
  • 多槽位类型(不仅可更新 rootfs,还可更新内核、应用、Bootloader)

1.2 meta-rauc

  • Yocto Project 的一个 Layer,用来把 RAUC 集成进 Yocto 构建系统。

  • 提供:

    • RAUC 客户端的交叉编译与打包
    • 生成 .raucb 更新包的 bundle.bbclass
    • 示例配置与 keyring 支持

1.3 Jetson Bootloader(UEFI + nvbootctrl)

  • Jetson Linux 使用 UEFI 固件作为 Bootloader,支持 A/B 引导槽位

  • 通过 nvbootctrl 工具可:

    • 设置下一次启动的引导槽位
    • 标记启动成功 / 不可用
  • OTA 时,RAUC 会调用槽位切换脚本,脚本内部用 nvbootctrl 完成切换。


2. OTA 升级原理

  1. 固定分区表(出厂阶段):

    • EFI 分区(内核/DTB/extlinux.conf)
    • ROOTFS_A
    • ROOTFS_B
    • 可选数据分区
  2. 生成更新包(构建阶段):

    • Yocto + meta-rauc 构建 .raucb(包含 rootfs 镜像、manifest、签名)
  3. 设备端安装(运行时):

    • RAUC 校验 .raucb 签名
    • 写入 非当前槽位 rootfs
    • 调用槽位切换脚本 → nvbootctrl set-active-boot-slot
  4. 重启 + 健康检查

    • 从新槽位启动
    • 健康检查成功 → rauc status mark-good
    • 失败 / 超时 → Bootloader 回滚到旧槽位

3. Yocto 集成 RAUC(Jetson 示例)

3.1 添加 Layer

BBLAYERS += " \${TOPDIR}/sources/meta-tegra \${TOPDIR}/sources/meta-openembedded/meta-oe \${TOPDIR}/sources/meta-rauc \${TOPDIR}/sources/meta-myboard \
"

3.2 配置 local.conf

MACHINE = "jetson-orin-nano-devkit"
IMAGE_FSTYPES = "wic.bmap wic"
WKS_FILE = "jetson-ab.wks"INHERIT += "rauc"
IMAGE_INSTALL:append = " rauc rauc-service"RAUC_KEY_FILE = "${LAYERDIR_myboard}/recipes-core/rauc/files/dev.key.pem"
RAUC_CERT_FILE = "${LAYERDIR_myboard}/recipes-core/rauc/files/dev.cert.pem"

3.3 分区布局(WIC)

part EFI --source bootimg-efi --label EFI --fstype=vfat --size 256
part / --source rootfs --label ROOTFS_A --fstype=ext4 --fixed-size 2048
part / --source rootfs --label ROOTFS_B --fstype=ext4 --fixed-size 2048

3.4 RAUC system.conf

[system]
compatible=mycompany-jetson
bootloader=bootchooser
mountprefix=/mnt/rauc[keyring]
path=/etc/rauc/dev.cert.pem[slot.rootfs.0]
device=PARTLABEL=ROOTFS_A
type=ext4
bootname=A[slot.rootfs.1]
device=PARTLABEL=ROOTFS_B
type=ext4
bootname=B

4. 健康检查与回滚

4.1 健康检查服务(示例)

#!/bin/sh
# /usr/local/bin/check_health.sh
if systemctl is-active myapp; thenrauc status mark-good
elseecho "Health check failed"
fi
  • 启动后运行该脚本,如果失败,Bootloader 会回滚到上一个槽位。

4.2 槽位切换脚本

#!/bin/sh
SLOT="$1" # A 或 B
if [ "$SLOT" = "A" ]; thennvbootctrl set-active-boot-slot 0
elsenvbootctrl set-active-boot-slot 1
fi

5. 实战经验

  1. 不要在 OTA 中改分区表,A/B 分区布局应在出厂阶段固定。
  2. 公私钥分离:公钥证书放设备端,私钥保存在 CI/CD 或 HSM。
  3. 健康检查必须可靠,要能检测应用、网络等关键指标。
  4. 调试 OTA 流程:先用 U 盘 / 本地文件跑通 RAUC 流程,再接入网络分发平台。
  5. 引导器更新:rootfs OTA 与 Bootloader OTA 分开,Bootloader 用 UEFI Capsule 或 nv_update_engine

6. 总结

RAUC + meta-rauc 在 Jetson 上的 OTA 升级方案核心是:

  • 出厂阶段用 Yocto 固定好分区布局
  • OTA 时 RAUC 只更新备用槽位内容,不动分区表
  • 通过 nvbootctrl 控制 Jetson UEFI 引导槽位
  • 健康检查确保升级可回滚

这种方式安全、可控,适合量产和长期维护的嵌入式 AI 项目。

http://www.xdnf.cn/news/1268659.html

相关文章:

  • 【文献阅读】我国生态问题鉴定与国土空间生态保护修复方向
  • 本地部署接入 whisper + ollama qwen3:14b 总结字幕
  • 【R语言】单细胞数据整合质量评估(3)
  • 初学python的我开始Leetcode题15-2
  • 【Python 工具人快餐 · 第 2 份】
  • TensorFlow深度学习实战(29)——强化学习(Reinforcement learning,RL)
  • Android 开发问题:The specified child already has a parent.
  • Visual Studio Code (v1.103) 中 GitHub Copilot 最新更新!
  • LLM表征的提取方式
  • n8n飞书webhook配置(飞书机器人、飞书bot、feishu bot)Crypto节点、js timestamp代码、Crypto node
  • 电机控制器母线电压采样芯片有哪些
  • 机器学习——模型的简单优化
  • 如何判断一个数是 2 的幂 / 3 的幂 / 4 的幂 / n 的幂 位运算 总结和思考 每日一题 C++的题解与思路
  • 机器翻译:需要了解的数学基础详解
  • 客服Agent革命:智能客服系统的技术实现与效果评估
  • Java Stream流详解:用法与常用API实战
  • Tob大客户销售面试经验
  • 数据安全与隐私保护:企业级防护策略与技术实现
  • DBSCAN聚类算法实战全解析
  • 时序分解 | MATLAB实现SAO-VMD雪消融算法优化变分模态分解
  • Python 属性描述符(描述符用法建议)
  • 词向量可视化:用TensorBoard或PCA探索词向量空间
  • RecyclerView 中 ViewHolder
  • Datawhale+AI夏令营_让AI读懂财报PDF task2深入赛题笔记
  • 学习Java的Day28
  • 常用信号深度解析(SIGINT、SIGPIPE、SIGALRM、SIGTERM等)
  • Android 锁屏图标的大小修改
  • 线上排查问题的一般流程是怎么样的?
  • [激光原理与应用-207]:光学器件 - 光纤种子源激光器常用元器件
  • python---类型别名