Over-the-Air NVIDIA Jetson - RAUC

From RidgeRun Developer Wiki

Follow Us On Twitter LinkedIn Email Share this page




NVIDIA partner logo NXP partner logo






RAUC on Jetson using OE4T

This wiki is a didactical guide to integrating and validating RAUC on NVIDIA Jetson platforms using OE4T / meta-tegra / tegra-demo-distro.

It is intended to help you:

  • Understand what RAUC is and why it is useful for Jetson A/B updates
  • Learn how RAUC fits into OE4T / Yocto
  • Bring up a working target where rauc.service runs correctly
  • Build and install a signed .raucb bundle
  • Understand how slot detection works using root= and rauc.slot=
  • Implement and understand a custom bootloader backend for Jetson using extlinux
  • Explore advanced topics such as adaptive updates, persistent state, and custom storage layouts

Version note

This documentation reflects the integration work performed on Jetson AGX Orin using OE4T tegra-demo-distro and meta-rauc on a Scarthgap-based environment.

Always treat the README files and metadata corresponding to the exact branch you are using as the source of truth.

Getting Started

  1. Bring-up and Yocto Integration — base integration, service startup, kernel cmdline, and target validation.
  2. Update Flow and Custom Bootloader — bundle creation, signed updates, extlinux A/B switching, and custom backend design.
  3. Advanced Topics and Troubleshooting — adaptive updates, persistent state design, and failure modes.

Introduction

This documentation describes the investigation and integration work performed to enable RAUC (Robust Auto-Update Controller) on an NVIDIA Jetson platform using the OE4T (OpenEmbedded for Tegra) tegra-demo-distro.

The goal of the project is to prepare a reliable A/B update mechanism for Jetson devices using Yocto, RAUC, and the OE4T BSP, documenting the full path from research to a working RAUC service running on target.

Research and Initial Investigation

RAUC

RAUC is an update framework designed for embedded Linux systems that provides:

  • Atomic system updates
  • A/B slot management
  • Cryptographic verification of update bundles
  • Rollback safety

For Jetson devices, RAUC is attractive because it integrates well with Yocto and supports rootfs-based A/B updates.

Constraints on Jetson

During the investigation phase, the following constraints were identified:

  • Jetson boot flow is not GRUB/UBoot-based by default
  • OE4T uses cboot + UEFI + extlinux depending on configuration
  • RAUC bootloader backends (grub, barebox, uboot) do not directly support Jetson

As a result, the initial approach was:

  • Use RAUC with the noop bootloader backend
  • Manually handle A/B switching via kernel command line

Relevant Layers and Where to Find Them

meta-tegra and tegra-demo-distro

OE4T provides the NVIDIA Jetson BSP and demo distro.

  • Repository: tegra-demo-distro
  • Main layers used:
    • meta
    • meta-tegra
    • meta-tegra-community
    • meta-tegrademo

The demo distro provides:

  • Predefined machines (e.g. p3737-0000-p3701-0005)
  • Demo image recipes (demo-image-base, demo-image-full, etc.)
  • Flashing artifacts (tegraflash tarballs, initrd flash images)

meta-rauc

RAUC Yocto integration is provided by the meta-rauc layer.

  • Repository: meta-rauc
  • Provides:
    • rauc
    • rauc-native
    • rauc-conf (since scarthgap)
    • bundle.bbclass

Important note:

Since scarthgap, RAUC configuration is split into a separate recipe (rauc-conf). All system-specific configuration must be provided via a rauc-conf.bbappend.