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
  • 專案
  • 專案
  • 專案