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


Jetson 分区知识全解与 OTA 升级实战

在嵌入式系统中,分区(Partition) 是理解启动流程、存储布局以及 OTA 升级机制的关键环节。NVIDIA Jetson 平台(如 Jetson AGX Orin、Orin NX、Orin Nano)在存储分区设计上提供了高度灵活性和扩展性,既能满足引导加载程序、固件、内核的独立存储需求,也支持用户数据和系统根文件系统的动态管理。本文将带你从分区架构入手,逐步讲解如何在 Jetson 平台上实现 OTA 升级方案,并给出实战示例与逻辑图。


在这里插入图片描述

1. Jetson 分区的整体理解

Jetson 的存储介质通常包括:

  • QSPI-NOR:存放 Bootloader、UEFI、早期启动代码等关键组件;
  • eMMC/SD/USB/NVMe:存放操作系统映像(system.img)、内核(boot.img)、设备树、用户数据等。

分区文件(如 flash_t234_qspi_sdmmc.xmlflash_t234_qspi_sd.xml)采用 XML 格式,描述了完整的分区布局。刷机脚本 flash.sh 会读取该配置文件,并调用 tegraflash.py 将数据写入对应的存储区域。


2. 分区配置文件结构

分区配置文件以 XML 形式存在,核心结构如下:

<partition_layout version="01.00.0000">
  <device type="sdmmc_user" instance="3">
    <partition name="APP" type="data">
      <allocation_policy>sequential</allocation_policy>
      <filesystem_type>basic</filesystem_type>
      <size>30064771072</size> <!-- 约 28GB -->
      <filename>system.img</filename>
    </partition>
  </device>
</partition_layout>

其中:

  • device:存储类型(sdmmc、nvme、spi 等);
  • partition:每个分区的名称、大小、文件系统类型;
  • filename:刷入分区的镜像文件。

3. Jetson 分区逻辑图

下面是典型 Jetson Orin 分区布局逻辑图:

+-------------------------------------------------------+
| QSPI-NOR (Boot)                                       |
|  MB1  |  UEFI  |  DTB  |  TOS  |  Recovery Kernel     |
+-------------------------------------------------------+
| eMMC / NVMe / SD 用户存储                             |
|  GPT -> | boot.img | kernel dtb | system.img | data   |
+-------------------------------------------------------+

这一布局为 OTA 升级方案的实现提供了基础:引导区独立,根文件系统和数据区可动态替换或扩展。


4. OTA 升级中的分区策略

在 Jetson 上实现 OTA 升级,通常有三种分区策略:

4.1 单根文件系统方案

  • 结构:只有一个 system.img(根文件系统)分区。
  • 特点:升级时直接覆盖该分区,简单高效。
  • 缺点:若升级失败,设备可能无法启动。

4.2 A/B 分区冗余方案

  • 结构:system_a 与 system_b 两个根文件系统分区,Bootloader 控制启动分区。
  • 特点:升级在备用分区完成,重启后切换启动。失败时可回滚。
  • 常见实现:Google Android A/B OTA 机制,Mender、RAUC。

4.3 数据与系统分离方案

  • 结构:根文件系统只存放系统文件,用户数据存放在独立 data 分区。
  • 特点:升级时仅替换 system.img,用户数据不受影响。

5. 实战:构建 A/B OTA 分区方案

Jetson Orin NX 为例,我们构建一个双根文件系统(A/B 分区)的 OTA 升级方案。

5.1 修改分区配置文件

编辑 flash_t234_qspi_sdmmc.xml

<device type="sdmmc_user" instance="3">
  <!-- system_a 分区 -->
  <partition name="APP_A" type="data">
    <size>0x400000000</size> <!-- 16GB -->
    <filename>system_a.img</filename>
  </partition>

  <!-- system_b 分区 -->
  <partition name="APP_B" type="data">
    <size>0x400000000</size> <!-- 16GB -->
    <filename>system_b.img</filename>
  </partition>

  <!-- 用户数据分区 -->
  <partition name="DATA" type="data">
    <size>0x200000000</size> <!-- 8GB -->
    <filename/>
  </partition>
</device>

5.2 引导加载程序配置

在 Bootloader 中加入启动控制逻辑:

# /boot/extlinux/extlinux.conf
LABEL system_a
  MENU LABEL primary system
  LINUX /boot/Image
  APPEND root=/dev/mmcblk0p1 rw

LABEL system_b
  MENU LABEL backup system
  LINUX /boot/Image
  APPEND root=/dev/mmcblk0p2 rw

5.3 OTA 升级流程

  1. 下载新固件包;
  2. system_b.img 写入备用分区;
  3. 修改 Bootloader 启动项,指向 system_b;
  4. 重启设备进入新系统;
  5. 若启动成功,标记升级成功;
  6. 若失败,回退至 system_a。

6. OTA 升级逻辑图

          +----------------+
          | 下载升级包     |
          +--------+-------+
                   |
                   v
          +--------+-------+
          | 写入 system_b |
          +--------+-------+
                   |
                   v
          +--------+-------+
          | Bootloader 切换|
          +--------+-------+
                   |
         成功? ----+-----> 失败回滚至 system_a
                   |
                   v
          +--------+-------+
          | 标记升级成功   |
          +----------------+

7. 实战代码示例

在 OTA 客户端(如基于 Mender/自研脚本)中,可以这样实现:

#!/bin/bash
set -e

IMAGE=new_system.img
TARGET_DEV=/dev/mmcblk0p2  # system_b 分区

# 写入镜像
dd if=$IMAGE of=$TARGET_DEV bs=1M status=progress

# 修改 Bootloader 配置
sed -i 's/APPEND root=\/dev\/mmcblk0p1/APPEND root=\/dev\/mmcblk0p2/' /boot/extlinux/extlinux.conf

# 重启进入新系统
reboot

8. 总结

  • Jetson 分区文件 提供了灵活的存储布局管理;
  • OTA 升级 可通过单分区、A/B 分区、数据/系统分离等方式实现;
  • 实战推荐:A/B 分区是最安全可靠的方案,尤其适合无人值守设备。

通过理解 Jetson 的分区配置和刷机机制,我们能够为嵌入式 AI 设备构建更加稳健的 OTA 升级方案,让系统升级更安全、更高效。



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


Logo

惟楚有才,于斯为盛。欢迎来到长沙!!! 茶颜悦色、臭豆腐、CSDN和你一个都不能少~

更多推荐