JetsonBSP镜像初始化Skill jetson-init-image

该技能用于初始化 Jetson 的 BSP 镜像,提取 Jetson Linux 和 sample-rootfs 压缩包,并运行 apply_binaries.sh 为活动目标配置 GPU 驱动栈(nvgpu 或 OpenRM),同时将 BSP 版本写入目标 profile,供后续烧录或源码构建等技能使用。关键词:Jetson、BSP、Linux for Tegra、镜像初始化、apply_binaries、rootfs、GPU驱动栈、T234、OpenRM、nvgpu

BSP与板级支持 0 次安装 1 次浏览 更新于 9/7/2026
名称 jetson-init-image
描述 >- 提取 Jetson Linux 和 sample-rootfs 的压缩包,并为当前目标运行 apply_binaries.sh, 然后在 profile 中记录 bsp_image。在 jetson-init-target 之后使用; 不用于源码树设置。
版本 0.0.1
开源协议 “Apache-2.0” metadata: data-classification: public
作者 “Jetson Team” tags: - bsp - image - bootstrap domain: meta

初始化 BSP 镜像

输出只在活动 profile 中写 bsp_image: 块:由派生的 version 和仅在覆盖 <workspace>/Image 时写入的 root_path 组成。

何时调用

  • 用户要求提取、准备或初始化 BSP 镜像。
  • 下游技能报告缺少 <bsp_image.root_path>/Linux_for_Tegra/
  • 活动 profile 还没有 bsp_image: 块。

步骤流程

解析目标和镜像路径

根据 ../../context/target-platform-contract.md 解析活动 profile。如果没有活动 profile 或缺少 reference_devkit:,则拒绝执行。

<workspace> 是活动 profile 的 target-platform/ 目录的父目录。<bsp_image.root_path> 默认是 <workspace>/Image

Profile 状态 动作
bsp_image.root_path 存在 直接使用,不再询问。
bsp_image: 存在但没有 root_path 使用 <workspace>/Image
没有 bsp_image: 询问一次:输入回车使用默认值,或输入绝对覆盖路径。

对于覆盖路径,需验证最近的已存在父目录是否可写。使用默认值时省略 root_path

确定 GPU 栈

使用 ../../context/target-platform-contract.md 中的共享 GPU 驱动不变式。根据 reference_devkit.module.id 和目录派生出预期的栈:

芯片系列 模块 ID apply_binaries.sh 参数
T234 / Orin p3701, p3767 nvgpu
T264 及之后 / Thor+ p3834 OpenRM --openrm

拒绝未知模块 ID。--openrm 参数只有在随 BSP 发行版提供 OpenRM 栈时才有效;如果当前 BSP 不暴露该参数,则无论目标需要什么都要省略。

复用或提取

如果 <bsp_image.root_path>/Linux_for_Tegra/ 已存在:

  1. 除非用户明确要求重新提取并接受覆盖风险,否则不要在其上重新提取。

  2. Linux_for_Tegra/nv_tegra_release 推导磁盘上的版本。在替换不同记录的 bsp_image.version 之前要询问。

  3. 尽可能检查已安装的 GPU 栈是否与平台预期相符。检测优先级(只要第一个探测返回确定的结果就采用):

    1. Linux_for_Tegra/rootfs/etc/nv_tegra_release 在较新 BSP 中带有 INSTALL_TYPE= 标记。直接读取并比较。
    2. 否则,执行 find Linux_for_Tegra -name nvgpu.ko:存在 → nvgpu,不存在 → OpenRM。
    3. 如果该芯片系列只对应过一种栈(例如 T234 / Orin 在当前 BSP 中总是 nvgpu),则回退到目录推导的预期值,不需要在磁盘上探测。

如果已安装的栈与活动目标冲突,拒绝执行并请用户用正确的栈重新提取或修复目标 profile。否则跳过提取并更新 profile。

定位压缩包

当需要提取时,按以下顺序搜索:

  1. <bsp_image.root_path>/
  2. <workspace>/
  3. 当前工作目录

缺失的文件提示输入绝对路径。所需文件名:

  • Jetson_Linux_R<ver>_aarch64.tbz2
  • Tegra_Linux_Sample-Root-Filesystem_R<ver>_aarch64.tbz2

两个文件名必须包含相同的 R<ver> 标记。拒绝不匹配的情况,并将 <ver> 记录为 bsp_image.version。不下载压缩包。

提取并应用二进制文件

使用绝对压缩包路径;它们可能位于 <bsp_image.root_path> 之外。

ROOT="<bsp_image.root_path>"
BSP_TARBALL="<absolute path to Jetson_Linux_R<ver>_aarch64.tbz2>"
ROOTFS_TARBALL="<absolute path to Tegra_Linux_Sample-Root-Filesystem_R<ver>_aarch64.tbz2>"

mkdir -p "$ROOT"
tar xjf "$BSP_TARBALL" -C "$ROOT"
sudo tar xpjf "$ROOTFS_TARBALL" -C "$ROOT/Linux_for_Tegra/rootfs"

cd "$ROOT/Linux_for_Tegra"
if [ "$GPU_STACK" = "openrm" ]; then
  sudo ./apply_binaries.sh --openrm
else
  sudo ./apply_binaries.sh
fi

根据上面的“确定 GPU 栈”步骤设置 GPU_STACK。在第一条失败的命令处中止,并显示失败命令。

更新活动 profile

将解析后的 BSP 镜像元数据持久化到活动目标 profile 中,以便后续技能无需重新询问即可找到 BSP。保留现有的块、注释和带引号的 SKU 值;使用支持往返的 YAML 写入器,如 ruamel.yaml

bsp_image:
  root_path: <absolute override path>  # 省略时使用 <workspace>/Image
version: "<derived version>"

规则:

  • 相同版本且相同 root_path:不重写。
  • 不同版本:更新前询问。
  • 记录的 root_path 不同:拒绝自动重写。
  • 始终用引号括起 version

完成

报告镜像路径、提取还是复用状态、GPU 栈、派生版本和 profile 更新状态。然后建议调用 /jetson-init-source

目的

通过提取正确的 Jetson Linux + sample-rootfs 压缩包并运行 apply_binaries.sh(带有从活动目标派生的 GPU 栈参数:T234 使用 nvgpu,T264+ 使用 OpenRM),在磁盘上创建 Linux_for_Tegra/。然后将派生的 BSP 版本提交到 profile 的 bsp_image: 块。

前置条件

  • 根据 ../../context/target-platform-contract.md 解析出的活动目标 profile。
  • Jetson Linux BSP 压缩包和匹配的 sample-rootfs 压缩包已放置在磁盘上(例如由 /jetson-download-bsp 下载或手动放置)。
  • 对工作区的 Image/ 根目录(或覆盖的 bsp_image.root_path)具有写权限。
  • sudo 权限执行 apply_binaries.sh

限制

  • 只写 bsp_image: 块;源码树、文档和载板 profile 由同级技能负责。
  • 除非用户明确指示,否则拒绝覆盖已存在的 Linux_for_Tegra/
  • 不下载压缩包;依赖 /jetson-download-bsp 或手动准备输入。

故障排除

  • apply_binaries.sh 返回非零 — 重新阅读其控制台输出;大多数失败原因是缺少 sudo、缺少 rootfs 压缩包,或 SoC 代次对应的 GPU 栈参数错误。
  • 提取后没有 nv_tegra_release — 提取提前停止;检查压缩包完整性并重新运行。
  • 记录的 version 与压缩包文件名不一致 — 压缩包被重命名;以 Linux_for_Tegra/nv_tegra_release 中解析出的值为准,而不是文件名。
  • profile 中已有不同的 root_path — 拒绝覆盖前需询问用户确认。

参考文献