基于 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.pswp.cn/diannao/94895.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/94895.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/94895.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL 主備(Master-Slave)復制 的搭建

一、主備架構簡介 Master(主庫):負責處理所有寫操作(INSERT/UPDATE/DELETE),并記錄二進制日志(binlog)。Slave(備庫):從主庫拉取 binlog&#xff…

【三個數絕對值排序】2022-10-10

緣由絕對值比較&#xff0c;總是跑不過怎么辦-編程語言-CSDN問答 template <class 形參> inline void 算交換(形參& a, 形參& b){ 形參 ab a - b; a - ab; b ab; } template <class 形參> void 三個升序(形參& a, 形參& b, 形參& c) {if (a…

【LoRA模型訓練】Stable Diffusion LoRA 模型秋葉訓練器詳細教程

一、工具簡介與安裝指南 1.1 秋葉 LoRA 訓練器概述 秋葉 LoRA 訓練器&#xff08;基于 Akegarasu/lora-scripts 項目&#xff09;是針對 Stable Diffusion 模型的輕量化微調工具&#xff0c;通過低秩適應&#xff08;LoRA&#xff09;技術實現高效參數微調。其核心優勢在于&a…

C++2024 年一級

1 單選題 (每題 2 分,共 30 分) 12 ? 題號 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 答案 C C D B B D B C C C D C D B D 第 1 題 2024年10?8? &#xff0c;諾貝爾物理學獎“意外地”頒給了兩位計算機科學家約翰霍普菲爾德&#xff08;John J. Hopfield&#xff09;和杰 弗??…

react-window

下面&#xff0c;我們來系統的梳理關于 React 虛擬化列表&#xff1a;react-window 的基本知識點&#xff1a;一、虛擬化列表核心概念 1.1 什么是虛擬化列表&#xff1f; 虛擬化列表&#xff08;也稱為窗口化&#xff09;是一種只渲染當前可見區域列表項的技術&#xff0c;而不…

2025AI顛覆認知!解鎖智能新紀元

清晨的城市還裹著薄霧時&#xff0c;通勤族的手機已經自動規劃好最優路線——避開施工路段、實時更新交通狀況&#xff0c;連早餐店排隊人數都能精準預測。這不是科幻電影里的片段&#xff0c;而是2025年AI深度融入生活的尋常場景。當數字化與智能化浪潮席卷而來&#xff0c;我…

實用Shell高級視頻課程

實用Shell高級視頻課程 Shell三劍客sed我網盤給你分享了「實用Shell高級視頻課程」&#xff0c;點擊鏈接或復制整段內容&#xff0c;打開「APP」即可獲取。/bc3b37jg8i:/鏈接&#xff1a;http://t.cn/A6swtV7u提取碼&#xff1a;ePV4 ???

hive-日期拆分為多行

hive-日期拆分為多行 代碼 SELECT begin_date,date_add(begin_date, tmp.pos),end_date,d_days,tmp.pos,tmp.val FROM (SELECT begin_date,end_date,DATEDIFF(end_date, begin_date) AS d_daysFROM (SELECT 2025-08-01 AS begin_date,2025-08-10 AS end_date) a) b LA…

全志MPP學習(1)-全志MPP概念理清

文章目錄1、全志MPP1.1、MPP-Framework1.2、MPP-Middleware1.3、MPP-Framework和MPP-Middleware之間的關系2、總結1、全志MPP 全志MPP&#xff08;Media Process Platform&#xff09;媒體處理軟件平臺&#xff0c;分為 mpp-middleware 和 mpp-framework 兩部分。 mpp-middlew…

Linux操作系統啟動項相關研究與總結

Linux操作系統啟動項相關研究與總結 一、Linux Systemd 服務創建與管理研究 1. Systemd 服務基礎 1.1 Systemd 服務文件位置 1.2 服務文件基本結構 2. 創建自定義 Systemd 服務 2.1 基本服務文件示例 2.2 服務文件詳細配置選項 [Unit] 部分常用指令: [Service] 部分常用指令:…

Go map 的性能革命:深入解析從鏈表到 Swiss Table 的優化之路

你好&#xff0c;Gopher&#xff01;map 作為 Go 語言中最核心、最常用的數據結構之一&#xff0c;其性能直接影響著我們程序的效率。在 Go 1.24 版本中&#xff0c;map的底層實現迎來了一次意義深遠的變革&#xff0c;從沿用多年的“哈希桶鏈表”結構&#xff0c;悄然升級為了…

化工廠安全升級:分布式光纖傳感的 “實時監測 + 精準預警” 方案

分布式光纖傳感技術憑借長距離連續監測、抗電磁干擾、耐腐蝕、高靈敏度、實時響應等特性&#xff0c;非常適配化工領域中化學原料及化學制品工廠的復雜環境&#xff0c;如高溫、高壓、腐蝕性介質、強電磁干擾等&#xff0c;在安全生產、設備維護、風險預警等方面發揮著關鍵作用…

供應鏈需求預測項目如何設定合理的KPI、準確率指標(十四)

本篇文章適合希望優化供應鏈管理的讀者&#xff0c;尤其是對KPI的選擇與應用有興趣的人。文章的亮點在于揭示了不當KPI使用可能導致的風險&#xff0c;如狹隘的關注、協作減少和與業務目標不一致等&#xff0c;同時提供了如何選擇合適KPI的最佳實踐。 本文整合自文章&#xff…

【線性代數】線性方程組與矩陣——(1)線性方程組與矩陣初步

上一節&#xff1a;無 總目錄&#xff1a;【線性代數】目錄 文章目錄1. 線性方程組2. 矩陣的引入2.1. 矩陣的定義2.2. 常見的矩陣2.3. 線性方程組中常用的矩陣2.4. 線性變換與矩陣3. 矩陣的運算3.1. 矩陣的加法3.2. 矩陣的數乘3.3. 矩陣的乘法3.4. 矩陣的轉置3.5. 方陣的行列式…

【工具變量】地市人力資本水平數據集(2003-2023年)

數據簡介&#xff1a;普通本專科在校學生數作為人力資本的代理變量&#xff0c;能夠直觀反映區域教育投入與人才儲備規模。通過與戶籍人口數比值計算&#xff0c;可消除人口基數差異&#xff0c;實現跨區域人力資本水平的橫向比較。 人力資本水平是個體價值創造能力與國家競爭…

輕量化閱讀應用實踐:21MB無廣告電子書閱讀器測評

還在為廣告滿天飛的閱讀軟件煩惱嗎&#xff1f;今天阿燦給大家推薦一款純凈好用的閱讀神器&#xff0c;安讀&#xff01;這款app只有21MB大小&#xff0c;但功能真的很貼心。最棒的是完全沒廣告&#xff0c;讓你能靜下心來好好看書。支持各種電子書格式&#xff0c;打開就能讀&…

嵌入式硬件篇---OpenMV存儲

OpenMV存儲部分OpenMV 開發板的存儲部分可以簡單理解為 “不同用途的存儲器”&#xff0c;就像我們的電腦有硬盤&#xff08;存文件&#xff09;、內存&#xff08;臨時運行程序&#xff09;一樣&#xff0c;OpenMV 也有幾個不同的存儲區域&#xff0c;各自分工明確。下面用通俗…

QT第二講-信號和槽

文章目錄 ?? 一、基本概念與規則 1. 信號(Signal) 2. 槽(Slot) ?? 二、連接函數 connect() 詳解 函數原型: 參數說明 類型 行為 場景 ?? 三、實際場景示例 場景1:按鈕點擊關閉窗口 場景2:實時驗證輸入框文本 ?? 四、高級技巧 1. Lambda表達式作為槽 2. 處理信號…

如何用OpenAI SDK調用Ollama LLM

Ollama目前內置了OpenAI Chat Completions API 的兼容端點&#xff0c;用戶可以用OpenAI SDK訪問本地Ollama模型&#xff0c;這里示例整個訪問過程。 假設Ollama已安裝&#xff0c;過程參考 在mac m1基于ollama運行deepseek r1_mac m1 ollama-CSDN博客 1 下載OpenAI SDK和模型…

如何解決用阿里云效流水線持續集成部署Nuxt靜態應用時流程卡住,進行不下去的問題

我有一個用Nuxt搭建的前端應用&#xff0c;部署時是用npm run generate命令生成靜態頁&#xff0c;然后上傳到服務器上的指定目錄來完成部署。之前是寫了一個shell腳本&#xff0c;用rsync命令實現的上傳&#xff0c;個人用起來倒也比較方便&#xff0c;但是因為涉及到服務器登…