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 支援。 |
| 電源管理 | nvpmodel、nvfancontrol。 |
| 安裝 | 基於 Flake 的 ISO 建構器(iso_minimal、iso_minimal_jp5)與刷寫工具(flash‑<device>-devkit)。 |
| 容器支援 | 與 Docker/Podman 整合,支援 nvidia.com/gpu 的 CDI 設備描述。 |
| 更新 | 基於 UEFI 膠囊的 OTA 固件更新,可選簽章膠囊驗證。 |
常見工作流程
- 刷寫 UEFI – 在 x86_64 主機上執行
nix build …#flash‑xavier‑agx‑devkit(或相應裝置),然後以 root 身份執行產生的指令碼。 - 建立安裝 ISO – 執行
nix build …#iso_minimal(或 JetPack 5 用iso_minimal_jp5),並使用dd將其寫入 USB 隨身碟。 - 啟動 Jetson – 使用 UEFI 啟動管理員啟動 ISO,然後依照標準 NixOS 安裝指南操作。
- 啟用 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 支援 - (可選)容器 – 啟用
hardware.nvidia-container-toolkit.enable與 Docker/Podman,再以--device=nvidia.com/gpu=all執行容器。 - 升級固件 – 在
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
- 專案
- 專案
- 專案