anduril/jetpack-nixos

NixOS module for NVIDIA Jetson devices

jetpack‑nixos – NVIDIA Jetson 的 NixOS 支持(JetPack)

是什么 – 一个 NixOS 模块和覆盖层,将 NVIDIA JetPack SDK(固件、内核、CUDA、cuDNN、TensorRT、GStreamer 插件、Vulkan 等)打包用于 Jetson 开发套件。它允许你在 Jetson 设备上安装并运行完整的 NixOS 系统,同时保持 JetPack 提供的驱动程序和库同步。

为何重要 – Jetson 板卡在边缘 AI、机器人和计算机视觉工作负载中非常流行。通常你需要使用 NVIDIA 的基于 Ubuntu 的镜像,并手动管理固件、内核和 CUDA 版本。jetpack‑nixos 将所有这些操作在声明式 NixOS 生态系统中自动化,提供可复现的构建、轻松升级,并能够混合使用 Nix 提供的包与 JetPack 组件。


主要功能

领域 由本仓库提供
固件 用于刷写基于 EDK2 的 UEFI 固件、ARM Trusted Firmware、OP‑TEE 的脚本。
内核 NVIDIA 提供的 JetPack 内核(或通过 bring‑your‑own‑kernel 选项使用主线内核)。
GPU 堆栈 CUDA、cuDNN、TensorRT、NVIDIA 容器工具包。
多媒体 V4L2 加速编码/解码、GStreamer 插件、Wayland/GBM/EGL/Vulkan 支持。
电源管理 nvpmodelnvfancontrol
安装 基于 Flake 的 ISO 构建器(iso_minimaliso_minimal_jp5)和刷写工具(flash‑<device>-devkit)。
容器支持 与 Docker/Podman 集成,支持 nvidia.com/gpu 的 CDI 设备描述。
更新 基于 UEFI 胶囊的 OTA 固件更新,可选签名胶囊认证。

典型工作流程

  1. 刷写 UEFI – 在 x86_64 主机上运行 nix build …#flash‑xavier‑agx‑devkit(或相应设备),然后以 root 身份执行生成的脚本。
  2. 创建安装 ISO – 运行 nix build …#iso_minimal(或 JetPack 5 用 iso_minimal_jp5),使用 dd 将其写入 USB 闪存盘。
  3. 启动 Jetson – 使用 UEFI 启动管理器启动 ISO,然后按照标准 NixOS 安装指南操作。
  4. 启用 JetPack 模块 – 在 configuration.nix 中设置:
    hardware.nvidia-jetpack.enable = true;
    hardware.nvidia-jetpack.som = "orin-agx";   # 或 xavier‑agx 等。
    hardware.nvidia-jetpack.carrierBoard = "devkit";
    hardware.graphics.enable = true;   # GPU 支持
    
  5. (可选)容器 – 启用 hardware.nvidia-container-toolkit.enable 和 Docker/Podman,然后使用 --device=nvidia.com/gpu=all 运行容器。
  6. 升级固件 – 在 nixos-rebuild switch 后,设置 hardware.nvidia-jetpack.bootloader.autoUpdate = true,或手动构建胶囊(nix build .#uefi-capsule-update‑xavier‑nx‑emmc‑devkit)并在设备上应用。

适合使用的人

  • 需要在 Jetson 板卡上使用可复现 OS 镜像的 机器人/边缘 AI 工程师
  • 希望在 Nix shell 或容器中运行 CUDA 加速 ML 框架(PyTorch、TensorFlow、OpenCV)的 研究人员
  • 偏好声明式系统定义并希望对整个 Jetson 堆栈进行版本控制的 DevOps / CI 人员

限制与注意事项

  • 仅支持 JetPack 5–7 支持的 Jetson 设备(Orin AGX/NX/Nano、Xavier AGX/NX)。Nano/TX1/TX2 明确不支持。
  • 固件和部分刷写工具(tegrarcm_v2)仅在 x86_64 主机上运行。
  • Xavier AGX 将 UEFI 变量存储在 eMMC 分区中,因此无法从 Linux 运行时修改 EFI 变量;必须手动设置启动顺序。
  • 某些 Orin 型号的图形控制台输出可能不稳定;建议使用串行控制台进行故障排查。
  • CUDA 二进制文件为非自由软件;必须启用 allowUnfree = true 并在 Nixpkgs 配置中设置 cudaSupport = true
  • 混合使用 JetPack 版本时,固件、内核和 rootfs 必须属于同一主版本;不能混合使用 JetPack 5 固件与 JetPack 6 内核。

快速入门片段(Flake 基础)

# flake.nix
{
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
    jetpack.url = "github:anduril/jetpack-nixos";
    jetpack.inputs.nixpkgs.follows = "nixpkgs";
  };
  outputs = { self, nixpkgs, jetpack, ... }:
    let
      system = "aarch64-linux";
    in {
      nixosConfigurations.jetson = nixpkgs.lib.nixosSystem {
        inherit system;
        modules = [ ./configuration.nix jetpack.nixosModules.default ];
      };
    };
}
# configuration.nix(摘录)
{
  hardware.nvidia-jetpack.enable = true;
  hardware.nvidia-jetpack.som = "orin-agx";
  hardware.nvidia-jetpack.carrierBoard = "devkit";
  hardware.graphics.enable = true;
  hardware.nvidia-container-toolkit.enable = true;
  virtualisation.docker.enable = true;
}

更多学习资源

  • 仓库 README(本摘要的来源)– 包含详细的刷写、ISO 构建和内核覆盖说明。
  • NVIDIA JetPack SDK 文档 – 有关 TensorRT 和电源模型等硬件特定功能的信息。
  • NixOS 手册 – 通用 NixOS 安装和 Flake 使用方法。
  • OpenEmbedded for Tegra (OE4T) – 本项目使用的清理后供应商内核的上游源。

总结jetpack‑nixos 桥接了 NVIDIA 的 JetPack AI 堆栈与可复现、声明式 NixOS 世界之间的鸿沟,使在 Jetson 边缘设备上运行 AI 工作负载、容器和自定义内核成为现实可行的选择。

相关

  • 项目
  • Dispatch
  • 项目
  • 项目
  • 项目