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
- 项目
- 项目
- 项目