基于 RAUC 的 Jetson OTA 升级全攻略

OTA开源代码 有许多开源项目可用于实现 OTA(Over-The-Air)更新。 阅读详情

📖 推荐阅读:《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; then
    rauc status mark-good
else
    echo "Health check failed"
fi
  • 启动后运行该脚本,如果失败,Bootloader 会回滚到上一个槽位。

4.2 槽位切换脚本

#!/bin/sh
SLOT="$1" # A 或 B
if [ "$SLOT" = "A" ]; then
    nvbootctrl set-active-boot-slot 0
else
    nvbootctrl 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 项目。

arm linux ota,嵌入式Linux的OTA更新,现有更新系统的比较 原标题:嵌入式Linux的OTA更新,现有更新系统的比较在基本原理和实现文章中,我们讨论了嵌入式Linux更新系统的基础和实现。在这里,我们讨论了一些现成的开源更新系统,这些系统现在可以与您的Embedded Linux项目集成。此更新系统非常专业,可以立即使用。它使用的双rootfs更新系统与上一篇文章中描述的系统非常相似。它与U-Boot紧密集成,以便在非引导映像的情况下进行回退。Mender... 阅读详情

相关推荐

五大开源OTA项目解析:如何为你的设备选择最佳方案

本文深度解析了Mender、RAUC、SWUpdate、Balena和UpdateHub五大主流开源OTA项目,为智能硬件和物联网设备选择最佳空中下载技术方案提供指南。文章从核心特点、适用场景、资源占用等维度进行对比,并针对不同设备类型和项目阶段给出具体选择建议,帮助开发者实现安全可靠的远程软件更新。

p8q9r0的博客 555

RAUC:可靠且灵活的嵌入式更新框架

RAUC:可靠且灵活的嵌入式更新框架 是一个开源项目,旨在为各种嵌入式系统提供安全、可靠和可扩展的固件更新方案。该项目采用C语言编写,并遵循Apache 2.0许可,可在多种平台上运行,包括Linux、FreeRTOS甚至裸机环境。 技术分析 RAUC的核心是基于签名的安全更新机制,确保只有经过验证的更新才能被安装到设备上。它支持多种存储布局,例如A/B分区、槽式更新等,这允许系统在安装新更新的同...

gitblog_00033的博客 1267

rauc:用于嵌入式Linux的安全可靠的软件更新

rauc:用于嵌入式Linux的安全可靠的软件更新

【亲测免费】 探索RAUC:嵌入式Linux系统的强大自动更新控制器

探索RAUC:嵌入式Linux系统的强大自动更新控制器 在嵌入式系统的世界中,保持软件的更新和安全是至关重要的。RAUC(Robust Auto-Update Controller)是一个专为嵌入式Linux系统设计的自动更新控制器,它不仅确保了更新的安全性和原子性,还提供了丰富的功能和灵活的配置选项。本文将深入介绍RAUC的项目特点、技术分析以及应用场景,帮助您了解为何RAUC是嵌入式系统更新的...

gitblog_00148的博客 882

诠视MR眼镜Unity开发设置_Unity2020.3.38

请按照如下设置Android SDK 和 Gradle。打包前先将Unity切换到Android模式。Preferences 设置。

m0_71932574的博客 599

微信小程序导航栏滑动一定距离后固定到顶部

接上一篇文章的内容,通常在一个页面中部会有一个导航栏查看不同的内容,这篇文章旨在实现在页面下滑的过程中导航栏自动固定到顶部以便我们阅读过程中的切换。 下滑一段距离后自动固定到顶部 首先,思考这个功能应该是怎么实现的: 在页面下滑的过程中,我们希望系统应当能识别下滑了多少距离,当原本的导航栏逐渐被遮住以后(遮住意味着下滑了特定距离),触发这个功能,执行另一种样式,将导航栏固定在页面顶端,同时如果我们将页面往上滑,系统能识别到原来的导航栏能露出来了(即距离顶端的高度小于一个特定的值),这时候又执行最初的样式

Oblivision_Geek的博客 4029

引领设备更新新时代:RAUC 开源更新工具详解与应用

引领设备更新新时代:RAUC 开源更新工具详解与应用 在快速迭代的物联网和嵌入式系统世界里,可靠的固件更新机制是确保设备稳定性和安全性的关键。今天,我们将深入探索一个强大的开源工具——RAUC(Runtime Artifact Updater for Containers),以及它的专属支持层meta-rauc,它们是如何简化设备固件更新流程,提高系统的可维护性。 项目介绍 RAUC是一个专为Li...

gitblog_00703的博客 1701

VS2022错误列表高效处理:从复制到Excel表格的完整指南

本文详细介绍了在Visual Studio 2022中高效处理错误列表的实用技巧,重点讲解了如何将错误信息一键复制并粘贴到Excel表格中。通过基础操作、自定义视图、筛选功能及常见问题解决方案,帮助开发者将杂乱的编译错误整理成清晰、可排序、可筛选的数据表,极大提升了团队协作、错误分析和项目管理的效率。

weixin_28837817的博客 357

RAUC 项目常见问题解决方案

RAUC 项目常见问题解决方案 1. 项目基础介绍 RAUC(Robust Auto-Update Controller)是一个用于嵌入式Linux系统的更新控制器。它既可以作为一个在目标系统上运行的更新客户端,也可以作为一个在宿主机/目标机上创建、检查和修改更新文件(称为“bundle”)的工具。RAUC旨在确保嵌入式系统的软件更新既安全又可靠。 主要编程语言 RAUC主要是使用C语言开发的。 ...

gitblog_01140的博客 725

Transformer论文解读

Transformer有多牛逼不用多说,时隔7年我们再来看看论文原文,看看这篇深刻改变世界的文章都说了什么。当然逐字逐句解读已经意义不大,我们只列考点。

xian0710830114的专栏 4402

多相机标定与单应变换:用OpenCV实现BEV俯视全景图

多路监控画面分散在不同屏幕,难以快速理解全局空间关系。通过相机标定与畸变校正,利用单应矩阵将各视角图像投影到统一的地面坐标系,即可合成BEV鸟瞰全景图。该技术是车载360°环视系统和自动驾驶BEV感知的雏形,也适用于场地安防与移动机器人导航。基于Python+OpenCV的四路相机实现,完整覆盖标定、投影变换、多路羽化融合与实时优化,为多视角拼接和俯视全景图项目提供可复现的工程参考。

weixin_29056865的博客 242

RAUC 项目使用教程

RAUC 项目使用教程 1、项目介绍 RAUC(Reliable Auto-Update Controller)是一个轻量级的更新客户端,专为嵌入式设备设计,能够可靠地控制设备更新过程。RAUC 使用 C 语言编写,基于 GLib 库,并采用 LGPL2.1 许可证。通过 meta-rauc 层,可以轻松地将 RAUC 集成到嵌入式项目中,为根文件系统添加所有必需的工具,并自动化构建更新包。 2、...

gitblog_00733的博客 1013

HFSS实战(二)——精准仿真高速PCB差分线的信号完整性

本文深入探讨了使用HFSS进行高速PCB差分线信号完整性仿真的关键技术与实战经验。从设计文件导入、模型裁剪到差分端口设置,详细解析了精准仿真的全流程,特别强调了材料特性和3D电磁场仿真在解决微带线损耗等问题中的重要性。文章还提供了常见问题排查指南和效率优化技巧,帮助工程师提升高速PCB设计的仿真精度与效率。

weixin_38170829的博客 571

RAUC项目常见问题解决方案

RAUC项目常见问题解决方案 1. 项目基础介绍 RAUC(Reliable Update for Embedded Linux Systems)是一个嵌入式Linux系统的更新框架。它旨在为嵌入式设备提供安全、可靠和用户友好的系统更新机制。该项目主要使用C语言进行开发。 2. 新手常见问题及解决方案 问题一:如何将RAUC集成到Yocto/OE项目中? 问题描述: 新手在使用RAUC时,可能会不...

gitblog_00737的博客 688

PyTorch生成式人工智能(1)——神经网络与模型训练过程详解

在本节中,我们介绍了传统机器学习与人工神经网络间的差异,并了解了如何在实现前向传播之前连接网络的各个层,以计算与网络当前权重对应的损失值;实现了反向传播以优化权重达到最小化损失值的目标。并实现了网络的所有关键组成——前向传播、激活函数、损失函数、链式法则和梯度下降,从零开始构建并训练了一个简单的神经网络。

盼小辉丶的博客 1万+

测绘程序设计——试题一:出租车轨迹数据计算

仅展示试题1的原文,如需了解其余内容,请自行购买图书李老师著作主页-http://ybli.users.sgg.whu.edu.cn/book/

chengzilhc的博客 890

linux日常记录1

只需要知道报名,yum工具自动从源端仓库下载安装,源端仓库地址可以通过查看cd /etc/yum.repose.d/这个目录下.repo文件。rpm --help | more --管道符是将前面命令输出的结果作为后面命令的输入 ,可以分页查看。.tar.gz 主要为源代码包,包里含有.h .c等文件,查看tar包里内容,tar -tf tar包。make install --安装,默认安装至/urs/local/tar -xzvf tar包 --解压缩。...

agrapea的博客 262

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Rockchip 平台 OTA 全面解析:从原理到最佳实践

《Rockchip平台OTA升级全面解析》深入探讨了嵌入式系统中远程OTA升级的核心目标与实现方案。文章以Rockchip设备连接Jetson AP热点为场景,对比分析了RAUC、SWUpdate、Mender等主流方案,推荐RAUC+双rootfs+HTTPS作为最优解。详细讲解了Yocto集成RAUC的步骤、分区规划、服务器搭建和设备端操作流程,并提供了SWUpdate轻量替代方案和Mender云端批量管理方案。最后给出安全与稳定性建议,帮助开发者实现可靠、安全的OTA升级系统。

Interview_TC的博客 1390

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【亲测免费】 RAUC 开源项目教程

RAUC 开源项目教程 项目介绍 RAUC(Reliable Auto-Update Controller)是一个用于嵌入式Linux系统的安全可靠的软件更新客户端。它旨在通过提供一个D-Bus接口,无缝集成到您的应用程序和基础设施中。RAUC不仅支持全系统更新,还支持冗余(A/B)系统更新,并且支持恢复系统。RAUC是开源的,基于LGPL-2.1许可证发布。 项目快速启动 安装RAUC 首先,克...

gitblog_01186的博客 1341

【AI×实时Linux:极速实战宝典】OTA升级 - 针对嵌入式Linux的双分区A/B升级方案,确保模型更新的原子性与回滚

概要:设计RAUC或SWUpdate升级方案,实现系统与AI模型的双分区热更新,升级失败自动回滚

望获实时Linux系统 993

RAUC 开源项目安装与使用指南

RAUC 开源项目安装与使用指南 1. 项目目录结构及介绍 RAUC 是一个用于嵌入式Linux系统的轻量级固件更新客户端,它确保设备可以安全可靠地进行固件版本更新。以下是RAUC项目的基本目录结构概览及其重要组件说明: src 包含了RAUC的核心源代码,这里主要实现了更新逻辑、D-Bus接口和证书处理等功能。 doc 存放项目的文档,包括用户手册、开发者指南等,对于理解和使用RAUC至...

gitblog_00335的博客 810

Linux OTA升级

Linux OTA升级,yocto上平台不提供,是需要客户自己集成的,目前yocto上有swupdate、Mender.io、RAUC,swupdate是免费的使用的相对多一些。不过要是有钱的话最好还是用mender.io,mender根据数量不同收费价格不一样。现在介绍一下swupdate的使用。 1.根据当前基线版本,下载相应的swupdate软件。比如我目前用的是morty的基线,下载方法: git clone https://github.com/sbabic/meta-swupdate.g.

punmpkin的专栏 9053

rk35xx 通过recovery升级问题

Firefly 的recovery库是一个核心组件,它构建了一个独立的微型 Linux 系统,专门用于在设备主系统之外执行高可靠性的固件升级。简单来说,它的工作流程是:主系统通过命令触发,将升级指令写入特定分区并重启;随后,引导程序(U-Boot)加载recovery系统;最后,recovery系统解析并执行升级包,完成固件更新。整个流程与 Rockchip 平台深度集成,主要用于实现系统级(OTA)升级和恢复出厂设置。

分享嵌入式,移动端,智能应用,数据库等专业板块,记录知识碎片!!! 390

ROC和AUC介绍以及如何计算AUC

ROC和AUC介绍以及如何计算AUC June 22, 2013 ROC(Receiver Operating Characteristic)曲线和AUC常被用来评价一个二值分类器(binary classifier)的优劣,对两者的简单介绍见这里。这篇博文简单介绍ROC和AUC的特点,以及更为深入地,讨论如何作出ROC曲线图以及计算AUC。 ROC曲线 需要提前说明的是,我们这里只讨论二

wsq520521的专栏 2003

Yocto/Open Embedded meta-rauc 项目推荐

Yocto/Open Embedded meta-rauc 项目推荐 Yocto/Open Embedded meta-rauc 是一个为嵌入式 Linux 系统提供更新支持的开源项目。该项目主要通过 BitBake 编程语言实现其功能。 项目基础介绍 meta-rauc 是 Yocto 和 Open Embedded 的一个元层,它为 RAUC(嵌入式 Linux 更新框架)提供集成支持。通过这...

gitblog_01135的博客 496

【实时Linux工业PLC解决方案系列】第二十四篇 - 实时Linux PLC远程运维与升级方案

概要:搭建PLC轻量化远程运维平台,整合远程调试、参数配置、固件升级功能,优化升级包加密传输、增量更新、升级失败回滚机制,适配工业现场无人值守场景,降低运维成本。

望获实时Linux系统 400
上一篇: NVIDIA Jetson & JetPack 全面解析:从硬件到定制镜像
下一篇: 嵌入式 Linux Mender OTA 实战全指南
嵌入式孙老师
博客等级 码龄7年 5686粉丝 898原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值