From 54a1ef1ebad6b41b19484273bba5adf5b6e1abe2 Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Wed, 25 Jun 2025 14:41:44 -0700 Subject: [PATCH 01/39] flash-from-device: Add patches to compile mtdutils with musl nixpkgs 25.05 bumped mtdutils to 2.3.0. This version had some regressions in order to compile with musl. Those patches are merged directly on top of 2.3.0. For simplicity, move to end of those commits rather than cherry-picking the patches. --- pkgs/flash-from-device/default.nix | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/pkgs/flash-from-device/default.nix b/pkgs/flash-from-device/default.nix index 8ac750ff..0b4a9551 100644 --- a/pkgs/flash-from-device/default.nix +++ b/pkgs/flash-from-device/default.nix @@ -1,13 +1,14 @@ { lib, pkgsStatic, runCommand, tegra-eeprom-tool-static }: let - # Workaround build failure with pkgsStatic.mtdutils in NixOS 24.11 - # > configure: WARNING: cannot find CMocka library required for unit tests - # > configure: unit tests can optionally be disabled - # > configure: error: missing one or more dependencies mtdutils = pkgsStatic.mtdutils.overrideAttrs (_: { - configureFlags = [ ]; - doCheck = false; + # Grab patches merged after 2.3.0 to let mtdutils build with musl + # https://lists.openembedded.org/g/openembedded-core/topic/patch_mtd_utils_upgrade_to/111205949 + src = fetchGit { + url = "git://git.infradead.org/mtd-utils.git"; + rev = "77981a2888c711268b0e7f32af6af159c2288e23"; + }; + version = "2.3.0-unstable-2025-06-02"; }); # Make the package smaller so it doesn't blow up the initrd size From b67b01e09f2680164ac8c498e0936676d16007d0 Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Wed, 25 Jun 2025 14:43:34 -0700 Subject: [PATCH 02/39] flash-from-device: Add missing fields from flash.idx flash.idx contains a filesize field. We don't currently use this field nor the fields after, but let's fix it since it was noticed. --- pkgs/flash-from-device/flash-from-device.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/flash-from-device/flash-from-device.sh b/pkgs/flash-from-device/flash-from-device.sh index b00c1e9d..6dd92d3a 100644 --- a/pkgs/flash-from-device/flash-from-device.sh +++ b/pkgs/flash-from-device/flash-from-device.sh @@ -147,7 +147,7 @@ erase_bootdev() { BOOTDEV_TYPE= # Detect type to erase - while IFS=", " read -r partnumber partloc start_location partsize partfile partattrs partsha; do + while IFS=", " read -r partnumber partloc start_location partsize partfile filesize partattrs partsha; do devnum=$(echo "$partloc" | cut -d':' -f 1) instnum=$(echo "$partloc" | cut -d':' -f 2) partname=$(echo "$partloc" | cut -d':' -f 3) @@ -187,7 +187,7 @@ erase_bootdev() { write_partitions() { # shellcheck disable=SC2034 - while IFS=", " read -r partnumber partloc start_location partsize partfile partattrs partsha; do + while IFS=", " read -r partnumber partloc start_location partsize partfile filesize partattrs partsha; do # Need to trim off leading blanks devnum=$(echo "$partloc" | cut -d':' -f 1) instnum=$(echo "$partloc" | cut -d':' -f 2) From 20bc50f487039e18c2ef91a6b9ee921c2dd164e6 Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Mon, 19 May 2025 13:20:52 -0700 Subject: [PATCH 03/39] s/buildFHSUserEnv/buildFHSEnv/ buildFHSUserEnv is deprecated for buildFHSEnv. Fixes: de01bba154f2 ("Upgrade to nixos-25.05") --- pkgs/cuda-packages/nsight_compute_host.nix | 4 ++-- pkgs/cuda-packages/nsight_systems_host.nix | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pkgs/cuda-packages/nsight_compute_host.nix b/pkgs/cuda-packages/nsight_compute_host.nix index 4a18cf9e..3f64c631 100644 --- a/pkgs/cuda-packages/nsight_compute_host.nix +++ b/pkgs/cuda-packages/nsight_compute_host.nix @@ -1,5 +1,5 @@ { alsa-lib -, buildFHSUserEnv +, buildFHSEnv , buildFromDebs , dbus , debs @@ -53,7 +53,7 @@ in # ncu-ui has some hardcoded /usr access so use fhs instead of trying to patchelf # it also comes with its own qt6 .so, trying to use Nix qt6 libs results in weird # behavior(blank window) so just supply qt6 dependency instead of qt6 itself -buildFHSUserEnv { +buildFHSEnv { pname = "ncu-ui"; inherit (nsight_out) version; targetPkgs = diff --git a/pkgs/cuda-packages/nsight_systems_host.nix b/pkgs/cuda-packages/nsight_systems_host.nix index 500893c1..77a71702 100644 --- a/pkgs/cuda-packages/nsight_systems_host.nix +++ b/pkgs/cuda-packages/nsight_systems_host.nix @@ -1,5 +1,5 @@ { alsa-lib -, buildFHSUserEnv +, buildFHSEnv , buildFromDebs , dbus , debs @@ -78,7 +78,7 @@ in # nsys-ui has some hardcoded /usr access so use fhs instead of trying to patchelf # it also comes with its own qt6 .so, trying to use Nix qt6 libs results in weird # behavior(blank window) so just supply qt6 dependency instead of qt6 itself -buildFHSUserEnv { +buildFHSEnv { pname = "nsys-ui"; inherit (nsight_out) version; targetPkgs = From f5a1bb78b81f8ea36773095cbf39cfde8ca7572c Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Fri, 27 Jun 2025 12:15:29 -0700 Subject: [PATCH 04/39] nvidia-container-toolkit: Migrate hardware.nvidia-jetpack.container-toolkit.enable virtualisation.{docker,podman}.enableNvidia has been deprecated by upstream nixpkgs (nixos/nixpkgs#284507). The upstream nvidia-container-toolkit is also not yet suitable for us (nixos/nixpkgs#344729). Create our own config to gate the generation of the CDI configuration. --- modules/default.nix | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/modules/default.nix b/modules/default.nix index 02cf128f..6f0738a0 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -158,6 +158,13 @@ in type = types.bool; description = "Enable boot.kernelParams default console configuration"; }; + + container-toolkit.enable = mkOption { + default = nvidiaDockerActive || nvidiaPodmanActive; + defaultText = "false"; + type = types.bool; + description = "Enable dynamic CDI configuration for Jetson devices."; + }; }; }; @@ -181,15 +188,21 @@ in ''; } { - assertion = nvidiaDockerActive -> lib.versionAtLeast config.virtualisation.docker.package.version "25"; + assertion = (config.virtualisation.docker.enable && cfg.container-toolkit.enable) -> lib.versionAtLeast config.virtualisation.docker.package.version "25"; message = "Docker version < 25 does not support CDI"; } { - assertion = (nvidiaDockerActive || nvidiaPodmanActive) -> (!config.hardware.nvidia-container-toolkit.enable); - message = "hardware.nvidia-container-toolkit.enable does not work with jetson devices (yet), use virtualisation.{docker,podman}.enableNvidia instead"; + assertion = !config.hardware.nvidia-container-toolkit.enable; + message = "hardware.nvidia-container-toolkit.enable does not work with jetson devices (yet), use hardware.nvidia-jetpack.container-toolkit.enable instead"; } ]; + warnings = (lib.optionals nvidiaDockerActive [ + "You have set virtualisation.docker.enableNvidia. This option is deprecated, please set hardware.nvidia-jetpack.container-toolkit.enable instead." + ]) ++ (lib.optionals nvidiaPodmanActive [ + "You have set virtualisation.podman.enableNvidia. This option is deprecated, please set hardware.nvidia-jetpack.container-toolkit.enable instead." + ]); + # Use mkOptionDefault so that we prevent conflicting with the priority that # `nixos-generate-config` uses. nixpkgs.hostPlatform = lib.mkOptionDefault "aarch64-linux"; @@ -394,8 +407,7 @@ in otaUtils # Tools for UEFI capsule updates ]; - systemd.services.nvidia-cdi-generate = { - enable = nvidiaDockerActive || nvidiaPodmanActive; + systemd.services.nvidia-cdi-generate = lib.mkIf cfg.container-toolkit.enable { serviceConfig = { Type = "oneshot"; RemainAfterExit = true; From 9fc9edb2fc85c40c2fb438a26c292c435954d94c Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Mon, 5 May 2025 13:27:43 -0700 Subject: [PATCH 05/39] Add jetpack 6.2 source versions --- flake.nix | 2 +- modules/default.nix | 2 +- overlay.nix | 12 + pkgs/containers/r36.4-l4t.json | 336 ++++++++++ sourceinfo/r36.4-debs.json | 1050 ++++++++++++++++++++++++++++++ sourceinfo/r36.4.3-gitrepos.json | 410 ++++++++++++ 6 files changed, 1810 insertions(+), 2 deletions(-) create mode 100644 pkgs/containers/r36.4-l4t.json create mode 100644 sourceinfo/r36.4-debs.json create mode 100644 sourceinfo/r36.4.3-gitrepos.json diff --git a/flake.nix b/flake.nix index 6544aedc..c22c064e 100644 --- a/flake.nix +++ b/flake.nix @@ -140,7 +140,7 @@ ]; }); in - pkgs.nvidia-jetpack // { inherit (pkgs) nvidia-jetpack5; } + pkgs.nvidia-jetpack // { inherit (pkgs) nvidia-jetpack5 nvidia-jetpack6; } ); }; } diff --git a/modules/default.nix b/modules/default.nix index 6f0738a0..9b8acfe6 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -15,7 +15,7 @@ let cfg = config.hardware.nvidia-jetpack; - jetpackVersions = [ "5" ]; + jetpackVersions = [ "5" "6" ]; teeApplications = pkgs.symlinkJoin { name = "tee-applications"; diff --git a/overlay.nix b/overlay.nix index 422be80f..253ba1ed 100644 --- a/overlay.nix +++ b/overlay.nix @@ -12,5 +12,17 @@ final: prev: final prev; + nvidia-jetpack6 = import ./mk-overlay.nix + { + # Below 3 are from release notes + jetpackMajorMinorPatchVersion = "6.2"; + l4tMajorMinorPatchVersion = "36.4.3"; + cudaMajorMinorPatchVersion = "12.6.10"; + + bspHash = "sha256-lJpEBJxM5qjv31cuoIIMh09u5dQco+STW58OONEYc9I="; + } + final + prev; + nvidia-jetpack = final.nvidia-jetpack5; } diff --git a/pkgs/containers/r36.4-l4t.json b/pkgs/containers/r36.4-l4t.json new file mode 100644 index 00000000..7d4dc496 --- /dev/null +++ b/pkgs/containers/r36.4-l4t.json @@ -0,0 +1,336 @@ +{ + "nvidia-l4t-3d-core": [ + "/usr/lib/aarch64-linux-gnu/nvidia/libGLX_nvidia.so.0", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvidia-eglcore.so.540.4.0", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvidia-glcore.so.540.4.0", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvidia-glsi.so.540.4.0", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvidia-glvkspirv.so.540.4.0", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvidia-gpucomp.so.540.4.0", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvidia-nvvm.so.540.4.0", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvidia-ptxjitcompiler.so.540.4.0", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvidia-rtcore.so.540.4.0", + "/usr/lib/aarch64-linux-gnu/nvidia/nvidia_icd.json", + "/usr/lib/aarch64-linux-gnu/tegra-egl/", + "/usr/lib/aarch64-linux-gnu/tegra-egl/ld.so.conf", + "/usr/lib/aarch64-linux-gnu/tegra-egl/libEGL_nvidia.so.0", + "/usr/lib/aarch64-linux-gnu/tegra-egl/libGLESv1_CM_nvidia.so.1", + "/usr/lib/aarch64-linux-gnu/tegra-egl/libGLESv2_nvidia.so.2", + "/usr/lib/aarch64-linux-gnu/tegra-egl/nvidia.json", + "/etc/vulkan/icd.d/nvidia_icd.json", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvidia-nvvm.so.4", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvidia-ptxjitcompiler.so.1", + "/usr/share/glvnd/egl_vendor.d/10_nvidia.json" + ], + "nvidia-l4t-camera": [ + "/usr/lib/aarch64-linux-gnu/nvidia/libnvargus.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvargus_socketclient.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvargus_socketserver.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvcam_imageencoder.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvcameratools.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvcamerautils.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvcamlog.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvcamv4l2.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvcapture.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvfusacap.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvfusacapinterface.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvisp.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvisppg.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvmedia_isp_ext.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvodm_imager.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvscf.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libv4l2_nvargus.so", + "/usr/lib/aarch64-linux-gnu/libv4l/plugins/nv/libv4l2_nvargus.so" + ], + "nvidia-l4t-core": [ + "/usr/lib/aarch64-linux-gnu/nvidia/ld.so.conf", + "/usr/lib/aarch64-linux-gnu/nvidia/libjetsonpower.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvcolorutil.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvdc.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvddk_2d_v2.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvddk_vic.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvdla_runtime.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvfnet.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvfnetstoredefog.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvfnetstorehdfx.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvgov_boot.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvgov_camera.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvgov_force.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvgov_generic.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvgov_gpucompute.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvgov_graphics.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvgov_il.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvgov_spincircle.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvgov_tbc.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvgov_ui.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvidia-rmapi-tegra.so.540.4.0", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvidia-tls.so.540.4.0", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvimp.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvisp_utils.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvos.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvphs.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvphsd.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvpva.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvpva_algorithms.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvpvaumd.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvrm_chip.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvrm_gpu.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvrm_host1x.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvrm_mem.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvrm_stream.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvrm_surface.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvrm_sync.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvsciipc.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvsocsys.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvtegrahv.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvvic.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libsensors.hal-client.nvs.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libsensors.l4t.no_fusion.nvs.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libsensors_hal.nvs.so", + "/usr/lib/aarch64-linux-gnu/tegra" + ], + "nvidia-l4t-cuda": [ + "/usr/lib/aarch64-linux-gnu/nvidia/libcuda.so.1.1", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvcucompat.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvcudla.so", + "/usr/lib/aarch64-linux-gnu/libcuda.so", + "/usr/lib/aarch64-linux-gnu/libnvcucompat.so", + "/usr/lib/aarch64-linux-gnu/libnvcudla.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libcuda.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libcuda.so.1" + ], + "nvidia-l4t-cuda-utils": [ + "/usr/bin/nvidia-cuda-mps-control", + "/usr/bin/nvidia-cuda-mps-server" + ], + "nvidia-l4t-cudadebuggingsupport": [ + "/usr/lib/aarch64-linux-gnu/tegra/", + "/usr/lib/aarch64-linux-gnu/tegra/libcudadebugger.so.1" + ], + "nvidia-l4t-dla-compiler": [ + "/usr/lib/aarch64-linux-gnu/nvidia/libnvdla_compiler.so" + ], + "nvidia-l4t-firmware": [ + "/lib/firmware/tegra19x/nvhost_nvdec040_ns.fw", + "/lib/firmware/tegra23x/nvhost_nvdec050_desc_prod.bin" + ], + "nvidia-l4t-gbm": [ + "/usr/lib/aarch64-linux-gnu/nvidia/libnvidia-allocator.so.1", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvidia-egl-gbm.so.1.1.0", + "/usr/lib/aarch64-linux-gnu/gbm/nvidia-drm_gbm.so", + "/usr/lib/aarch64-linux-gnu/gbm/tegra-udrm_gbm.so", + "/usr/lib/aarch64-linux-gnu/gbm/tegra_gbm.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvidia-allocator.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvidia-egl-gbm.so.1" + ], + "nvidia-l4t-gstreamer": [ + "/usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstnvarguscamerasrc.so", + "/usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstnvcompositor.so", + "/usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstnvdrmvideosink.so", + "/usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstnveglglessink.so", + "/usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstnveglstreamsrc.so", + "/usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstnvegltransform.so", + "/usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstnvipcpipeline.so", + "/usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstnvivafilter.so", + "/usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstnvjpeg.so", + "/usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstnvtee.so", + "/usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstnvunixfd.so", + "/usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstnvv4l2camerasrc.so", + "/usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstnvvidconv.so", + "/usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstnvvideo4linux2.so", + "/usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstnvvideosink.so", + "/usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstnvvideosinks.so", + "/usr/lib/aarch64-linux-gnu/gstreamer-1.0/nvgstcapture-1.0_README.txt", + "/usr/lib/aarch64-linux-gnu/gstreamer-1.0/nvgstipctestapp-1.0_README.txt", + "/usr/lib/aarch64-linux-gnu/gstreamer-1.0/nvgstplayer-1.0_README.txt", + "/usr/lib/aarch64-linux-gnu/libgstnvegl-1.0.so.0", + "/usr/lib/aarch64-linux-gnu/libgstnvexifmeta.so", + "/usr/lib/aarch64-linux-gnu/libgstnvivameta.so", + "/usr/lib/aarch64-linux-gnu/libnvsample_cudaprocess.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libgstnvcustomhelper.so.1.0.0", + "/usr/lib/aarch64-linux-gnu/nvidia/libgstnvdsseimeta.so.1.0.0", + "/usr/lib/aarch64-linux-gnu/nvidia/libnveglstreamproducer.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libgstnvcustomhelper.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libgstnvdsseimeta.so" + ], + "nvidia-l4t-libwayland-client0": [ + "/usr/lib/aarch64-linux-gnu/nvidia/libwayland-client.so.0.22.0", + "/usr/lib/aarch64-linux-gnu/nvidia/libwayland-client.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libwayland-client.so.0" + ], + "nvidia-l4t-libwayland-cursor0": [ + "/usr/lib/aarch64-linux-gnu/nvidia/libwayland-cursor.so.0.22.0", + "/usr/lib/aarch64-linux-gnu/nvidia/libwayland-cursor.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libwayland-cursor.so.0" + ], + "nvidia-l4t-libwayland-egl1": [ + "/usr/lib/aarch64-linux-gnu/nvidia/libwayland-egl.so.1.22.0", + "/usr/lib/aarch64-linux-gnu/nvidia/libwayland-egl.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libwayland-egl.so.1" + ], + "nvidia-l4t-libwayland-server0": [ + "/usr/lib/aarch64-linux-gnu/nvidia/libwayland-server.so.0.22.0", + "/usr/lib/aarch64-linux-gnu/nvidia/libwayland-server.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libwayland-server.so.0" + ], + "nvidia-l4t-multimedia": [ + "/usr/lib/aarch64-linux-gnu/nvidia/libnvbufsurftransform.so.1.0.0", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvcuvidv4l2.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvdecode2eglimage.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvdsbufferpool.so.1.0.0", + "/usr/lib/aarch64-linux-gnu/nvidia/libnveventlib.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvexif.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvid_mapper.so.1.0.0", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvjpeg.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvmedia.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvmedia2d.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvmedia_2d.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvmedia_dla.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvmedia_eglstream.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvmedia_ide_parser.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvmedia_ide_sci.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvmedia_iep_sci.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvmedia_ijpd_sci.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvmedia_ijpe_sci.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvmedia_iofa_sci.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvmedia_tensor.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvmedialdc.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvmm.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvmm_contentpipe.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvmm_parser.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvmm_utils.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvmmlite.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvmmlite_image.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvmmlite_utils.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvmmlite_video.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvofsdk.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvoggopus.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvomx.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvomxilclient.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvosd.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvparser.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvtracebuf.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvtvmr.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvtvmr_2d.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvv4l2.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvv4lconvert.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvvideo.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvvideoencode_ppe.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libtegrav4l2.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libv4l2_nvcuvidvideocodec.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libv4l2_nvvideocodec.so", + "/usr/lib/aarch64-linux-gnu/libv4l/plugins/nv/libv4l2_nvcuvidvideocodec.so", + "/usr/lib/aarch64-linux-gnu/libv4l/plugins/nv/libv4l2_nvvideocodec.so", + "/usr/lib/aarch64-linux-gnu/libv4l2.so.0.0.999999", + "/usr/lib/aarch64-linux-gnu/libv4lconvert.so.0.0.999999", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvbufsurftransform.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvdsbufferpool.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvid_mapper.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libv4l2.so.0", + "/usr/lib/aarch64-linux-gnu/nvidia/libv4lconvert.so.0" + ], + "nvidia-l4t-multimedia-utils": [ + "/usr/lib/aarch64-linux-gnu/nvidia/libnvbuf_fdmap.so.1.0.0", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvbufsurface.so.1.0.0", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvbufsurface.so" + ], + "nvidia-l4t-nvml": [ + "/usr/lib/aarch64-linux-gnu/nvidia/libnvidia-ml.so.1", + "/usr/sbin/nvidia-smi", + "/usr/share/doc/nvidia-tegra/LICENSE.nvidia-smi" + ], + "nvidia-l4t-nvsci": [ + "/usr/lib/aarch64-linux-gnu/nvidia/libnvscibuf.so.1", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvscicommon.so.1", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvscievent.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvscistream.so.1", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvscisync.so.1", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvscibuf.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvscicommon.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvscistream.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvscisync.so" + ], + "nvidia-l4t-openwfd": [ + "/usr/lib/aarch64-linux-gnu/nvidia/libnvidia-kms.so.540.4.0", + "/usr/lib/aarch64-linux-gnu/nvidia/libtegrawfd.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvidia-kms.so" + ], + "nvidia-l4t-pva": [ + "/usr/lib/aarch64-linux-gnu/nvidia/libnvpvaintf.so" + ], + "nvidia-l4t-tools": [ + "/usr/lib/aarch64-linux-gnu/nvidia/libnvplayfair.so" + ], + "nvidia-l4t-vulkan-sc": [ + "/usr/lib/aarch64-linux-gnu/nvidia/libnvidia-vksc-core.so.540.4.0", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvidia-vksc-core.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvidia-vksc-core.so.1" + ], + "nvidia-l4t-vulkan-sc-sdk": [ + "/etc/vulkansc/icd.d/nvidia_icd_vksc.json", + "/usr/lib/aarch64-linux-gnu/nvidia/libVkLayer_json_gen.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libVkSCLayer_khronos_validation.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libvulkansc.so.1.0.10", + "/usr/lib/aarch64-linux-gnu/nvidia/libvulkansc.so", + "/usr/lib/aarch64-linux-gnu/nvidia/libvulkansc.so.1" + ], + "nvidia-l4t-wayland": [ + "/usr/lib/aarch64-linux-gnu/nvidia/libnvidia-egl-wayland.so.1.1.11", + "/usr/lib/aarch64-linux-gnu/nvidia/libnvidia-egl-wayland.so.1" + ], + "nvidia-l4t-weston": [ + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/EGLWLInputEventExample", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/EGLWLMockNavigation", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/LayerManagerControl", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/color-lcms.so", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/desktop-shell.so", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/drm-backend.so", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/fullscreen-shell.so", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/gl-renderer.so", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/headless-backend.so", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/hmi-controller.so", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/ivi-controller.so", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/ivi-shell.so", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/libilmClient.so.2.3.2", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/libilmCommon.so.2.3.2", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/libilmControl.so.2.3.2", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/libilmInput.so.2.3.2", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/libweston-13.so.0", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/simple-weston-client", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/spring-tool", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/wayland-backend.so", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-calibrator", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-clickdot", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-cliptest", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-content-protection", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-debug", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-desktop-shell", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-dnd", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-eventdemo", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-flower", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-fullscreen", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-image", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-ivi-shell-user-interface", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-keyboard", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-multi-resource", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-presentation-shm", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-resizor", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-scaler", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-screenshooter", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-simple-damage", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-simple-dmabuf-egl", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-simple-dmabuf-egldevice", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-simple-dmabuf-feedback", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-simple-egl", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-simple-im", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-simple-shm", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-simple-touch", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-smoke", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-stacking", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-subsurfaces", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-tablet", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-terminal", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-touch-calibrator", + "/usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-transformed" + ] +} diff --git a/sourceinfo/r36.4-debs.json b/sourceinfo/r36.4-debs.json new file mode 100644 index 00000000..20b856dc --- /dev/null +++ b/sourceinfo/r36.4-debs.json @@ -0,0 +1,1050 @@ +{ + "common": { + "cuda-cccl-12-6": { + "filename": "pool/main/c/cuda-cccl/cuda-cccl-12-6_12.6.37-1_arm64.deb", + "sha256": "0518e4f42f59d8fcc9081c331cce28b87494f2d66ae3d88a6bec35aa4fdb89d1", + "source": "cuda-cccl", + "version": "12.6.37-1" + }, + "cuda-command-line-tools-12-6": { + "filename": "pool/main/c/cuda-command-line-tools-12-6/cuda-command-line-tools-12-6_12.6.11-1_arm64.deb", + "sha256": "738965465725ee43de9ddec990f8da83dbacc820d6226844b8aaa1930a98daab", + "version": "12.6.11-1" + }, + "cuda-compat-12-6": { + "filename": "pool/main/c/cuda-compat/cuda-compat-12-6_12.6.36890662-1_arm64.deb", + "sha256": "a5bc64122f78abd2e87cf4282803e40ccef3aae4362d1b8ae87914e2970adc4b", + "source": "cuda-compat", + "version": "12.6.36890662-1" + }, + "cuda-compiler-12-6": { + "filename": "pool/main/c/cuda-compiler-12-6/cuda-compiler-12-6_12.6.11-1_arm64.deb", + "sha256": "4fd98aa6971aa57b314475c0acc508ac6e38e1ea3a66288a381d21767594f89a", + "version": "12.6.11-1" + }, + "cuda-crt-12-6": { + "filename": "pool/main/c/cuda-nvcc/cuda-crt-12-6_12.6.68-1_arm64.deb", + "sha256": "b95d26f0e63f113e6e2f5b8578841644de549293679d65c70e112164d2080311", + "source": "cuda-nvcc", + "version": "12.6.68-1" + }, + "cuda-cudart-12-6": { + "filename": "pool/main/c/cuda-cudart/cuda-cudart-12-6_12.6.68-1_arm64.deb", + "sha256": "54456ed3372670d6a6d7e19d5971ec234800fe620dfb822aa751bc7d80f2a516", + "source": "cuda-cudart", + "version": "12.6.68-1" + }, + "cuda-cudart-dev-12-6": { + "filename": "pool/main/c/cuda-cudart/cuda-cudart-dev-12-6_12.6.68-1_arm64.deb", + "sha256": "2ddcaeec93f2c508533f52bea7ad3f339d223d8724537e4695cf14a034b65193", + "source": "cuda-cudart", + "version": "12.6.68-1" + }, + "cuda-cuobjdump-12-6": { + "filename": "pool/main/c/cuda-cuobjdump/cuda-cuobjdump-12-6_12.6.68-1_arm64.deb", + "sha256": "906f876946be37bd67bad65b2a01aad5b1f63e85a1547f13d19c547a8e8ebc10", + "source": "cuda-cuobjdump", + "version": "12.6.68-1" + }, + "cuda-cupti-12-6": { + "filename": "pool/main/c/cuda-cupti/cuda-cupti-12-6_12.6.68-1_arm64.deb", + "sha256": "4458ad07170a0a7f8a8d5864dfa0936bac767d7878a3cd753c3cf50dc1ff631a", + "source": "cuda-cupti", + "version": "12.6.68-1" + }, + "cuda-cupti-dev-12-6": { + "filename": "pool/main/c/cuda-cupti/cuda-cupti-dev-12-6_12.6.68-1_arm64.deb", + "sha256": "aa44c4e149b4ee239a09c03c1fe3617b73157716d6820e2345b8244a3a8fb0d5", + "source": "cuda-cupti", + "version": "12.6.68-1" + }, + "cuda-cuxxfilt-12-6": { + "filename": "pool/main/c/cuda-cuxxfilt/cuda-cuxxfilt-12-6_12.6.68-1_arm64.deb", + "sha256": "abdb3b1f96722e9115a699ae02b795b7d67e127fe879612cbfb65ed86ebd6605", + "source": "cuda-cuxxfilt", + "version": "12.6.68-1" + }, + "cuda-documentation-12-6": { + "filename": "pool/main/c/cuda-documentation/cuda-documentation-12-6_12.6.68-1_arm64.deb", + "sha256": "fa976b3f74f2fbfe0653ad1796d70fc0910950cca6c4b1eae758ddc26c33551e", + "source": "cuda-documentation", + "version": "12.6.68-1" + }, + "cuda-driver-dev-12-6": { + "filename": "pool/main/c/cuda-cudart/cuda-driver-dev-12-6_12.6.68-1_arm64.deb", + "sha256": "0c453507da39a28ca214723c8980c5a4832d8ea3e8f28dfd8ac83a1b2055dda1", + "source": "cuda-cudart", + "version": "12.6.68-1" + }, + "cuda-gdb-12-6": { + "filename": "pool/main/c/cuda-gdb/cuda-gdb-12-6_12.6.68-1_arm64.deb", + "sha256": "db4c0ab18446e05a62c8f001c26327cc76d7988edc850ad1bff0661792d3afe5", + "source": "cuda-gdb", + "version": "12.6.68-1" + }, + "cuda-gdb-src-12-6": { + "filename": "pool/main/c/cuda-gdb/cuda-gdb-src-12-6_12.6.68-1_arm64.deb", + "sha256": "f9f85aaa70c407e8ce25870b88c1a0107451768b40592dd0fb977a5fd117b60f", + "source": "cuda-gdb", + "version": "12.6.68-1" + }, + "cuda-minimal-build-12-6": { + "filename": "pool/main/c/cuda-minimal-build-12-6/cuda-minimal-build-12-6_12.6.11-1_arm64.deb", + "sha256": "9f844ea82e4058b4db229f2c219f1203ac7f457e938547b3d1b156c6142487ad", + "version": "12.6.11-1" + }, + "cuda-nsight-compute-12-6": { + "filename": "pool/main/c/cuda-nsight-compute-12-6/cuda-nsight-compute-12-6_12.6.11-1_arm64.deb", + "sha256": "f165e703e5efc02c94dcda47814458cb118f6655bb7bbc1e550a11784432384c", + "version": "12.6.11-1" + }, + "cuda-nvcc-12-6": { + "filename": "pool/main/c/cuda-nvcc/cuda-nvcc-12-6_12.6.68-1_arm64.deb", + "sha256": "89dbfa6e7f791221f9886de6a32871be825d0001f6c4ac5a8c12229fda39c598", + "source": "cuda-nvcc", + "version": "12.6.68-1" + }, + "cuda-nvdisasm-12-6": { + "filename": "pool/main/c/cuda-nvdisasm/cuda-nvdisasm-12-6_12.6.68-1_arm64.deb", + "sha256": "973580bee9d6bf01ccfe1d2bc8a03437384c0fbf68af785390aa513062dc34b7", + "source": "cuda-nvdisasm", + "version": "12.6.68-1" + }, + "cuda-nvml-dev-12-6": { + "filename": "pool/main/c/cuda-nvml-dev/cuda-nvml-dev-12-6_12.6.68-1_arm64.deb", + "sha256": "2a1050aff1a8297dc1bab6cdce2c35daf47eb6e77412d544b35e809e75f2746b", + "source": "cuda-nvml-dev", + "version": "12.6.68-1" + }, + "cuda-nvprune-12-6": { + "filename": "pool/main/c/cuda-nvprune/cuda-nvprune-12-6_12.6.68-1_arm64.deb", + "sha256": "fe39e03cf8ef59ca1dc5cc88f08c1e615776b0f9a574a770f85863bc6f34a68e", + "source": "cuda-nvprune", + "version": "12.6.68-1" + }, + "cuda-nvrtc-12-6": { + "filename": "pool/main/c/cuda-nvrtc/cuda-nvrtc-12-6_12.6.68-1_arm64.deb", + "sha256": "b8189ac22bb781b1dcccc61a902fb623238cd4e65cf456dcd95f8f319eb346be", + "source": "cuda-nvrtc", + "version": "12.6.68-1" + }, + "cuda-nvrtc-dev-12-6": { + "filename": "pool/main/c/cuda-nvrtc/cuda-nvrtc-dev-12-6_12.6.68-1_arm64.deb", + "sha256": "a0a1596466507b8fb5fa0bfad848ec7c601c927d5f51db72a78135979e5c5423", + "source": "cuda-nvrtc", + "version": "12.6.68-1" + }, + "cuda-nvtx-12-6": { + "filename": "pool/main/c/cuda-nvtx/cuda-nvtx-12-6_12.6.68-1_arm64.deb", + "sha256": "99e06f439b736f8f1a44b7f11326e4eacd8fc1c78258a9ab8b9c2aed7612ca5f", + "source": "cuda-nvtx", + "version": "12.6.68-1" + }, + "cuda-nvvm-12-6": { + "filename": "pool/main/c/cuda-nvcc/cuda-nvvm-12-6_12.6.68-1_arm64.deb", + "sha256": "32ba801d719a593cb35abd4aeb93c672c0a02d47539455b5780c6004f03462cd", + "source": "cuda-nvcc", + "version": "12.6.68-1" + }, + "cuda-profiler-api-12-6": { + "filename": "pool/main/c/cuda-profiler-api/cuda-profiler-api-12-6_12.6.68-1_arm64.deb", + "sha256": "4e695d6e559f453c3e637e594d98c7b8b605a6816920ec0e5f501eda7e32818f", + "source": "cuda-profiler-api", + "version": "12.6.68-1" + }, + "cuda-sanitizer-12-6": { + "filename": "pool/main/c/cuda-sanitizer-api/cuda-sanitizer-12-6_12.6.68-1_arm64.deb", + "sha256": "9003f6266f6169b3c52eb2d5fa7f9114bc98048de9bd8a55f2574d41ebd3bed6", + "source": "cuda-sanitizer-api", + "version": "12.6.68-1" + }, + "cuda-toolkit-12-6-config-common": { + "filename": "pool/main/c/cuda-cudart/cuda-toolkit-12-6-config-common_12.6.68-1_all.deb", + "sha256": "4b3030e33bb2d58010d66ad1380987556906260c1438a47f088be5116b27925b", + "source": "cuda-cudart", + "version": "12.6.68-1" + }, + "cuda-toolkit-12-config-common": { + "filename": "pool/main/c/cuda-cudart/cuda-toolkit-12-config-common_12.6.68-1_all.deb", + "sha256": "b24be39e9f8baa8a44e8a3d787f45f577e50f9de6af5e0b6c3b09a7b7e2edbcc", + "source": "cuda-cudart", + "version": "12.6.68-1" + }, + "cuda-toolkit-config-common": { + "filename": "pool/main/c/cuda-cudart/cuda-toolkit-config-common_12.6.68-1_all.deb", + "sha256": "91b3cfe61d903a401c8ac043712c427042e3829ff2602f3aa594c1a2f25e48e8", + "source": "cuda-cudart", + "version": "12.6.68-1" + }, + "cuda-visual-tools-12-6": { + "filename": "pool/main/c/cuda-visual-tools-12-6/cuda-visual-tools-12-6_12.6.11-1_arm64.deb", + "sha256": "683819036194b788504e3744cbc474ae00b9b7690efbe05c916f20619afadca2", + "version": "12.6.11-1" + }, + "cudnn": { + "filename": "pool/main/c/cudnn/cudnn_9.3.0-1_arm64.deb", + "sha256": "f8a00d1db6857b6111a363338d8b6af7633c48afddda2dcae7feddc9466ff9c3", + "version": "9.3.0-1" + }, + "cudnn9": { + "filename": "pool/main/c/cudnn9/cudnn9_9.3.0-1_arm64.deb", + "sha256": "369ffe743aa3944221e1a7ddd643db5e797134383112a8171401bf1638f17c1f", + "version": "9.3.0-1" + }, + "cudnn9-cuda-12": { + "filename": "pool/main/c/cudnn/cudnn9-cuda-12_9.3.0.75-1_arm64.deb", + "sha256": "74e53ba6529de035acde125fc3c3ff511697f0e31a4e0fde5518f61986715aaa", + "source": "cudnn", + "version": "9.3.0.75-1" + }, + "cudnn9-cuda-12-6": { + "filename": "pool/main/c/cudnn/cudnn9-cuda-12-6_9.3.0.75-1_arm64.deb", + "sha256": "1af20b49dd7357d22b41ab8e8e20ce8cf0aeea76b81fe9516eeafa7ef673eb2c", + "source": "cudnn", + "version": "9.3.0.75-1" + }, + "cupva-2.5-l4t": { + "filename": "pool/main/c/cupva-2.5-l4t/cupva-2.5-l4t_2.5.3_arm64.deb", + "sha256": "c3729a78a6a03ce97ae988d808f8c1b6f36f1637b6662a22a8f0d5d37f334aca", + "version": "2.5.3" + }, + "deepstream-7.1": { + "filename": "pool/main/d/deepstream-7.1/deepstream-7.1_7.1.0-1_arm64.deb", + "sha256": "8cc657e4784108c1a17da9bb8fbf736bc2ae4017065bb493486548c274465ca4", + "version": "7.1.0-1" + }, + "gds-tools-12-6": { + "filename": "pool/main/libc/libcufile/gds-tools-12-6_1.11.1.6-1_arm64.deb", + "sha256": "539b7576f57ab08e24000529222c658d91f544999f3263ba9a5a47dd13ea620b", + "source": "libcufile", + "version": "1.11.1.6-1" + }, + "holoscan": { + "filename": "pool/main/h/holoscan/holoscan_3.1.0.3-1_arm64.deb", + "sha256": "92391427eaada1bfc62a390e2372b4a34136a2d99900a294091f896d0831e99e", + "version": "3.1.0.3-1" + }, + "libcublas-12-6": { + "filename": "pool/main/libc/libcublas/libcublas-12-6_12.6.1.4-1_arm64.deb", + "sha256": "3ff5d9c20e8cf1b8fd36841271846f2d2de23aaca9bf2e9213d5dac8e6488693", + "source": "libcublas", + "version": "12.6.1.4-1" + }, + "libcublas-dev-12-6": { + "filename": "pool/main/libc/libcublas/libcublas-dev-12-6_12.6.1.4-1_arm64.deb", + "sha256": "8125eeb5502d569a19f8bf8c54fd455c2a4a722f3c571e02bfe8c6bdd3d6e800", + "source": "libcublas", + "version": "12.6.1.4-1" + }, + "libcudla-12-6": { + "filename": "pool/main/libc/libcudla/libcudla-12-6_12.6.68-1_arm64.deb", + "sha256": "bc14ff94b6211e7536b54faa6a7f38bb67a919671869c22d13b2bcae2146887c", + "source": "libcudla", + "version": "12.6.68-1" + }, + "libcudla-dev-12-6": { + "filename": "pool/main/libc/libcudla/libcudla-dev-12-6_12.6.68-1_arm64.deb", + "sha256": "1327073641f9ba48603338c271095940ca685997e22eda0583202733ad0800ba", + "source": "libcudla", + "version": "12.6.68-1" + }, + "libcudnn9-cuda-12": { + "filename": "pool/main/c/cudnn/libcudnn9-cuda-12_9.3.0.75-1_arm64.deb", + "sha256": "0f3a869f4b9f5c20912acfb043c911f210304a554de27c71346638ac73c96377", + "source": "cudnn", + "version": "9.3.0.75-1" + }, + "libcudnn9-dev-cuda-12": { + "filename": "pool/main/c/cudnn/libcudnn9-dev-cuda-12_9.3.0.75-1_arm64.deb", + "sha256": "749c910beca1b32216a0dbb2705aac261c3180437eb69922cb70932c2315ceff", + "source": "cudnn", + "version": "9.3.0.75-1" + }, + "libcudnn9-samples": { + "filename": "pool/main/c/cudnn-samples/libcudnn9-samples_9.3.0.75-1_all.deb", + "sha256": "d823a34d283bc12416e1a3606be83f50ee75d6ad59ae206a4ed037f60c79e215", + "source": "cudnn-samples", + "version": "9.3.0.75-1" + }, + "libcudnn9-static-cuda-12": { + "filename": "pool/main/c/cudnn/libcudnn9-static-cuda-12_9.3.0.75-1_arm64.deb", + "sha256": "8f951856fedc3b890b56109917e2877413c5c49a2d2cb81a4dd4d30269d2d565", + "source": "cudnn", + "version": "9.3.0.75-1" + }, + "libcufft-12-6": { + "filename": "pool/main/libc/libcufft/libcufft-12-6_11.2.6.59-1_arm64.deb", + "sha256": "68c95fdae59bde441a6ea9fc7d94eebb064f50e41fc51c4aeb4175cf098705e7", + "source": "libcufft", + "version": "11.2.6.59-1" + }, + "libcufft-dev-12-6": { + "filename": "pool/main/libc/libcufft/libcufft-dev-12-6_11.2.6.59-1_arm64.deb", + "sha256": "e4322f0712961be4b4bba58015e28dde0c30224cad27561cc73d4756463531f4", + "source": "libcufft", + "version": "11.2.6.59-1" + }, + "libcufile-12-6": { + "filename": "pool/main/libc/libcufile/libcufile-12-6_1.11.1.6-1_arm64.deb", + "sha256": "d48aadaf52731f2e058a976581e55f0ad18a24dafb020a1324a8c7a293cba5ef", + "source": "libcufile", + "version": "1.11.1.6-1" + }, + "libcufile-dev-12-6": { + "filename": "pool/main/libc/libcufile/libcufile-dev-12-6_1.11.1.6-1_arm64.deb", + "sha256": "a8e59753cab9e361454df3d4408b589e36659fe074ddb249ba6f36a2bfbeeaf7", + "source": "libcufile", + "version": "1.11.1.6-1" + }, + "libcurand-12-6": { + "filename": "pool/main/libc/libcurand/libcurand-12-6_10.3.7.68-1_arm64.deb", + "sha256": "7b8e1c2ce01db9539e92439859b3fb72ca95ff9da4424c9b8cd711934e7c7265", + "source": "libcurand", + "version": "10.3.7.68-1" + }, + "libcurand-dev-12-6": { + "filename": "pool/main/libc/libcurand/libcurand-dev-12-6_10.3.7.68-1_arm64.deb", + "sha256": "cee52e65f17de85e798130a7a201e3eb8cc127586f636aac6f145db91a00fb9d", + "source": "libcurand", + "version": "10.3.7.68-1" + }, + "libcusolver-12-6": { + "filename": "pool/main/libc/libcusolver/libcusolver-12-6_11.6.4.69-1_arm64.deb", + "sha256": "c4301dc5e91369e3eefd326f4552febdf7daceb232712c72b8094f8b92809fdd", + "source": "libcusolver", + "version": "11.6.4.69-1" + }, + "libcusolver-dev-12-6": { + "filename": "pool/main/libc/libcusolver/libcusolver-dev-12-6_11.6.4.69-1_arm64.deb", + "sha256": "e58aca1de60ae405e597e1b4c748372c230416b53067afbc4841dc4d80530fd2", + "source": "libcusolver", + "version": "11.6.4.69-1" + }, + "libcusparse-12-6": { + "filename": "pool/main/libc/libcusparse/libcusparse-12-6_12.5.3.3-1_arm64.deb", + "sha256": "c665700c6aae6a4aace16a7b1ff833fd73850a6fdafb41ed04f2e328a2769b9b", + "source": "libcusparse", + "version": "12.5.3.3-1" + }, + "libcusparse-dev-12-6": { + "filename": "pool/main/libc/libcusparse/libcusparse-dev-12-6_12.5.3.3-1_arm64.deb", + "sha256": "e7f4a85c4fcd99c236be4c336db1a6f985168a98bd8f1e94609e8db9232560cc", + "source": "libcusparse", + "version": "12.5.3.3-1" + }, + "libnpp-12-6": { + "filename": "pool/main/libn/libnpp/libnpp-12-6_12.3.1.54-1_arm64.deb", + "sha256": "65284b80a1fdbfe7fe3ee4e53720a71e4496df37b4702b5a2559f4bc15614b0f", + "source": "libnpp", + "version": "12.3.1.54-1" + }, + "libnpp-dev-12-6": { + "filename": "pool/main/libn/libnpp/libnpp-dev-12-6_12.3.1.54-1_arm64.deb", + "sha256": "7ca13092a34005bda3b82a8e61a156dee2b0c04c729d265501a1d2827783a258", + "source": "libnpp", + "version": "12.3.1.54-1" + }, + "libnvfatbin-12-6": { + "filename": "pool/main/libn/libnvfatbin/libnvfatbin-12-6_12.6.68-1_arm64.deb", + "sha256": "2dd434eafdb320bcc59465abb1eafa951fdd57ddd00afc4b1b5f1e2082d12330", + "source": "libnvfatbin", + "version": "12.6.68-1" + }, + "libnvfatbin-dev-12-6": { + "filename": "pool/main/libn/libnvfatbin/libnvfatbin-dev-12-6_12.6.68-1_arm64.deb", + "sha256": "925e2735799bfdcd3c36e2b4005d013fd0bffe4113d7f3142f1a624a5c31d8e1", + "source": "libnvfatbin", + "version": "12.6.68-1" + }, + "libnvidia-container-tools": { + "filename": "pool/main/libn/libnvidia-container/libnvidia-container-tools_1.16.2-1_arm64.deb", + "sha256": "0b990ba7af550022cbf9ac95cc72fe988b2116147835f9ac56cf6b605cae1b36", + "source": "libnvidia-container", + "version": "1.16.2-1" + }, + "libnvidia-container1": { + "filename": "pool/main/libn/libnvidia-container/libnvidia-container1_1.16.2-1_arm64.deb", + "sha256": "69e47c18ee26640af03d3f2d64380707995e27bc0abaad9b3c12e4c8751ec2c7", + "source": "libnvidia-container", + "version": "1.16.2-1" + }, + "libnvinfer-bin": { + "filename": "pool/main/t/tensorrt/libnvinfer-bin_10.3.0.30-1+cuda12.5_arm64.deb", + "sha256": "98494de17fc6596475141fa342ab34ce05f6c19d34769cf686628e16398484b7", + "source": "tensorrt", + "version": "10.3.0.30-1+cuda12.5" + }, + "libnvinfer-dev": { + "filename": "pool/main/t/tensorrt/libnvinfer-dev_10.3.0.30-1+cuda12.5_arm64.deb", + "sha256": "b24b0c9d09fda80b2b9d4fdee6f02deb513e3f876f94e4119caa538a68964e15", + "source": "tensorrt", + "version": "10.3.0.30-1+cuda12.5" + }, + "libnvinfer-dispatch-dev": { + "filename": "pool/main/t/tensorrt/libnvinfer-dispatch-dev_10.3.0.30-1+cuda12.5_arm64.deb", + "sha256": "a87c324e438bcc669c86c7e959ba9fb6827cd0d3122a1d730b2224f7ca82c91a", + "source": "tensorrt", + "version": "10.3.0.30-1+cuda12.5" + }, + "libnvinfer-dispatch10": { + "filename": "pool/main/t/tensorrt/libnvinfer-dispatch10_10.3.0.30-1+cuda12.5_arm64.deb", + "sha256": "0a39d0e37017d677ee05e122ae3bad500e7d819c4c11ea3c92197dcc62e322bc", + "source": "tensorrt", + "version": "10.3.0.30-1+cuda12.5" + }, + "libnvinfer-headers-dev": { + "filename": "pool/main/t/tensorrt/libnvinfer-headers-dev_10.3.0.30-1+cuda12.5_arm64.deb", + "sha256": "40a4fa566218f71176144a0eafa5aef8cf0af7ee9211b20487f1970d5344bbb8", + "source": "tensorrt", + "version": "10.3.0.30-1+cuda12.5" + }, + "libnvinfer-headers-plugin-dev": { + "filename": "pool/main/t/tensorrt/libnvinfer-headers-plugin-dev_10.3.0.30-1+cuda12.5_arm64.deb", + "sha256": "ce43de06fdcaa65bb11378df10973bf726aa1c83f0ee53709d53b5b8c5a2d09f", + "source": "tensorrt", + "version": "10.3.0.30-1+cuda12.5" + }, + "libnvinfer-lean-dev": { + "filename": "pool/main/t/tensorrt/libnvinfer-lean-dev_10.3.0.30-1+cuda12.5_arm64.deb", + "sha256": "3c8bba2c5a5fdac9e57ac13490ca42eb79ae9caf8ca1a07bd94a9f7ed10d370b", + "source": "tensorrt", + "version": "10.3.0.30-1+cuda12.5" + }, + "libnvinfer-lean10": { + "filename": "pool/main/t/tensorrt/libnvinfer-lean10_10.3.0.30-1+cuda12.5_arm64.deb", + "sha256": "27e2d97fd79f1a0a6f864d6a2ec234be72c173f48dbfa8788b38e89df49261de", + "source": "tensorrt", + "version": "10.3.0.30-1+cuda12.5" + }, + "libnvinfer-plugin-dev": { + "filename": "pool/main/t/tensorrt/libnvinfer-plugin-dev_10.3.0.30-1+cuda12.5_arm64.deb", + "sha256": "d61e98f8f477143a5a211bc01b3f240875700af591cc117b77af44f18433a941", + "source": "tensorrt", + "version": "10.3.0.30-1+cuda12.5" + }, + "libnvinfer-plugin10": { + "filename": "pool/main/t/tensorrt/libnvinfer-plugin10_10.3.0.30-1+cuda12.5_arm64.deb", + "sha256": "709a8b3111e4d5966abaa806de3282c59586e175f3db9898f3f2a3bf93a5886b", + "source": "tensorrt", + "version": "10.3.0.30-1+cuda12.5" + }, + "libnvinfer-samples": { + "filename": "pool/main/t/tensorrt/libnvinfer-samples_10.3.0.30-1+cuda12.5_all.deb", + "sha256": "57a3633cf1242a157138395da3e57ead9bcf1fc15c5653ad5422b1bd7a80aae0", + "source": "tensorrt", + "version": "10.3.0.30-1+cuda12.5" + }, + "libnvinfer-vc-plugin-dev": { + "filename": "pool/main/t/tensorrt/libnvinfer-vc-plugin-dev_10.3.0.30-1+cuda12.5_arm64.deb", + "sha256": "86bc05dc389a94146c698e175505c7ca6b45d54d87f08865caf39fa92d0771c9", + "source": "tensorrt", + "version": "10.3.0.30-1+cuda12.5" + }, + "libnvinfer-vc-plugin10": { + "filename": "pool/main/t/tensorrt/libnvinfer-vc-plugin10_10.3.0.30-1+cuda12.5_arm64.deb", + "sha256": "318238a61b8a434ed54d148c05b31bebca0ad072657721a596190177fc1306d5", + "source": "tensorrt", + "version": "10.3.0.30-1+cuda12.5" + }, + "libnvinfer10": { + "filename": "pool/main/t/tensorrt/libnvinfer10_10.3.0.30-1+cuda12.5_arm64.deb", + "sha256": "fabaad3ac8a50cf25da83a25938844808be4a3a43c2e76ea0b70b9cd2c6234bc", + "source": "tensorrt", + "version": "10.3.0.30-1+cuda12.5" + }, + "libnvjitlink-12-6": { + "filename": "pool/main/libn/libnvjitlink/libnvjitlink-12-6_12.6.68-1_arm64.deb", + "sha256": "98c811d3fa81a1e55cc6c4fe3dc4fa0cb3b10a26b7ed23341418333b65b832a0", + "source": "libnvjitlink", + "version": "12.6.68-1" + }, + "libnvjitlink-dev-12-6": { + "filename": "pool/main/libn/libnvjitlink/libnvjitlink-dev-12-6_12.6.68-1_arm64.deb", + "sha256": "c97e77cef8833c13207ddaed119201434b643267be7c08f7e7f735467f7ec15b", + "source": "libnvjitlink", + "version": "12.6.68-1" + }, + "libnvjpeg-12-6": { + "filename": "pool/main/libn/libnvjpeg/libnvjpeg-12-6_12.3.3.54-1_arm64.deb", + "sha256": "0658635943cb77024c03990a9df0fd2543e4352377dff7b5a8654a87c4a54387", + "source": "libnvjpeg", + "version": "12.3.3.54-1" + }, + "libnvjpeg-dev-12-6": { + "filename": "pool/main/libn/libnvjpeg/libnvjpeg-dev-12-6_12.3.3.54-1_arm64.deb", + "sha256": "6414bacf8dcd7da1256a5251c32d1fa22d56c378dabc337d1a56d90eba631502", + "source": "libnvjpeg", + "version": "12.3.3.54-1" + }, + "libnvonnxparsers-dev": { + "filename": "pool/main/t/tensorrt/libnvonnxparsers-dev_10.3.0.30-1+cuda12.5_arm64.deb", + "sha256": "8a6675f3d444dead0e0430fb4e7e6b546af9d9a72414ee8964b18edf1fb28756", + "source": "tensorrt", + "version": "10.3.0.30-1+cuda12.5" + }, + "libnvonnxparsers10": { + "filename": "pool/main/t/tensorrt/libnvonnxparsers10_10.3.0.30-1+cuda12.5_arm64.deb", + "sha256": "042e21f28a271934d3c497504b41533e25f044893474e7567e3042e803384950", + "source": "tensorrt", + "version": "10.3.0.30-1+cuda12.5" + }, + "libnvvpi3": { + "filename": "pool/main/libn/libnvvpi3/libnvvpi3_3.2.4_arm64.deb", + "sha256": "5589eac155bba4a2f881963bb4e3c4cd06c7fc0fa12cb6d73196dca496daab1b", + "version": "3.2.4" + }, + "libopencv": { + "filename": "pool/main/libo/libopencv/libopencv_4.8.0-1-g6371ee1_arm64.deb", + "sha256": "a43ac2a2f1fa7579fe526314bf04692ed6eca05ceb49447486e3ed46c3c85b67", + "version": "4.8.0-1-g6371ee1" + }, + "libopencv-dev": { + "filename": "pool/main/libo/libopencv-dev/libopencv-dev_4.8.0-1-g6371ee1_arm64.deb", + "sha256": "09ad91e63b38fa432fb77b7a34ea956e4ac6c9a7d7ae00ad3a74591604ac1385", + "version": "4.8.0-1-g6371ee1" + }, + "libopencv-python": { + "filename": "pool/main/libo/libopencv-python/libopencv-python_4.8.0-1-g6371ee1_arm64.deb", + "sha256": "739463b0755bc29deac458ad01948700d0e6680788a22eeda919bc44b3b43406", + "version": "4.8.0-1-g6371ee1" + }, + "libopencv-samples": { + "filename": "pool/main/libo/libopencv-samples/libopencv-samples_4.8.0-1-g6371ee1_arm64.deb", + "sha256": "0dd890d6a410f1c7a3ca550c56685d8c4d26e6289827b314830141d49f7a4c08", + "version": "4.8.0-1-g6371ee1" + }, + "nsight-compute-2024.3.1": { + "filename": "pool/main/n/nsight-compute/nsight-compute-2024.3.1_2024.3.1.2-1_arm64.deb", + "sha256": "3907dce2827a6237648041d07968a75574e92b6cc9419ffacc44f41bf8c6cf47", + "source": "nsight-compute", + "version": "2024.3.1.2-1" + }, + "nsight-graphics-for-embeddedlinux-2024.2.0.0": { + "filename": "pool/main/n/nsight-graphics-for-embeddedlinux-2024.2.0.0/nsight-graphics-for-embeddedlinux-2024.2.0.0_2024.2.0.0_arm64.deb", + "sha256": "90ec132d56a3852a619693765e7473a34e007fdcb16d594cf99147083a972b17", + "version": "2024.2.0.0" + }, + "nsight-systems-2024.5.4": { + "filename": "pool/main/n/nsight-systems-2024.5.4/nsight-systems-2024.5.4_2024.5.4.34-245434855735v0_arm64.deb", + "sha256": "404b1d921366d94f60a027298523e295c5484ee6f6e3b8a27da304ad4fd92bad", + "version": "2024.5.4.34-245434855735v0" + }, + "nvidia-container": { + "filename": "pool/main/n/nvidia-container/nvidia-container_6.2+b77_arm64.deb", + "sha256": "98fecb14ed28fbb996bef93417448f476bdfb23ba408a2e4a0f46b7506a2cc3f", + "source": "nvidia-container (6.2)", + "version": "6.2+b77" + }, + "nvidia-container-toolkit": { + "filename": "pool/main/n/nvidia-container-toolkit/nvidia-container-toolkit_1.16.2-1_arm64.deb", + "sha256": "6bfca25bc5ea329fcc76897cef85371a85c50f714849666313332085069e8bb3", + "version": "1.16.2-1" + }, + "nvidia-container-toolkit-base": { + "filename": "pool/main/n/nvidia-container-toolkit/nvidia-container-toolkit-base_1.16.2-1_arm64.deb", + "sha256": "9f4db184a9ee96527e90d073ca32ab8baf199904066a90f49f01c6425f9ea79b", + "source": "nvidia-container-toolkit", + "version": "1.16.2-1" + }, + "nvidia-cuda": { + "filename": "pool/main/n/nvidia-cuda/nvidia-cuda_6.2+b77_arm64.deb", + "sha256": "dd5d3988f90c98bd2c7245e861543b30ced32cbb6c5699b80277ef000e1e961f", + "source": "nvidia-cuda (6.2)", + "version": "6.2+b77" + }, + "nvidia-cuda-dev": { + "filename": "pool/main/n/nvidia-cuda-dev/nvidia-cuda-dev_6.2+b77_arm64.deb", + "sha256": "a6ae7674c7023bef23d6667e19e4a506aa437747ee84f3dfad4a46483c4d07a5", + "source": "nvidia-cuda-dev (6.2)", + "version": "6.2+b77" + }, + "nvidia-cudnn": { + "filename": "pool/main/n/nvidia-cudnn/nvidia-cudnn_6.2+b77_arm64.deb", + "sha256": "e601adc982347f47d101800733eb912fafe0bad9bb6a3fb1942029cdc90cb34b", + "source": "nvidia-cudnn (6.2)", + "version": "6.2+b77" + }, + "nvidia-cudnn-dev": { + "filename": "pool/main/n/nvidia-cudnn-dev/nvidia-cudnn-dev_6.2+b77_arm64.deb", + "sha256": "9c7bb98e9abbee27af604034e4f59714ba473b2117a29cc54897a172c0698002", + "source": "nvidia-cudnn-dev (6.2)", + "version": "6.2+b77" + }, + "nvidia-cudnn9": { + "filename": "pool/main/n/nvidia-cudnn9/nvidia-cudnn9_6.1+b123_arm64.deb", + "sha256": "7685bd77097d574f0859c6728d7723755afc632fbcb6a67e2792961deca258c8", + "source": "nvidia-cudnn9 (6.1)", + "version": "6.1+b123" + }, + "nvidia-cudnn9-dev": { + "filename": "pool/main/n/nvidia-cudnn9-dev/nvidia-cudnn9-dev_6.1+b123_arm64.deb", + "sha256": "c45f5804e2457cb9b9166be0423431616d31754e1ef6a6a4bf5c7f11ad0af265", + "source": "nvidia-cudnn9-dev (6.1)", + "version": "6.1+b123" + }, + "nvidia-cupva": { + "filename": "pool/main/n/nvidia-cupva/nvidia-cupva_6.2+b77_arm64.deb", + "sha256": "8fa7efda033485080fb48f9013ff8c3ac2dd19f5d11d29bc206ac95eea28a699", + "source": "nvidia-cupva (6.2)", + "version": "6.2+b77" + }, + "nvidia-fs": { + "filename": "pool/main/n/nvidia-fs/nvidia-fs_2.22.3-1_arm64.deb", + "sha256": "c419c5c83dfaf152c98e1d5ba932adf5d022ce9d5505392bc59c66f7f1a83795", + "version": "2.22.3-1" + }, + "nvidia-fs-dkms": { + "filename": "pool/main/n/nvidia-fs/nvidia-fs-dkms_2.22.3-1_arm64.deb", + "sha256": "e8d20736c14058cb96045b50723130d0429c0e7f606bdcf44e0bced3aff2dd52", + "source": "nvidia-fs", + "version": "2.22.3-1" + }, + "nvidia-jetpack": { + "filename": "pool/main/n/nvidia-jetpack/nvidia-jetpack_6.2+b77_arm64.deb", + "sha256": "70553d4b5a802057f9436677ef8ce255db386fd3b5d24ff2c0a8ec0e485c59cd", + "source": "nvidia-jetpack (6.2)", + "version": "6.2+b77" + }, + "nvidia-jetpack-dev": { + "filename": "pool/main/n/nvidia-jetpack-dev/nvidia-jetpack-dev_6.2+b77_arm64.deb", + "sha256": "12404f223cb9b89a46a0dd3bf356a97f99146c4f1b3a596ae5add6f6b319168c", + "source": "nvidia-jetpack-dev (6.2)", + "version": "6.2+b77" + }, + "nvidia-jetpack-runtime": { + "filename": "pool/main/n/nvidia-jetpack-runtime/nvidia-jetpack-runtime_6.2+b77_arm64.deb", + "sha256": "77925ca1dd17d63bd690e512338bb65d7ae23847c12f1f1517116c3709acbecf", + "source": "nvidia-jetpack-runtime (6.2)", + "version": "6.2+b77" + }, + "nvidia-jetson-services": { + "filename": "pool/main/n/nvidia-jetson-services/nvidia-jetson-services_2.0.0_arm64.deb", + "sha256": "a38fb40c62e58f6831673602a44df73ad2da14937d0bd7fc80e6536bddd731eb", + "version": "2.0.0" + }, + "nvidia-l4t-cudadebuggingsupport": { + "filename": "pool/main/n/nvidia-l4t-cudadebuggingsupport/nvidia-l4t-cudadebuggingsupport_12.6-34622040.0_arm64.deb", + "sha256": "72c11a87ce3f741d2218957eb842d8a6061ca650ae0defc367ed322fffc45c46", + "version": "12.6-34622040.0" + }, + "nvidia-l4t-dla-compiler": { + "filename": "pool/main/n/nvidia-l4t-dla-compiler/nvidia-l4t-dla-compiler_36.4.3-20250107174145_arm64.deb", + "sha256": "928170c9e743257c063c235a610473cfec4be917a36f91a61a890ba2bfc47c94", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-gstreamer": { + "filename": "pool/main/n/nvidia-l4t-gstreamer/nvidia-l4t-gstreamer_36.4.3-20250107174145_arm64.deb", + "sha256": "93dbd3dc122b7181ab0a2573024dac972dd53c185830fcf1559b4d2b21870cb0", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-jetson-multimedia-api": { + "filename": "pool/main/n/nvidia-l4t-jetson-multimedia-api/nvidia-l4t-jetson-multimedia-api_36.4.3-20250107174145_arm64.deb", + "sha256": "c82bb071be5d8b87ab25ba3a57fab7d758e5aab5a538709fd70e911364eeb162", + "version": "36.4.3-20250107174145" + }, + "nvidia-nsight-graphics": { + "filename": "pool/main/n/nvidia-nsight-graphics/nvidia-nsight-graphics_6.2+b77_arm64.deb", + "sha256": "0b1023c6240c68c04a2d0654d88fb7ae3d6dc09f67bebbc437946e6f3bd29ea7", + "source": "nvidia-nsight-graphics (6.2)", + "version": "6.2+b77" + }, + "nvidia-nsight-systems": { + "filename": "pool/main/n/nvidia-nsight-systems/nvidia-nsight-systems_6.2+b77_arm64.deb", + "sha256": "7f1d2457ed15863bfdcd69f937e4a2a1a3b4d071863e1cd0ee5ac7353378af3c", + "source": "nvidia-nsight-systems (6.2)", + "version": "6.2+b77" + }, + "nvidia-opencv": { + "filename": "pool/main/n/nvidia-opencv/nvidia-opencv_6.2+b77_arm64.deb", + "sha256": "9202e589895d0ee3a22ed9ae9f936332a06672d9ecc74ae84e2651d1f1286c67", + "source": "nvidia-opencv (6.2)", + "version": "6.2+b77" + }, + "nvidia-opencv-dev": { + "filename": "pool/main/n/nvidia-opencv-dev/nvidia-opencv-dev_6.2+b77_arm64.deb", + "sha256": "2672d6789d4c5a827717da36eed86afb0aaa097fbd66b1e70dfa722a293b585c", + "source": "nvidia-opencv-dev (6.2)", + "version": "6.2+b77" + }, + "nvidia-tensorrt": { + "filename": "pool/main/n/nvidia-tensorrt/nvidia-tensorrt_6.2+b77_arm64.deb", + "sha256": "37b467e801f4d593cf34bfd4ea880f9c9c72a2e31bce740a41a909199672e772", + "source": "nvidia-tensorrt (6.2)", + "version": "6.2+b77" + }, + "nvidia-tensorrt-dev": { + "filename": "pool/main/n/nvidia-tensorrt-dev/nvidia-tensorrt-dev_6.2+b77_arm64.deb", + "sha256": "11d5af33ae0507960ade0d4c2064822ad3da9e0f5aec087ba7e273a5d29daf60", + "source": "nvidia-tensorrt-dev (6.2)", + "version": "6.2+b77" + }, + "nvidia-vpi": { + "filename": "pool/main/n/nvidia-vpi/nvidia-vpi_6.2+b77_arm64.deb", + "sha256": "32e45260df83668f46925568d0ed4a4cf08eccfe14c9322e9bd122a335048897", + "source": "nvidia-vpi (6.2)", + "version": "6.2+b77" + }, + "nvidia-vpi-dev": { + "filename": "pool/main/n/nvidia-vpi-dev/nvidia-vpi-dev_6.2+b77_arm64.deb", + "sha256": "5845e2e1db5ef3bbca22f1f7036b01c8cb9ff34256983cc59efad47e97ce3131", + "source": "nvidia-vpi-dev (6.2)", + "version": "6.2+b77" + }, + "opencv-licenses": { + "filename": "pool/main/o/opencv-licenses/opencv-licenses_4.8.0-1-g6371ee1_arm64.deb", + "sha256": "9886503d64761eb5dc7eac0e2072ac91516a39fec2832c3e868787a8377873ee", + "version": "4.8.0-1-g6371ee1" + }, + "opencv-samples-data": { + "filename": "pool/main/o/opencv-samples-data/opencv-samples-data_4.8.0-1-g6371ee1_arm64.deb", + "sha256": "9e506af34a7b2a1583828365663521c80ed4a071892b23513f8e3f899db9b662", + "version": "4.8.0-1-g6371ee1" + }, + "pva-allow-2": { + "filename": "pool/main/p/pva-allow-2/pva-allow-2_2.0.5_all.deb", + "sha256": "cc20598f9076fdb9fba176c1e55c2065276236ba0a64305f1b9da94b98e4c301", + "version": "2.0.5" + }, + "pva-sdk-2.5-l4t": { + "filename": "pool/main/p/pva-sdk-2.5-l4t/pva-sdk-2.5-l4t_2.5.4_arm64.deb", + "sha256": "7a0b94aee7154753392c3b224ebd30f667046289255a574b760636e63242cb7a", + "version": "2.5.4" + }, + "python3-libnvinfer": { + "filename": "pool/main/t/tensorrt/python3-libnvinfer_10.3.0.30-1+cuda12.5_arm64.deb", + "sha256": "d2b7d6e9755e7dc470c1bdb2a5564c0916989ae6a4b4063a1cbfc2510b644a6d", + "source": "tensorrt", + "version": "10.3.0.30-1+cuda12.5" + }, + "python3-libnvinfer-dev": { + "filename": "pool/main/t/tensorrt/python3-libnvinfer-dev_10.3.0.30-1+cuda12.5_arm64.deb", + "sha256": "a94bda70a4e6e28aee0dece0ea72dc76193cce7116e0365b394c1b42f54cedd3", + "source": "tensorrt", + "version": "10.3.0.30-1+cuda12.5" + }, + "python3-libnvinfer-dispatch": { + "filename": "pool/main/t/tensorrt/python3-libnvinfer-dispatch_10.3.0.30-1+cuda12.5_arm64.deb", + "sha256": "b2c8b7b5e37953d8b30e8993d99ef0e89ffdafdc71c2249e1f7b34ce5c592002", + "source": "tensorrt", + "version": "10.3.0.30-1+cuda12.5" + }, + "python3-libnvinfer-lean": { + "filename": "pool/main/t/tensorrt/python3-libnvinfer-lean_10.3.0.30-1+cuda12.5_arm64.deb", + "sha256": "521d353e2fa1e3ba1d2735b724218a1d2296e180c73a1879bcc3985dddd2bd06", + "source": "tensorrt", + "version": "10.3.0.30-1+cuda12.5" + }, + "python3.10-vpi3": { + "filename": "pool/main/p/python3.10-vpi3/python3.10-vpi3_3.2.4_arm64.deb", + "sha256": "5287483f97ff1c0ea734957f2a16e2b27f1e81b8bc634d69dfdcf73662fd4d26", + "version": "3.2.4" + }, + "tensorrt": { + "filename": "pool/main/t/tensorrt/tensorrt_10.3.0.30-1+cuda12.5_arm64.deb", + "sha256": "5185fc2cb820d2adbcd42374d341002b5ebc105321e12d1ad6d25855c23d39fd", + "version": "10.3.0.30-1+cuda12.5" + }, + "tensorrt-dev": { + "filename": "pool/main/t/tensorrt/tensorrt-dev_10.3.0.30-1+cuda12.5_arm64.deb", + "sha256": "2f1ddc135b31d7bc065131097196fd25e79305c25863a87d37c7c7e5dfc47434", + "source": "tensorrt", + "version": "10.3.0.30-1+cuda12.5" + }, + "tensorrt-libs": { + "filename": "pool/main/t/tensorrt/tensorrt-libs_10.3.0.30-1+cuda12.5_arm64.deb", + "sha256": "9804a2640442eef173b6f6fae6acd2729ddc40d4ed8f31a0beaaec859616d95b", + "source": "tensorrt", + "version": "10.3.0.30-1+cuda12.5" + }, + "vpi3-dev": { + "filename": "pool/main/v/vpi3-dev/vpi3-dev_3.2.4_arm64.deb", + "sha256": "6425dbf2c0fc00b2ab5b323c3834bda52edad7101d80176b0385c2a1d0e63ce8", + "version": "3.2.4" + }, + "vpi3-python-src": { + "filename": "pool/main/v/vpi3-python-src/vpi3-python-src_3.2.4_arm64.deb", + "sha256": "7e4962fa3a45214b82d1c09a7747e7ec2e0bc2cd57183f1aa8d4b4dbdbc22dc2", + "version": "3.2.4" + }, + "vpi3-samples": { + "filename": "pool/main/v/vpi3-samples/vpi3-samples_3.2.4_arm64.deb", + "sha256": "e7850f6675856507b5064c23315934a025e811ebf1264f059670730e45885eec", + "version": "3.2.4" + } + }, + "t234": { + "jetson-gpio-common": { + "filename": "pool/main/j/jetson-gpio/jetson-gpio-common_2.1.7ubuntu1_arm64.deb", + "sha256": "a378148c985c1e7853ff4c14b84b3db0757ffe96adf3f5c6efc2a326e30a0be5", + "source": "jetson-gpio", + "version": "2.1.7ubuntu1" + }, + "nvidia-igx-bootloader": { + "filename": "pool/main/n/nvidia-igx-bootloader/nvidia-igx-bootloader_36.4.3-20250107174145_arm64.deb", + "sha256": "54458be75ab032b41fbfc39f3719788d33e5be622bbd4c345bf80472a07f72a4", + "version": "36.4.3-20250107174145" + }, + "nvidia-igx-oem-config": { + "filename": "pool/main/n/nvidia-igx-oem-config/nvidia-igx-oem-config_36.4.3-20250107174145_arm64.deb", + "sha256": "702c40a7c9515b7f00eaae4e9126a0f6373e49b3fdd654fcd64f912448506f1b", + "version": "36.4.3-20250107174145" + }, + "nvidia-igx-systemd-reboot-hooks": { + "filename": "pool/main/n/nvidia-igx-systemd-reboot-hooks/nvidia-igx-systemd-reboot-hooks_36.4.3-20250107174145_arm64.deb", + "sha256": "6f8b59f00ee60d16a2230562faa06f2e96e956e9909e723d36233737e411b137", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-3d-core": { + "filename": "pool/main/n/nvidia-l4t-3d-core/nvidia-l4t-3d-core_36.4.3-20250107174145_arm64.deb", + "sha256": "ab19b524f942b35d21cc7893cf5b8a5d0a4007614e88c27dd85e2668a537cc5c", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-apt-source": { + "filename": "pool/main/n/nvidia-l4t-apt-source/nvidia-l4t-apt-source_36.4.3-20250107174145_arm64.deb", + "sha256": "f058ce7827bcab8efceec57f36deea1e0d07cc57afc9ff7f912dbb8b02b875a9", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-bootloader": { + "filename": "pool/main/n/nvidia-l4t-bootloader/nvidia-l4t-bootloader_36.4.3-20250107174145_arm64.deb", + "sha256": "5e36d1ebca83aaf8e4cda8621c60c3c8d224e02ab0f27e907510821d0f3c9f0d", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-camera": { + "filename": "pool/main/n/nvidia-l4t-camera/nvidia-l4t-camera_36.4.3-20250107174145_arm64.deb", + "sha256": "4483a57b203968caff0d36d7eebf8671fca6707fc9d7b77d42f4061f7ac0db42", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-configs": { + "filename": "pool/main/n/nvidia-l4t-configs/nvidia-l4t-configs_36.4.3-20250107174145_arm64.deb", + "sha256": "3af8e6c3791311ced4487d8eb7d5327a830f6579ea0a77a59d00faf324b4ce62", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-core": { + "filename": "pool/main/n/nvidia-l4t-core/nvidia-l4t-core_36.4.3-20250107174145_arm64.deb", + "sha256": "06e58e0decd9af534b3eeb23958ff9cb95d61079f2af443ec3908957a2d7e82b", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-cuda": { + "filename": "pool/main/n/nvidia-l4t-cuda/nvidia-l4t-cuda_36.4.3-20250107174145_arm64.deb", + "sha256": "b89095c419488d37212cbd10969277cf6e60922be89ee98cd83bbfdaed03ef86", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-cuda-utils": { + "filename": "pool/main/n/nvidia-l4t-cuda-utils/nvidia-l4t-cuda-utils_36.4.3-20250107174145_arm64.deb", + "sha256": "b57b29bbdfd13611c3c859411d422d72ed044efa6a92145e72e720e43d7072cd", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-dgpu-tools": { + "filename": "pool/main/n/nvidia-l4t-dgpu-tools/nvidia-l4t-dgpu-tools_36.4.3-20250107174145_arm64.deb", + "sha256": "178eff3c706280f82d1646554634c789bff5b47f1885852af7fdfe81c6426fa0", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-display-kernel": { + "filename": "pool/main/n/nvidia-l4t-display-kernel/nvidia-l4t-display-kernel_5.15.148-tegra-36.4.3-20250107174145_arm64.deb", + "sha256": "b012be571abd2759b4f4f04f8b33ec27b99d896b2e847cf9d5d3890042f727c5", + "version": "5.15.148-tegra-36.4.3-20250107174145" + }, + "nvidia-l4t-factory-service": { + "filename": "pool/main/n/nvidia-l4t-factory-service/nvidia-l4t-factory-service_36.4.3-20250107174145_arm64.deb", + "sha256": "9a1d244682404a6f4b06bb92e0dea1cdce05c9737c6ea9cdbfd3144be9f01321", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-firmware": { + "filename": "pool/main/n/nvidia-l4t-firmware/nvidia-l4t-firmware_36.4.3-20250107174145_arm64.deb", + "sha256": "ec89d6a5c449bc6e7e89127bc7390bea7a113a69f92a4dc15462e9e943fad3ab", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-gbm": { + "filename": "pool/main/n/nvidia-l4t-gbm/nvidia-l4t-gbm_36.4.3-20250107174145_arm64.deb", + "sha256": "3131b3bd47c616732934bc9db32c65e7664b591e00308547b2dc3b960fe8bf76", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-graphics-demos": { + "filename": "pool/main/n/nvidia-l4t-graphics-demos/nvidia-l4t-graphics-demos_36.4.3-20250107174145_arm64.deb", + "sha256": "830f49b6b25ec7a8e682be1d700bee642a8ad324411722ce0b4214960d0aeb41", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-init": { + "filename": "pool/main/n/nvidia-l4t-init/nvidia-l4t-init_36.4.3-20250107174145_arm64.deb", + "sha256": "3a396551d88ebebd70b1eae57ed74837e82485c7897ab1c233735f3ea63e8215", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-initrd": { + "filename": "pool/main/n/nvidia-l4t-initrd/nvidia-l4t-initrd_36.4.3-20250107174145_arm64.deb", + "sha256": "161f0ee23c94730953f280a1d338787afa78bf35c46606f7687439f0907b443d", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-jetson-io": { + "filename": "pool/main/n/nvidia-l4t-jetson-io/nvidia-l4t-jetson-io_36.4.3-20250107174145_arm64.deb", + "sha256": "9d504c59f81ea9b4642d8e0bb3c4bb875147ac2438ca9201b9e2e850ec77048d", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-jetson-orin-nano-qspi-updater": { + "filename": "pool/main/n/nvidia-l4t-jetson-orin-nano-qspi-updater/nvidia-l4t-jetson-orin-nano-qspi-updater_36.4.3-20250107174145_arm64.deb", + "sha256": "f0a99de8822d20769ec4b18ee79f240a3fabd91533f3aad5a9ed19e32c0f8d5e", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-jetsonpower-gui-tools": { + "filename": "pool/main/n/nvidia-l4t-jetsonpower-gui-tools/nvidia-l4t-jetsonpower-gui-tools_36.4.3-20250107174145_arm64.deb", + "sha256": "2fd4f4f00251f31177d9b5ae9e482bd3f07b20f68ab90cfe680760fef851865b", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-kernel": { + "filename": "pool/main/n/nvidia-l4t-kernel/nvidia-l4t-kernel_5.15.148-tegra-36.4.3-20250107174145_arm64.deb", + "sha256": "243c42b541814d98f2ceb325ec9fad437309c08862b85d5280cd6bcbdbbe7c5d", + "version": "5.15.148-tegra-36.4.3-20250107174145" + }, + "nvidia-l4t-kernel-dtbs": { + "filename": "pool/main/n/nvidia-l4t-kernel-dtbs/nvidia-l4t-kernel-dtbs_5.15.148-tegra-36.4.3-20250107174145_arm64.deb", + "sha256": "498947be0ab0feac9fcd67c7a0fc9840c67bb6e94d03f1261f0b54193d2924cc", + "version": "5.15.148-tegra-36.4.3-20250107174145" + }, + "nvidia-l4t-kernel-headers": { + "filename": "pool/main/n/nvidia-l4t-kernel-headers/nvidia-l4t-kernel-headers_5.15.148-tegra-36.4.3-20250107174145_arm64.deb", + "sha256": "8734cd9df3eddfb4fd677cb1bf72b136c1a1d286bcf4655a998a8eefe6202fef", + "version": "5.15.148-tegra-36.4.3-20250107174145" + }, + "nvidia-l4t-kernel-oot-headers": { + "filename": "pool/main/n/nvidia-l4t-kernel-oot-headers/nvidia-l4t-kernel-oot-headers_5.15.148-tegra-36.4.3-20250107174145_arm64.deb", + "sha256": "9c44c3f220760f5cf056aed8e588c66657239554241ece8281fc605bebec37cd", + "version": "5.15.148-tegra-36.4.3-20250107174145" + }, + "nvidia-l4t-kernel-oot-modules": { + "filename": "pool/main/n/nvidia-l4t-kernel-oot-modules/nvidia-l4t-kernel-oot-modules_5.15.148-tegra-36.4.3-20250107174145_arm64.deb", + "sha256": "81580995d7f085100cc928d06f9c8b4f315cb313ba2dfa6cfc0b8e40125369ab", + "version": "5.15.148-tegra-36.4.3-20250107174145" + }, + "nvidia-l4t-libwayland-client0": { + "filename": "pool/main/n/nvidia-l4t-libwayland-client0/nvidia-l4t-libwayland-client0_36.4.3-20250107174145_arm64.deb", + "sha256": "2a900d20033bc6780a67d95341ef44a5ff8a90ddbf7a7f6de15e195cedaad03e", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-libwayland-cursor0": { + "filename": "pool/main/n/nvidia-l4t-libwayland-cursor0/nvidia-l4t-libwayland-cursor0_36.4.3-20250107174145_arm64.deb", + "sha256": "7d4fcb6417c493d2d98bfbbb2726e607c5bfda4a578aded06131fb76ac9dafa3", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-libwayland-egl1": { + "filename": "pool/main/n/nvidia-l4t-libwayland-egl1/nvidia-l4t-libwayland-egl1_36.4.3-20250107174145_arm64.deb", + "sha256": "d79ffddd63141b90be221768878e7ddbf8a1a6d8a05efa74b5cf549bf94b3697", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-libwayland-server0": { + "filename": "pool/main/n/nvidia-l4t-libwayland-server0/nvidia-l4t-libwayland-server0_36.4.3-20250107174145_arm64.deb", + "sha256": "33d9fbdb238f22cea828283a9f19e5eb4dcf087009b6475453267392c512bbbd", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-multimedia": { + "filename": "pool/main/n/nvidia-l4t-multimedia/nvidia-l4t-multimedia_36.4.3-20250107174145_arm64.deb", + "sha256": "a3067000eb63ebe954684367464e7f1de213abb0c78ec3400a59ceb9acdf69bb", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-multimedia-utils": { + "filename": "pool/main/n/nvidia-l4t-multimedia-utils/nvidia-l4t-multimedia-utils_36.4.3-20250107174145_arm64.deb", + "sha256": "8e57f5a9a8f9c7cf2045a3031c0ad397024f62ce7e14d1e34f65e631788c10b9", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-nvfancontrol": { + "filename": "pool/main/n/nvidia-l4t-nvfancontrol/nvidia-l4t-nvfancontrol_36.4.3-20250107174145_arm64.deb", + "sha256": "5ab541e2f32342da1dc74c83a309537b80ba3566f7b8050d554861ec5eebf0dc", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-nvml": { + "filename": "pool/main/n/nvidia-l4t-nvml/nvidia-l4t-nvml_36.4.3-20250107174145_arm64.deb", + "sha256": "c2e29277178d40c156b4c597f7f1d14f4330de84c71bf7785ef76ddaa23e812f", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-nvpmodel": { + "filename": "pool/main/n/nvidia-l4t-nvpmodel/nvidia-l4t-nvpmodel_36.4.3-20250107174145_arm64.deb", + "sha256": "7e6b9fd7b0ab74606e086540f9f21afa9d092989b6c831561a35b090389b1c93", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-nvpmodel-gui-tools": { + "filename": "pool/main/n/nvidia-l4t-nvpmodel-gui-tools/nvidia-l4t-nvpmodel-gui-tools_36.4.3-20250107174145_arm64.deb", + "sha256": "0484618e76d97a13e3c9e5075f930cfc1297fbcb38cd617196aff83c8065e193", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-nvsci": { + "filename": "pool/main/n/nvidia-l4t-nvsci/nvidia-l4t-nvsci_36.4.3-20250107174145_arm64.deb", + "sha256": "49a965b5339d07de91f5ed556609dbeb5dfcc7998747c5c7e070a558ea10602e", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-oem-config": { + "filename": "pool/main/n/nvidia-l4t-oem-config/nvidia-l4t-oem-config_36.4.3-20250107174145_arm64.deb", + "sha256": "7b7770f6124e9a345cacdd9f829021de37e480eca736f183d273da21cca520be", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-openwfd": { + "filename": "pool/main/n/nvidia-l4t-openwfd/nvidia-l4t-openwfd_36.4.3-20250107174145_arm64.deb", + "sha256": "a75f89fddaa76668da559efa6969cc938e86f3d475438e1458b062003fdcdbb2", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-optee": { + "filename": "pool/main/n/nvidia-l4t-optee/nvidia-l4t-optee_36.4.3-20250107174145_arm64.deb", + "sha256": "7e2f1812e09f048b8f019c16a7062b4b15c3f1b3eb5b33e17e736439687329c5", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-pva": { + "filename": "pool/main/n/nvidia-l4t-pva/nvidia-l4t-pva_36.4.3-20250107174145_arm64.deb", + "sha256": "8caa940b0bbd81958f523cda7fde8b7c4a91ef41caa9d68c5ab0271ce8553bf2", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-tools": { + "filename": "pool/main/n/nvidia-l4t-tools/nvidia-l4t-tools_36.4.3-20250107174145_arm64.deb", + "sha256": "5e861d7dea1dca2709461e4831946968fe526f31eb87fa205a7b073d2a151ac3", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-vulkan-sc": { + "filename": "pool/main/n/nvidia-l4t-vulkan-sc/nvidia-l4t-vulkan-sc_36.4.3-20250107174145_arm64.deb", + "sha256": "a512ecfd9fda277b984678537b71da5997d0ecf6151ad2f55a194407696f12aa", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-vulkan-sc-dev": { + "filename": "pool/main/n/nvidia-l4t-vulkan-sc-dev/nvidia-l4t-vulkan-sc-dev_36.4.3-20250107174145_arm64.deb", + "sha256": "234db2c177297c5881d40c30deb42591180fa5369915c2c9a3d5e7a2f31c0b5b", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-vulkan-sc-samples": { + "filename": "pool/main/n/nvidia-l4t-vulkan-sc-samples/nvidia-l4t-vulkan-sc-samples_36.4.3-20250107174145_arm64.deb", + "sha256": "d1b3d23abd468d337a3f774dea21d9b1553776eb7de856eaa9145261e5f78f60", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-vulkan-sc-sdk": { + "filename": "pool/main/n/nvidia-l4t-vulkan-sc-sdk/nvidia-l4t-vulkan-sc-sdk_36.4.3-20250107174145_arm64.deb", + "sha256": "a02ea891d3c5b53295793d2fdda93263d4439b999f6c2a12c3a4b713bc2773c6", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-wayland": { + "filename": "pool/main/n/nvidia-l4t-wayland/nvidia-l4t-wayland_36.4.3-20250107174145_arm64.deb", + "sha256": "9f5f77010f5b332dd5ef9bfaba9f397c2bb2dc4ef8e929c0ab1e73f121762f46", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-weston": { + "filename": "pool/main/n/nvidia-l4t-weston/nvidia-l4t-weston_36.4.3-20250107174145_arm64.deb", + "sha256": "9b86cc6f103bfbe1f188820a400b698b5fcfbbf98d9d338dadb3038a9f37ce57", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-x11": { + "filename": "pool/main/n/nvidia-l4t-x11/nvidia-l4t-x11_36.4.3-20250107174145_arm64.deb", + "sha256": "952db06d6fd11ef547cc74b8cc93377529f7d2b06a3472b4824dc647c78743e3", + "version": "36.4.3-20250107174145" + }, + "nvidia-l4t-xusb-firmware": { + "filename": "pool/main/n/nvidia-l4t-xusb-firmware/nvidia-l4t-xusb-firmware_36.4.3-20250107174145_arm64.deb", + "sha256": "411a41513403cc306a07aaa7e27453398e857c8f7fe0f746086202f4c7c3ff62", + "version": "36.4.3-20250107174145" + }, + "python-jetson-gpio": { + "filename": "pool/main/j/jetson-gpio/python-jetson-gpio_2.1.7ubuntu1_arm64.deb", + "sha256": "234950a48ec85815fc3847617cc05390487a50b659b2320f63ca96d68a69fd16", + "source": "jetson-gpio", + "version": "2.1.7ubuntu1" + }, + "python3-jetson-gpio": { + "filename": "pool/main/j/jetson-gpio/python3-jetson-gpio_2.1.7ubuntu1_arm64.deb", + "sha256": "32f23da75cd21749390529571f339098ee2ead646c60116da84627c5713fa78c", + "source": "jetson-gpio", + "version": "2.1.7ubuntu1" + } + } +} diff --git a/sourceinfo/r36.4.3-gitrepos.json b/sourceinfo/r36.4.3-gitrepos.json new file mode 100644 index 00000000..8be9af91 --- /dev/null +++ b/sourceinfo/r36.4.3-gitrepos.json @@ -0,0 +1,410 @@ +{ + "dtc-src/1.4.5": { + "date": "2025-01-21T05:25:07-08:00", + "deepClone": false, + "fetchLFS": false, + "fetchSubmodules": false, + "hash": "sha256-FJocmB5uPrngj2KRTON8jn0mM6Zht3GhWI1GxniExcI=", + "leaveDotGit": false, + "path": "/nix/store/h7wi95xgp99zmwvc3607yh1irai20ih6-1.4.5", + "rev": "2cc61f91f230f2a62c5222a39dfd91b783a7c1a6", + "sha256": "1hn5hiwccildb2hp3dv1lqrjczcfgkilr4b2izhbjgkf3sc1r6hl", + "url": "https://nv-tegra.nvidia.com/3rdparty/dtc-src/1.4.5.git" + }, + "hardware/nvidia/t23x/nv-public": { + "date": "2024-12-25T10:18:53-08:00", + "deepClone": false, + "fetchLFS": false, + "fetchSubmodules": false, + "hash": "sha256-YF4gyPH8he35tRg8DdcnPgI2Nm7ca3RNn+BnHAm5PnM=", + "leaveDotGit": false, + "path": "/nix/store/cr3qyqf2mw91m9z3kipwh18cydfwdf25-t23x-public-dts", + "rev": "85ce314b25a2f112ee4411dca63ecb72cbe508ff", + "sha256": "0wryp44iqrz0kx6p8sywdqv3c0iy4zbhsg0qnpwyv1gwy7420pk0", + "url": "https://nv-tegra.nvidia.com/device/hardware/nvidia/t23x-public-dts.git" + }, + "hardware/nvidia/tegra/nv-public": { + "date": "2023-06-28T02:06:21-07:00", + "deepClone": false, + "fetchLFS": false, + "fetchSubmodules": false, + "hash": "sha256-NMp7UY0OlH2ddBSrUzCUSLkvnWrELhz8xH/dkV86ids=", + "leaveDotGit": false, + "path": "/nix/store/18pwc2x6sl43b6a1i895x58v3ag3dx2k-tegra-public-dts", + "rev": "8ba5d53ef1e1753f9f2a5b1f7b7b5fc5039de68e", + "sha256": "1nw979gr3pbzqky1qbn4dafjzfa8jhq57aqlfjfpv50fim8ppjil", + "url": "https://nv-tegra.nvidia.com/device/hardware/nvidia/tegra-public-dts.git" + }, + "hwpm": { + "date": "2024-08-01T10:24:36-07:00", + "deepClone": false, + "fetchLFS": false, + "fetchSubmodules": false, + "hash": "sha256-otOVFeF+8XKORWMXTRTcXQUXvojdwInVC3jPXTgrk3A=", + "leaveDotGit": false, + "path": "/nix/store/19n1mf5knlz7wrh8xf0g5an9kiqn5i95-linux-hwpm", + "rev": "d47dc62f4011ffbb0353ba43df5cfb42b967bef2", + "sha256": "0w4k5cw5vkvq1gaqkh6xi2z1f1axvha4s5v38n775wbyw4arblx2", + "url": "https://nv-tegra.nvidia.com/linux-hwpm.git" + }, + "kernel-devicetree": { + "date": "2024-05-29T18:53:06Z", + "deepClone": false, + "fetchLFS": false, + "fetchSubmodules": false, + "hash": "sha256-mFmxO7rg1DWnYK+HDFQnc9XLpS4lwXfSXGOibKC4FPY=", + "leaveDotGit": false, + "path": "/nix/store/hcnjzmavdp7wx4bslpr40rrjcm99q4vz-kernel-devicetree", + "rev": "19952c8e25702e9de23500c3b1fb351bf4380446", + "sha256": "1xhlp2h6r8k3bk97gh955sjwpmbk4xa0r1xgc2kkbm70p8xv2ncq", + "url": "https://nv-tegra.nvidia.com/linux/kernel-devicetree.git" + }, + "kernel/kernel-jammy-src": { + "date": "2024-09-12T20:40:42-07:00", + "deepClone": false, + "fetchLFS": false, + "fetchSubmodules": false, + "hash": "sha256-WzSLoaSP5bWg6x0QAD+2FO1z6cEA3s1rWpMoKbc5kfk=", + "leaveDotGit": false, + "path": "/nix/store/8vr7l69pbvps7kqafvhk2dvd9j561cd0-linux-jammy", + "rev": "dac1b0b4ecfc5b1aae9617011565f6c6c4a72171", + "sha256": "1yci76vjja4kb9mwvph0q7lp7v8lnqzh040xxfhbbrcgljhqnd2v", + "url": "https://nv-tegra.nvidia.com/3rdparty/canonical/linux-jammy.git" + }, + "nvdisplay": { + "date": "2025-01-21T05:25:10-08:00", + "deepClone": false, + "fetchLFS": false, + "fetchSubmodules": false, + "hash": "sha256-ZgoEXl4G5/lk+i5pdwqPwTi8eRNi+kLvC1hxmRZzj3k=", + "leaveDotGit": false, + "path": "/nix/store/g01kbwk24mrvjpl09bbj8n8jz2l36f2c-nv-kernel-display-driver", + "rev": "b2fb5ad0da0c8f24f7e5221b761cc01b4eadaa79", + "sha256": "0ycgfcb9jwaq1gpl5yk22dwvqf61iw57fs9fz9jgkrq6brg082k6", + "url": "https://nv-tegra.nvidia.com/tegra/kernel-src/nv-kernel-display-driver.git" + }, + "nvethernetrm": { + "date": "2023-06-06T02:05:11-07:00", + "deepClone": false, + "fetchLFS": false, + "fetchSubmodules": false, + "hash": "sha256-cTJagcO7TYG0eT0dgZn67hX/EKT04OrTYvwBwWEe1YU=", + "leaveDotGit": false, + "path": "/nix/store/ryzmhzxifq2rxhjin3d4a7a0c561qzxh-nvethernetrm", + "rev": "1150fc9b2976463a6d839c3515d012b5a27a367b", + "sha256": "11fm3rhw20gwcb9ymq7llh8gy5gfzacq279xg6s82kdvqf0mlcki", + "url": "https://nv-tegra.nvidia.com/kernel/nvethernetrm.git" + }, + "nvgpu": { + "date": "2024-12-17T15:54:04-08:00", + "deepClone": false, + "fetchLFS": false, + "fetchSubmodules": false, + "hash": "sha256-qI/YRdPIvXEDb4AU+ksLmgiwcGlSHLJTw2N/B/yOFpY=", + "leaveDotGit": false, + "path": "/nix/store/gvnsifv7wy7nl27fgwvi3v7fhrxgq4r8-linux-nvgpu", + "rev": "8a0a5345705e069e398a79dbcba96c5db54a37f1", + "sha256": "15hnivy0fzv3qd9v472jd5qb024s1d5zl540dw1p3gf8sd2xi3x8", + "url": "https://nv-tegra.nvidia.com/linux-nvgpu.git" + }, + "nvidia-oot": { + "date": "2024-12-17T15:56:55-08:00", + "deepClone": false, + "fetchLFS": false, + "fetchSubmodules": false, + "hash": "sha256-SixXSU0lhOC3V1nII1YdEpyGXR0fxOS8rI7CHaWbFzo=", + "leaveDotGit": false, + "path": "/nix/store/ifvppy5p9vis4bwcazan6aw6nqva4s6n-linux-nv-oot", + "rev": "087418781c377c7e1aeae138024ef5c81950f85e", + "sha256": "0fhpkfjivhlfmjyf9i0z3mfqd70j3mb27j2rayvy11159m4mfb2a", + "url": "https://nv-tegra.nvidia.com/linux-nv-oot.git" + }, + "tegra/argus-cam-libav/argus_cam_libavencoder": { + "date": "2025-01-21T05:24:48-08:00", + "deepClone": false, + "fetchLFS": false, + "fetchSubmodules": false, + "hash": "sha256-3wmV6I5/HOGreqCHt/lXO/qzuKRp5IYheI6pnYFKK1k=", + "leaveDotGit": false, + "path": "/nix/store/vancmbi7653k3wgqgvkf55llbjqcmvig-argus_cam_libavencoder", + "rev": "915c81c0e566cabfb2905d2613e3dd20bf3ac7d1", + "sha256": "0n9b9a0rvacfg0hqdr39ljwb7yivazwvg1x0gamy273zivl9a2fz", + "url": "https://nv-tegra.nvidia.com/tegra/argus-cam-libav/argus_cam_libavencoder.git" + }, + "tegra/cuda-src/nvsample_cudaprocess": { + "date": "2025-01-21T05:25:07-08:00", + "deepClone": false, + "fetchLFS": false, + "fetchSubmodules": false, + "hash": "sha256-FkwWv++PL/0lxSCkBKEV8wqlI/Zby9i6vfsAq88tlMQ=", + "leaveDotGit": false, + "path": "/nix/store/9hhx3rdch7y2r896vzklkkyp0grqfpn5-nvsample_cudaprocess", + "rev": "15f8722ed872496f4c6d91946f3d969309882561", + "sha256": "1i4l5p7sn07vpnxdijsvyqisa2pk2nhh9910qljzsbwgxyzick0n", + "url": "https://nv-tegra.nvidia.com/tegra/cuda-src/nvsample_cudaprocess.git" + }, + "tegra/gfx-src/nv-xconfig": { + "date": "2025-01-21T05:24:49-08:00", + "deepClone": false, + "fetchLFS": false, + "fetchSubmodules": false, + "hash": "sha256-UEid/cAtfLbwg1PEFm42+U+qJZIS73eDEgC5lKsZFyI=", + "leaveDotGit": false, + "path": "/nix/store/5pjpplmg097lihk9fcmy8i20g6x1xc6k-nv-xconfig", + "rev": "89880fc278ba498ebbe7d30417bebfccc482bdc3", + "sha256": "08hp36mr9f802a1pgvqjj8jslkzr6rp1di2khgqbcz1dq3yrsj2h", + "url": "https://nv-tegra.nvidia.com/tegra/gfx-src/nv-xconfig.git" + }, + "tegra/gst-src/gst-egl": { + "date": "2025-01-21T05:24:50-08:00", + "deepClone": false, + "fetchLFS": false, + "fetchSubmodules": false, + "hash": "sha256-IFSfv30DK0El5yQ7JnkRBcI5iYoS5s2fYVc4J8P99sc=", + "leaveDotGit": false, + "path": "/nix/store/jnmy0gcrjgpi5q70y7iv8f2m4i31487f-gst-egl", + "rev": "4be089e6fb43ada35a8cbfab855b5645170bd25d", + "sha256": "1iznzp1jff2pc6gwvrhjia4kkhh525wjcfr4wwjl2aq3gnzrym10", + "url": "https://nv-tegra.nvidia.com/tegra/gst-src/gst-egl.git" + }, + "tegra/gst-src/gst-jpeg": { + "date": "2025-01-21T05:24:50-08:00", + "deepClone": false, + "fetchLFS": false, + "fetchSubmodules": false, + "hash": "sha256-YCy4NUl0GHAKoimiNLtDspOX/7vPYuhTqU6dJRIdjpI=", + "leaveDotGit": false, + "path": "/nix/store/g9pps0cv87cvbkr0paiw7zajfsb2g6w0-gst-jpeg", + "rev": "23634be9d6a242e6306f3aa5abed1899f2311ddf", + "sha256": "14lf3l92b7afm59yhqngpgzrg4xj8fxk98i9l857063l94svhb30", + "url": "https://nv-tegra.nvidia.com/tegra/gst-src/gst-jpeg.git" + }, + "tegra/gst-src/gst-nvarguscamera": { + "date": "2025-01-21T05:25:06-08:00", + "deepClone": false, + "fetchLFS": false, + "fetchSubmodules": false, + "hash": "sha256-VZwWNpy3qQ9PeAxtY+fP3cVYdlqCqPIXd64R3yANgXg=", + "leaveDotGit": false, + "path": "/nix/store/3bw1hrj82di6zzmy5xfzhyvylvklrgif-gst-nvarguscamera", + "rev": "77e672c5eabad3bf794f368725bb704991c51766", + "sha256": "0y411lhdy4dffwbz5a42b9v5iifxrzkn6v8cg17hzadpkhv1d72m", + "url": "https://nv-tegra.nvidia.com/tegra/gst-src/gst-nvarguscamera.git" + }, + "tegra/gst-src/gst-nvcompositor": { + "date": "2025-01-21T05:25:19-08:00", + "deepClone": false, + "fetchLFS": false, + "fetchSubmodules": false, + "hash": "sha256-3JR66vm2x6gyTQtiVqr5OMuWHlokKChjtq2MoS65mz4=", + "leaveDotGit": false, + "path": "/nix/store/5xh06w9kcxbd59w97w5j0873mfz8f2cf-gst-nvcompositor", + "rev": "79855ba9fccb3f7f149c7828f4449414eb5193e8", + "sha256": "0glvp4pa335dnrijha14b8g9djrqz6m5cqhb9lraiixnz7m7m56w", + "url": "https://nv-tegra.nvidia.com/tegra/gst-src/gst-nvcompositor.git" + }, + "tegra/gst-src/gst-nvtee": { + "date": "2025-01-21T05:24:46-08:00", + "deepClone": false, + "fetchLFS": false, + "fetchSubmodules": false, + "hash": "sha256-l3XGzRvzWIj1edFzladO2sNDix2P7xGGZWh7/3bgn7c=", + "leaveDotGit": false, + "path": "/nix/store/r21f6w4kpgpnpc3l6vbybzacycvbf3hb-gst-nvtee", + "rev": "6c60322bfac866d6200bccb71832c3b282a2415e", + "sha256": "1dwzw1vgyyv8cn313vwg3n5l7hys9skrawyig7sqhn7k3g6wcxcp", + "url": "https://nv-tegra.nvidia.com/tegra/gst-src/gst-nvtee.git" + }, + "tegra/gst-src/gst-nvv4l2camera": { + "date": "2025-01-21T05:25:11-08:00", + "deepClone": false, + "fetchLFS": false, + "fetchSubmodules": false, + "hash": "sha256-UYtfmzByrRC1QOkQ48Q7s4BNJVE5vPIpR1yyKjIzuwI=", + "leaveDotGit": false, + "path": "/nix/store/clnkpy0r4c43jz2jv1mkqk6fsancwr12-gst-nvv4l2camera", + "rev": "bb0d46b972a70c6a9159c4f49cae932edee4073a", + "sha256": "00mv6cr2mcjw8wlz5g1ra4jlv05k7g2f647982si1bbj62dmz2si", + "url": "https://nv-tegra.nvidia.com/tegra/gst-src/gst-nvv4l2camera.git" + }, + "tegra/gst-src/gst-nvvidconv": { + "date": "2025-01-21T05:25:20-08:00", + "deepClone": false, + "fetchLFS": false, + "fetchSubmodules": false, + "hash": "sha256-SGS3qf9E8XzfrsAFyQIYNG9nctFgx/ve/O8UiX+6rkE=", + "leaveDotGit": false, + "path": "/nix/store/gzzgn0zh0gfbwwnw5jkr60zl1bg3nx6r-gst-nvvidconv", + "rev": "9587d3aea68b7aa1ceb70f6ceb6691c4e3852867", + "sha256": "0hdfp9zqj57gzkggpiv0s5r6fvrl301cj1f0mvgprwa4zylvfr28", + "url": "https://nv-tegra.nvidia.com/tegra/gst-src/gst-nvvidconv.git" + }, + "tegra/gst-src/gst-nvvideo4linux2": { + "date": "2025-01-21T05:24:47-08:00", + "deepClone": false, + "fetchLFS": false, + "fetchSubmodules": false, + "hash": "sha256-lo6olm3Jm4Vqzf7pVEI9NF+Z1oiU7/nsHGfWTfHzqV8=", + "leaveDotGit": false, + "path": "/nix/store/bzxa8rg7w88012kl7qxwa1az9c7z3db4-gst-nvvideo4linux2", + "rev": "e102cca855e8f241a48ffb3f280046bea8d8062f", + "sha256": "0px9ygqlvmk73kngkvwli3b9jprl7m159sgyrmm8b6y9dnbai3ln", + "url": "https://nv-tegra.nvidia.com/tegra/gst-src/gst-nvvideo4linux2.git" + }, + "tegra/gst-src/libgstnvcustomhelper": { + "date": "2025-01-21T05:24:48-08:00", + "deepClone": false, + "fetchLFS": false, + "fetchSubmodules": false, + "hash": "sha256-IYgNCwQXBQi88BLwyqxIrI7bnvcxcsyf07WO5ctYWWs=", + "leaveDotGit": false, + "path": "/nix/store/7g771whpkplg2j1p7dnzkird8wsyx11h-libgstnvcustomhelper", + "rev": "c71b7aad17ba4684fd093c137bb8d8b67c364d8a", + "sha256": "0ssrb35yb3mmsfgwqwiiyygdp3mc92ncmw0jy2y0h18p0h5hv211", + "url": "https://nv-tegra.nvidia.com/tegra/gst-src/libgstnvcustomhelper.git" + }, + "tegra/gst-src/libgstnvdrmvideosink": { + "date": "2025-01-21T05:24:47-08:00", + "deepClone": false, + "fetchLFS": false, + "fetchSubmodules": false, + "hash": "sha256-GS+Gz8g2s0nP3s5nYQwTrTwydr4G7TfdvLzTd+2u51Y=", + "leaveDotGit": false, + "path": "/nix/store/i6ggc2jp9dhg1crn81qpvhvffcvvvr2h-libgstnvdrmvideosink", + "rev": "fe43724fe449664f46bc79f6fe2fe0356e8af305", + "sha256": "0mp7mvnpglxwpkfkgv86prv34g5d2c662ryfvv7lkcrnr37qcbqr", + "url": "https://nv-tegra.nvidia.com/tegra/gst-src/libgstnvdrmvideosink.git" + }, + "tegra/gst-src/libgstnvvideosinks": { + "date": "2025-01-21T05:25:21-08:00", + "deepClone": false, + "fetchLFS": false, + "fetchSubmodules": false, + "hash": "sha256-ZOgTA1oQ2hRIdQ+vPPleKKDbnj3dD0ZivURcXqaAA6Q=", + "leaveDotGit": false, + "path": "/nix/store/dk4dr582b7m38hml95ygyl71hll3qlsy-libgstnvvideosinks", + "rev": "677753a9ee9661fa94bbf09c47c6477e56ae62a1", + "sha256": "1903h2k5wp24pmi4c3yx7ngdp818bvwkrbqgfm419nhhb81i7s34", + "url": "https://nv-tegra.nvidia.com/tegra/gst-src/libgstnvvideosinks.git" + }, + "tegra/gst-src/nvgstapps": { + "date": "2025-01-21T05:25:21-08:00", + "deepClone": false, + "fetchLFS": false, + "fetchSubmodules": false, + "hash": "sha256-EZysmimkyi86Vq8dHuh8u9wOpZOE4hJbm1auTSn9srg=", + "leaveDotGit": false, + "path": "/nix/store/xbbj7p784nhq71rxkbkvif7a1cbi9gva-nvgstapps", + "rev": "4b224ccaf2346f7b7b8a21b94b00bc07b337f6bd", + "sha256": "1f5jzlllvbjnkddi5ql4jfjhxp5vgkl1w7dgaqx2zjm456dar70i", + "url": "https://nv-tegra.nvidia.com/tegra/gst-src/nvgstapps.git" + }, + "tegra/gst-src/opencv_gst_samples": { + "date": "2025-01-21T05:25:06-08:00", + "deepClone": false, + "fetchLFS": false, + "fetchSubmodules": false, + "hash": "sha256-F3QN2lsB8RNmxEmnko+rhLTbTNiIpQ8/sOTo2UdghH4=", + "leaveDotGit": false, + "path": "/nix/store/zmnha6w9icn02vk61k86di6kdsx0h1p5-opencv_gst_samples", + "rev": "b49f0d21cf167c6dbba1721d18b18723dda06e9a", + "sha256": "0zl4c13xks74n0zhz9c8v16dpd44mf7r59s9qik17w81bgd0sx0p", + "url": "https://nv-tegra.nvidia.com/tegra/gst-src/opencv_gst_samples.git" + }, + "tegra/nv-sci-src/nvsci_headers": { + "date": "2025-01-21T05:25:20-08:00", + "deepClone": false, + "fetchLFS": false, + "fetchSubmodules": false, + "hash": "sha256-UJYg8CWqUXa2m2lolNlEGqawwzrHoYMluejWqWh5rWU=", + "leaveDotGit": false, + "path": "/nix/store/c034vdkv8rg06g3cixbs1fpy645rxn45-nvsci_headers", + "rev": "2c56c6ae8d3e6c8fc8b617e992dd7b746c8548d3", + "sha256": "0rddg5lakmp8p4jq78f77b1v19hs8kcr8s39kfv7clda4pq215jh", + "url": "https://nv-tegra.nvidia.com/tegra/nv-sci-src/nvsci_headers.git" + }, + "tegra/nv-sci-src/nvsci_samples": { + "date": "2025-01-21T05:25:22-08:00", + "deepClone": false, + "fetchLFS": false, + "fetchSubmodules": false, + "hash": "sha256-5A8RtYPDFWpHOwFM5R/n7YNq+NdDuC1ieNzHI5Jp8iQ=", + "leaveDotGit": false, + "path": "/nix/store/k6akz3raxq4q2hfxkviqirkq0zpmsl69-nvsci_samples", + "rev": "5482324389f18de3a894365914c3b0fa4af8ded0", + "sha256": "097jd6927iywg1i2vf23szw6m0zdwwgyak017d3nl5f3hfsi23z4", + "url": "https://nv-tegra.nvidia.com/tegra/nv-sci-src/nvsci_samples.git" + }, + "tegra/openwfd-src/openwfd_headers": { + "date": "2025-01-21T05:25:00-08:00", + "deepClone": false, + "fetchLFS": false, + "fetchSubmodules": false, + "hash": "sha256-P31fq5ahOJRYsJ5LUT89y/F9vLllb+WdaMcG2noWSUk=", + "leaveDotGit": false, + "path": "/nix/store/g54zsfzl00nygym6075nciyg27n236c9-openwfd_headers", + "rev": "24f52694b123788001a92fdea539bbe057a8b644", + "sha256": "0ja92rxdl1n7d2fyavv5p6y7vwfb7lzm2jwyn1c98f51jsmmyz9z", + "url": "https://nv-tegra.nvidia.com/tegra/openwfd-src/openwfd_headers.git" + }, + "tegra/optee-src/atf": { + "date": "2025-01-21T05:25:18-08:00", + "deepClone": false, + "fetchLFS": false, + "fetchSubmodules": false, + "hash": "sha256-uBclueCAeGsEldbl1OTfUHXLaWOICXy4CXW1VR8E2Iw=", + "leaveDotGit": false, + "path": "/nix/store/00yp2xh0q5raajxv0395n604kzcpww26-atf", + "rev": "6788fd9dde38dd72910694e940beaeaf3d1c30d2", + "sha256": "136q0hgmbdbm16w7q2c8cdlwnxahvzjd9rfnjl26ny40w2wja5xq", + "url": "https://nv-tegra.nvidia.com/tegra/optee-src/atf.git" + }, + "tegra/optee-src/nv-optee": { + "date": "2025-01-21T05:24:57-08:00", + "deepClone": false, + "fetchLFS": false, + "fetchSubmodules": false, + "hash": "sha256-YIkONwvQ3PYF12PcGlX+C4/wlo4n12rrQI3PLnK408k=", + "leaveDotGit": false, + "path": "/nix/store/0miq6gcxssfa5n9ysjvdkwsnq4iz23mi-nv-optee", + "rev": "84c0c96776ebb0bf0bd02b8033e07977cea81b9c", + "sha256": "1jfkp1r2xkwd83mnmmr7isbg13qbzraimp33sw2zdp6h1cvhx2b0", + "url": "https://nv-tegra.nvidia.com/tegra/optee-src/nv-optee.git" + }, + "tegra/spe-src/spe-freertos-bsp": { + "date": "2025-01-21T05:25:03-08:00", + "deepClone": false, + "fetchLFS": false, + "fetchSubmodules": false, + "hash": "sha256-PTrgmHtVK7nSzf4Tnshnjy1gv+s3tZcOvvUQeppXOKo=", + "leaveDotGit": false, + "path": "/nix/store/hs2nph09nfp6i8spb7abnsclsa8kxhhn-spe-freertos-bsp", + "rev": "c5599650343928607ee3ee8c126535a285ae1527", + "sha256": "1aiqayd7l47mpq79gd9pxfzn0bcgcz49w4zyrp9bjasmgfcf0fix", + "url": "https://nv-tegra.nvidia.com/tegra/spe-src/spe-freertos-bsp.git" + }, + "tegra/v4l2-src/libv4l2_nvargus": { + "date": "2025-01-21T05:25:00-08:00", + "deepClone": false, + "fetchLFS": false, + "fetchSubmodules": false, + "hash": "sha256-qRPyMOHuBZn48mGoqiClVgK/xlp/hivWxIgmmS8A+Hk=", + "leaveDotGit": false, + "path": "/nix/store/xyg44bxwscbr84ddqaxjwn0d5f39r1zx-libv4l2_nvargus", + "rev": "833da9d669dbb9d614184c055fc281af664e0d55", + "sha256": "0ygq00prj9l8qkb2p1kzbb3by0jnllhama31ybw9j1gfw4qg44x9", + "url": "https://nv-tegra.nvidia.com/tegra/v4l2-src/libv4l2_nvargus.git" + }, + "tegra/v4l2-src/v4l2_libs": { + "date": "2025-01-21T05:25:05-08:00", + "deepClone": false, + "fetchLFS": false, + "fetchSubmodules": false, + "hash": "sha256-N6DQXJ/8nEAafhUiABfXm9gihZIbWrxD06YgQRmu93g=", + "leaveDotGit": false, + "path": "/nix/store/mgnxb9lf590y6ldk5v70s6gc3kjl6nni-v4l2_libs", + "rev": "41db982d533c441e11f4fae6b492476f8e18a689", + "sha256": "0y7pmqcl2856sd1vqnhvja2j5n4vswbh08hmgqd4177wkxfd181p", + "url": "https://nv-tegra.nvidia.com/tegra/v4l2-src/v4l2_libs.git" + } +} \ No newline at end of file From 711fd12f0a5163717278c34d1c5fd660db63148f Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Tue, 6 May 2025 10:14:30 -0700 Subject: [PATCH 06/39] jetpack 6: Check valid SoC family Jetpack 6 only supports orin. Check that user hasn't tried to configure xavier + jetpack 6. --- modules/default.nix | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/modules/default.nix b/modules/default.nix index 9b8acfe6..bc9f1b12 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -29,6 +29,12 @@ let nvidiaDockerActive = with config.virtualisation; docker.enable && docker.enableNvidia; nvidiaPodmanActive = with config.virtualisation; podman.enable && podman.enableNvidia; + + checkValidSoms = soms: cfg.som == "generic" || lib.lists.any (s: lib.hasPrefix s cfg.som) soms; + validSomsAssertion = majorVersion: soms: { + assertion = cfg.majorVersion == majorVersion -> checkValidSoms soms; + message = "Jetpack ${majorVersion} only supports som families: ${lib.strings.concatStringsSep " " soms} (or generic). Configured som: ${cfg.som}."; + }; in { imports = [ @@ -195,6 +201,8 @@ in assertion = !config.hardware.nvidia-container-toolkit.enable; message = "hardware.nvidia-container-toolkit.enable does not work with jetson devices (yet), use hardware.nvidia-jetpack.container-toolkit.enable instead"; } + (validSomsAssertion "5" [ "xavier" "orin" ]) + (validSomsAssertion "6" [ "orin" ]) ]; warnings = (lib.optionals nvidiaDockerActive [ From a4d382386e38bb21d2563673fca1d7cf5a23d991 Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Mon, 5 May 2025 13:21:37 -0700 Subject: [PATCH 07/39] Add l4t r36.4.3 kernel derivation Introduce new r36 kernel derivation based on L4T r36.4.3. Subsequent commits will wire this up into a buildable derivation. Signed-off-by: Elliot Berman --- pkgs/kernels/r36/0001-ipu-Depend-on-x86.patch | 29 ++ ...uard-nv_dev-in-nv_drm_suspend_resume.patch | 29 ++ .../0001-rtl8822ce-Fix-Werror-address.patch | 320 ++++++++++++++++++ ...ANDURIL-Add-some-missing-BASE_CFLAGS.patch | 32 ++ ...lude-path-for-tegra-virt-alt-include.patch | 28 ++ ...drm_gem_object_vmap_has_map_arg-test.patch | 30 ++ pkgs/kernels/r36/Makefile.diff | 38 +++ pkgs/kernels/r36/default.nix | 123 +++++++ pkgs/kernels/r36/devicetree.nix | 53 +++ pkgs/kernels/r36/oot-modules.nix | 94 +++++ 10 files changed, 776 insertions(+) create mode 100644 pkgs/kernels/r36/0001-ipu-Depend-on-x86.patch create mode 100644 pkgs/kernels/r36/0001-nvidia-drm-Guard-nv_dev-in-nv_drm_suspend_resume.patch create mode 100644 pkgs/kernels/r36/0001-rtl8822ce-Fix-Werror-address.patch create mode 100644 pkgs/kernels/r36/0002-ANDURIL-Add-some-missing-BASE_CFLAGS.patch create mode 100644 pkgs/kernels/r36/0002-sound-Fix-include-path-for-tegra-virt-alt-include.patch create mode 100644 pkgs/kernels/r36/0003-ANDURIL-Update-drm_gem_object_vmap_has_map_arg-test.patch create mode 100644 pkgs/kernels/r36/Makefile.diff create mode 100644 pkgs/kernels/r36/default.nix create mode 100644 pkgs/kernels/r36/devicetree.nix create mode 100644 pkgs/kernels/r36/oot-modules.nix diff --git a/pkgs/kernels/r36/0001-ipu-Depend-on-x86.patch b/pkgs/kernels/r36/0001-ipu-Depend-on-x86.patch new file mode 100644 index 00000000..3b0ee379 --- /dev/null +++ b/pkgs/kernels/r36/0001-ipu-Depend-on-x86.patch @@ -0,0 +1,29 @@ +From 684f238159a15e58b935a9fc861744126f6833df Mon Sep 17 00:00:00 2001 +From: Elliot Berman +Date: Mon, 28 Apr 2025 15:28:58 -0700 +Subject: [PATCH] ipu: Depend on x86 + +The ipu6 module makes use of the following x86-specific function: +clflush_cache_range(). Make the Kconfig reflect this so allmodconfig +works. + +Signed-off-by: Elliot Berman +--- + drivers/media/pci/intel/Kconfig | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/media/pci/intel/Kconfig b/drivers/media/pci/intel/Kconfig +index ee4a77acb66f..5088f1e850c5 100644 +--- a/drivers/media/pci/intel/Kconfig ++++ b/drivers/media/pci/intel/Kconfig +@@ -3,6 +3,7 @@ config VIDEO_INTEL_IPU6 + depends on ACPI + depends on MEDIA_SUPPORT + depends on MEDIA_PCI_SUPPORT ++ depends on X86 + select IOMMU_API + select IOMMU_IOVA + select X86_DEV_DMA_OPS if X86 +-- +2.49.0 + diff --git a/pkgs/kernels/r36/0001-nvidia-drm-Guard-nv_dev-in-nv_drm_suspend_resume.patch b/pkgs/kernels/r36/0001-nvidia-drm-Guard-nv_dev-in-nv_drm_suspend_resume.patch new file mode 100644 index 00000000..67252cee --- /dev/null +++ b/pkgs/kernels/r36/0001-nvidia-drm-Guard-nv_dev-in-nv_drm_suspend_resume.patch @@ -0,0 +1,29 @@ +From 751364b6b30105aca2d67e2d84252699c15bac96 Mon Sep 17 00:00:00 2001 +From: Elliot Berman +Date: Fri, 25 Apr 2025 14:25:29 -0700 +Subject: [PATCH 1/3] nvidia-drm: Guard nv_dev in nv_drm_suspend_resume + +All that code should be in a separate function :shrug: + +Signed-off-by: Elliot Berman +--- + kernel-open/nvidia-drm/nvidia-drm-drv.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/kernel-open/nvidia-drm/nvidia-drm-drv.c b/kernel-open/nvidia-drm/nvidia-drm-drv.c +index 61842e8..dd18e80 100644 +--- a/kernel-open/nvidia-drm/nvidia-drm-drv.c ++++ b/kernel-open/nvidia-drm/nvidia-drm-drv.c +@@ -1861,7 +1861,9 @@ void nv_drm_suspend_resume(NvBool suspend) + { + static DEFINE_MUTEX(nv_drm_suspend_mutex); + static NvU32 nv_drm_suspend_count = 0; ++#if defined(NV_DRM_ATOMIC_MODESET_AVAILABLE) + struct nv_drm_device *nv_dev; ++#endif /* NV_DRM_ATOMIC_MODESET_AVAILABLE */ + + mutex_lock(&nv_drm_suspend_mutex); + +-- +2.49.0 + diff --git a/pkgs/kernels/r36/0001-rtl8822ce-Fix-Werror-address.patch b/pkgs/kernels/r36/0001-rtl8822ce-Fix-Werror-address.patch new file mode 100644 index 00000000..db0a9c6e --- /dev/null +++ b/pkgs/kernels/r36/0001-rtl8822ce-Fix-Werror-address.patch @@ -0,0 +1,320 @@ +From b357cda254885375bde6d67ea2738e3481906d93 Mon Sep 17 00:00:00 2001 +From: Elliot Berman +Date: Fri, 25 Apr 2025 08:21:53 -0700 +Subject: [PATCH 1/2] rtl8822ce: Fix -Werror=address + +For -Werror=address + +Signed-off-by: Elliot Berman +--- + drivers/net/wireless/realtek/rtl8822ce/core/rtw_sta_mgt.c | 3 +-- + .../net/wireless/realtek/rtl8822ce/hal/phydm/halrf/halrf.c | 6 +++--- + .../realtek/rtl8822ce/hal/phydm/halrf/halrf_debug.c | 6 +++--- + .../net/wireless/realtek/rtl8822ce/hal/phydm/phydm_antdiv.c | 2 +- + .../net/wireless/realtek/rtl8822ce/hal/phydm/phydm_api.c | 2 +- + .../net/wireless/realtek/rtl8822ce/hal/phydm/phydm_cck_pd.c | 2 +- + .../net/wireless/realtek/rtl8822ce/hal/phydm/phydm_ccx.c | 4 ++-- + .../net/wireless/realtek/rtl8822ce/hal/phydm/phydm_debug.c | 6 +++--- + .../net/wireless/realtek/rtl8822ce/hal/phydm/phydm_dig.c | 2 +- + .../realtek/rtl8822ce/hal/phydm/phydm_dynamictxpower.c | 2 +- + .../wireless/realtek/rtl8822ce/hal/phydm/phydm_lna_sat.c | 4 ++-- + .../wireless/realtek/rtl8822ce/hal/phydm/phydm_pathdiv.c | 2 +- + .../realtek/rtl8822ce/hal/phydm/phydm_pmac_tx_setting.c | 2 +- + .../wireless/realtek/rtl8822ce/hal/phydm/phydm_pow_train.c | 2 +- + .../wireless/realtek/rtl8822ce/hal/phydm/phydm_smt_ant.c | 4 ++-- + .../net/wireless/realtek/rtl8822ce/hal/phydm/phydm_soml.c | 2 +- + 16 files changed, 25 insertions(+), 26 deletions(-) + +diff --git a/drivers/net/wireless/realtek/rtl8822ce/core/rtw_sta_mgt.c b/drivers/net/wireless/realtek/rtl8822ce/core/rtw_sta_mgt.c +index d0966567..282d701d 100644 +--- a/drivers/net/wireless/realtek/rtl8822ce/core/rtw_sta_mgt.c ++++ b/drivers/net/wireless/realtek/rtl8822ce/core/rtw_sta_mgt.c +@@ -390,8 +390,7 @@ void rtw_mfree_stainfo(struct sta_info *psta); + void rtw_mfree_stainfo(struct sta_info *psta) + { + +- if (&psta->lock != NULL) +- _rtw_spinlock_free(&psta->lock); ++ _rtw_spinlock_free(&psta->lock); + + _rtw_free_sta_xmit_priv_lock(&psta->sta_xmitpriv); + _rtw_free_sta_recv_priv_lock(&psta->sta_recvpriv); +diff --git a/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/halrf/halrf.c b/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/halrf/halrf.c +index ebe51b4f..abb5552e 100644 +--- a/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/halrf/halrf.c ++++ b/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/halrf/halrf.c +@@ -867,7 +867,7 @@ void halrf_support_ability_debug(void *dm_void, char input[][16], u32 *_used, + u8 i; + + for (i = 0; i < 5; i++) +- if (input[i + 1]) ++ if (input[i + 1][0]) + PHYDM_SSCANF(input[i + 2], DCMD_DECIMAL, &dm_value[i]); + + if (dm_value[0] == 100) { +@@ -942,7 +942,7 @@ void halrf_support_band_shift_debug(void *dm_void, char input[][16], u32 *_used, + + #if (RTL8192F_SUPPORT == 1) + for (i = 0; i < 7; i++) +- if (input[i + 1]) ++ if (input[i + 1][0]) + PHYDM_SSCANF(input[i + 2], DCMD_DECIMAL, &dm_value[i]); + + if (!(rf->rf_supportability & HAL_2GBAND_SHIFT)) { +@@ -4658,7 +4658,7 @@ void halrf_dump_rfk_reg(void *dm_void, char input[][16], u32 *_used, + + reg_1b00 = odm_get_bb_reg(dm, R_0x1b00, MASKDWORD); + +- if (input[2]) ++ if (input[2][0]) + PHYDM_SSCANF(input[2], DCMD_DECIMAL, &var1[0]); + + if ((strcmp(input[2], help) == 0)) +diff --git a/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/halrf/halrf_debug.c b/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/halrf/halrf_debug.c +index 3f2d142b..822ba62e 100644 +--- a/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/halrf/halrf_debug.c ++++ b/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/halrf/halrf_debug.c +@@ -151,7 +151,7 @@ void halrf_debug_trace(void *dm_void, char input[][16], u32 *_used, + u8 i; + + for (i = 0; i < 5; i++) +- if (input[i + 1]) ++ if (input[i + 1][0]) + PHYDM_SSCANF(input[i + 2], DCMD_DECIMAL, &rf_var[i]); + + if (rf_var[0] == 100) { +@@ -211,7 +211,7 @@ void halrf_dack_debug_cmd(void *dm_void, char input[][16]) + u8 i; + + for (i = 0; i < 7; i++) +- if (input[i + 1]) ++ if (input[i + 1][0]) + PHYDM_SSCANF(input[i + 2], DCMD_DECIMAL, &dm_value[i]); + + if (dm_value[0] == 1) +@@ -329,7 +329,7 @@ void halrf_cmd_parser(void *dm_void, char input[][16], u32 *_used, char *output, + PDM_SNPF(out_len, used, output + used, out_len - used, + "IQK DEBUG!!!!!\n"); + for (i = 0; i < 5; i++) { +- if (input[i + 1]) { ++ if (input[i + 1][0]) { + PHYDM_SSCANF(input[i + 2], DCMD_HEX, + &rf_var[i]); + input_idx++; +diff --git a/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_antdiv.c b/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_antdiv.c +index 3c2cc583..efb5955e 100644 +--- a/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_antdiv.c ++++ b/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_antdiv.c +@@ -6440,7 +6440,7 @@ void phydm_antdiv_debug(void *dm_void, char input[][16], u32 *_used, + u8 i, input_idx = 0; + + for (i = 0; i < 5; i++) { +- if (input[i + 1]) { ++ if (input[i + 1][0]) { + PHYDM_SSCANF(input[i + 1], DCMD_HEX, &dm_value[i]); + input_idx++; + } +diff --git a/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_api.c b/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_api.c +index 349f3574..3f3e3d0b 100644 +--- a/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_api.c ++++ b/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_api.c +@@ -433,7 +433,7 @@ void phydm_config_trx_path_v1(void *dm_void, char input[][16], u32 *_used, + return; + + for (i = 0; i < 5; i++) { +- if (input[i + 1]) { ++ if (input[i + 1][0]) { + PHYDM_SSCANF(input[i + 1], DCMD_HEX, &val[i]); + input_idx++; + } +diff --git a/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_cck_pd.c b/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_cck_pd.c +index 15a4b931..710ce2f6 100644 +--- a/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_cck_pd.c ++++ b/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_cck_pd.c +@@ -1904,7 +1904,7 @@ void phydm_dig_cckpd_coex_dbg(void *dm_void, char input[][16], u32 *_used, + u8 i = 0; + + for (i = 0; i < 3; i++) { +- if (input[i + 1]) ++ if (input[i + 1][0]) + PHYDM_SSCANF(input[i + 1], DCMD_DECIMAL, &var[i]); + } + +diff --git a/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_ccx.c b/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_ccx.c +index dc88a20e..39ecf374 100644 +--- a/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_ccx.c ++++ b/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_ccx.c +@@ -2997,7 +2997,7 @@ void phydm_ifs_clm_dbg(void *dm_void, char input[][16], u32 *_used, + return; + + for (i = 0; i < 5; i++) { +- if (input[i + 1]) ++ if (input[i + 1][0]) + PHYDM_SSCANF(input[i + 1], DCMD_DECIMAL, + &var1[i]); + } +@@ -3601,7 +3601,7 @@ void phydm_edcca_clm_dbg(void *dm_void, char input[][16], u32 *_used, + return; + + for (i = 0; i < 4; i++) { +- if (input[i + 1]) ++ if (input[i + 1][0]) + PHYDM_SSCANF(input[i + 1], DCMD_DECIMAL, &var1[i]); + } + +diff --git a/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_debug.c b/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_debug.c +index dde03231..1a2db507 100644 +--- a/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_debug.c ++++ b/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_debug.c +@@ -4193,7 +4193,7 @@ void phydm_enable_big_jump(void *dm_void, char input[][16], u32 *_used, + return; + + for (i = 0; i < 5; i++) { +- if (input[i + 1]) { ++ if (input[i + 1][0]) { + PHYDM_SSCANF(input[i + 1], DCMD_HEX, &dm_value[i]); + input_idx++; + } +@@ -5190,7 +5190,7 @@ void phydm_spur_detect_dbg(void *dm_void, char input[][16], u32 *_used, + "{5: Adjust CSI weight threshold} {0:-,1:+} {th offset}\n"); + } else { + for (i = 0; i < 10; i++) { +- if (input[i + 1]) ++ if (input[i + 1][0]) + PHYDM_SSCANF(input[i + 1], DCMD_DECIMAL, + &var1[i]); + } +@@ -5843,7 +5843,7 @@ s32 phydm_cmd(struct dm_struct *dm, char *input, u32 in_len, u8 flag, + { + char *token; + u32 argc = 0; +- char argv[MAX_ARGC][MAX_ARGV]; ++ char argv[MAX_ARGC][MAX_ARGV] = {0}; + + do { + token = strsep(&input, ", "); +diff --git a/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_dig.c b/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_dig.c +index 3798f989..66f3f358 100644 +--- a/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_dig.c ++++ b/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_dig.c +@@ -969,7 +969,7 @@ void phydm_hwigi_dbg(void *dm_void, char input[][16], u32 *_used, + "Reset all hwigi : {5}\n"); + } else { + for (i = 0; i < 7; i++) { +- if (input[i + 1]) ++ if (input[i + 1][0]) + PHYDM_SSCANF(input[i + 1], DCMD_DECIMAL, + &var1[i]); + } +diff --git a/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_dynamictxpower.c b/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_dynamictxpower.c +index 2ccbd1ae..c8ee0bc7 100644 +--- a/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_dynamictxpower.c ++++ b/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_dynamictxpower.c +@@ -653,7 +653,7 @@ void phydm_dtp_debug(void *dm_void, char input[][16], u32 *_used, char *output, + #endif + } else { + for (i = 0; i < 7; i++) { +- if (input[i + 1]) ++ if (input[i + 1][0]) + PHYDM_SSCANF(input[i + 1], DCMD_DECIMAL, + &var1[i]); + } +diff --git a/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_lna_sat.c b/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_lna_sat.c +index 204765ee..d5246724 100644 +--- a/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_lna_sat.c ++++ b/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_lna_sat.c +@@ -1480,7 +1480,7 @@ void phydm_auto_agc_tab_debug(void *dm_void, char input[][16], u32 *_used, + } else { + PHYDM_SSCANF(input[1], DCMD_DECIMAL, &var1[0]); + for (i = 1; i < 10; i++) { +- if (input[i + 1]) ++ if (input[i + 1][0]) + PHYDM_SSCANF(input[i + 1], DCMD_DECIMAL, + &var1[i]); + } +@@ -1565,7 +1565,7 @@ void phydm_lna_sat_debug(void *dm_void, char input[][16], u32 *_used, + PHYDM_SSCANF(input[1], DCMD_DECIMAL, &var1[0]); + + for (i = 1; i < 10; i++) { +- if (input[i + 1]) ++ if (input[i + 1][0]) + PHYDM_SSCANF(input[i + 1], DCMD_DECIMAL, + &var1[i]); + } +diff --git a/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_pathdiv.c b/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_pathdiv.c +index a6b347cf..6b5043d6 100644 +--- a/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_pathdiv.c ++++ b/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_pathdiv.c +@@ -519,7 +519,7 @@ void phydm_pathdiv_debug_8814a(void *dm_void, char input[][16], u32 *_used, + u8 i, input_idx = 0; + + for (i = 0; i < 5; i++) { +- if (input[i + 1]) { ++ if (input[i + 1][0]) { + PHYDM_SSCANF(input[i + 1], DCMD_HEX, &dm_value[i]); + input_idx++; + } +diff --git a/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_pmac_tx_setting.c b/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_pmac_tx_setting.c +index 296f39c3..caa6a41d 100644 +--- a/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_pmac_tx_setting.c ++++ b/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_pmac_tx_setting.c +@@ -493,7 +493,7 @@ void phydm_pmac_tx_dbg(void *dm_void, char input[][16], u32 *_used, + "[pmac_tx] basic : {1} {rate_idx}(only 1M & 6M) {count}\n"); + } else { + for (i = 1; i < 7; i++) { +- if (input[i + 1]) { ++ if (input[i + 1][0]) { + PHYDM_SSCANF(input[i + 1], DCMD_DECIMAL, + &var[i]); + } +diff --git a/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_pow_train.c b/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_pow_train.c +index 56bc2411..c5d61e02 100644 +--- a/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_pow_train.c ++++ b/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_pow_train.c +@@ -149,7 +149,7 @@ void phydm_pow_train_debug( + "{0: Auto PT, 1:enable, 2: disable}\n"); + } else { + for (i = 0; i < 10; i++) { +- if (input[i + 1]) ++ if (input[i + 1][0]) + PHYDM_SSCANF(input[i + 1], DCMD_HEX, &var1[i]); + } + +diff --git a/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_smt_ant.c b/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_smt_ant.c +index 8e805b3c..1678cc40 100644 +--- a/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_smt_ant.c ++++ b/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_smt_ant.c +@@ -319,7 +319,7 @@ void phydm_cumitek_smt_ant_debug( + } else if (dm_value[0] == 2) { /*@fix tx pattern*/ + + for (i = 1; i < 4; i++) { +- if (input[i + 1]) ++ if (input[i + 1][0]) + PHYDM_SSCANF(input[i + 1], DCMD_DECIMAL, &dm_value[i]); + } + +@@ -333,7 +333,7 @@ void phydm_cumitek_smt_ant_debug( + u8 table_path_b[8] = {0}; + + for (i = 1; i < 4; i++) { +- if (input[i + 1]) ++ if (input[i + 1][0]) + PHYDM_SSCANF(input[i + 1], DCMD_HEX, &dm_value[i]); + } + +diff --git a/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_soml.c b/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_soml.c +index cd4001af..315db53f 100644 +--- a/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_soml.c ++++ b/drivers/net/wireless/realtek/rtl8822ce/hal/phydm/phydm_soml.c +@@ -316,7 +316,7 @@ void phydm_soml_debug(void *dm_void, char input[][16], u32 *_used, + return; + + for (i = 0; i < 5; i++) { +- if (input[i + 1]) { ++ if (input[i + 1][0]) { + PHYDM_SSCANF(input[i + 1], DCMD_DECIMAL, &dm_value[i]); + input_idx++; + } +-- +2.49.0 + diff --git a/pkgs/kernels/r36/0002-ANDURIL-Add-some-missing-BASE_CFLAGS.patch b/pkgs/kernels/r36/0002-ANDURIL-Add-some-missing-BASE_CFLAGS.patch new file mode 100644 index 00000000..0672ba5b --- /dev/null +++ b/pkgs/kernels/r36/0002-ANDURIL-Add-some-missing-BASE_CFLAGS.patch @@ -0,0 +1,32 @@ +From 31473d1beb229e885073d17a4d547e3015fe2791 Mon Sep 17 00:00:00 2001 +From: Elliot Berman +Date: Tue, 20 May 2025 10:01:39 -0700 +Subject: [PATCH 2/3] ANDURIL: Add some missing BASE_CFLAGS + +After inspecting KBUILD_CFLAGS, observed some flags from the conftest +were missing. Add -fshort-wchar to avoid the following conftest +false-negative: + +/build/l4t-oot-sources/out/nvidia-linux-header/include/linux/efi.h:1122:17: error: passing argument 1 of 'get_var' from incompatible pointer type [8;;https://gcc.gnu.org/onlinedocs/gcc-14.2.0/gcc/Warning-Options.html#index-Wincompatible-pointer-types-Wincompatible-pointer-types8;;] + +Signed-off-by: Elliot Berman +--- + kernel-open/conftest.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/kernel-open/conftest.sh b/kernel-open/conftest.sh +index 391374f..b89a15e 100644 +--- a/kernel-open/conftest.sh ++++ b/kernel-open/conftest.sh +@@ -88,7 +88,7 @@ build_cflags() { + ISYSTEM=`$CC -print-file-name=include 2> /dev/null` + BASE_CFLAGS="-O2 -D__KERNEL__ \ + -DKBUILD_BASENAME=\"#conftest$$\" -DKBUILD_MODNAME=\"#conftest$$\" \ +--nostdinc -isystem $ISYSTEM \ ++-nostdinc -isystem $ISYSTEM -fshort-wchar -funsigned-char \ + -Wno-implicit-function-declaration -Wno-strict-prototypes" + + if [ "$OUTPUT" != "$SOURCES" ]; then +-- +2.49.0 + diff --git a/pkgs/kernels/r36/0002-sound-Fix-include-path-for-tegra-virt-alt-include.patch b/pkgs/kernels/r36/0002-sound-Fix-include-path-for-tegra-virt-alt-include.patch new file mode 100644 index 00000000..bf129087 --- /dev/null +++ b/pkgs/kernels/r36/0002-sound-Fix-include-path-for-tegra-virt-alt-include.patch @@ -0,0 +1,28 @@ +From 8ccff3029f2d8bf626adc1dcd44924e86ec91ba8 Mon Sep 17 00:00:00 2001 +From: Elliot Berman +Date: Fri, 25 Apr 2025 08:40:40 -0700 +Subject: [PATCH 2/2] sound: Fix include path for tegra-virt-alt/include + +overlay isn't defined. + +Signed-off-by: Elliot Berman +--- + sound/soc/tegra-virt-alt/Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/sound/soc/tegra-virt-alt/Makefile b/sound/soc/tegra-virt-alt/Makefile +index 77bad808..2853f096 100644 +--- a/sound/soc/tegra-virt-alt/Makefile ++++ b/sound/soc/tegra-virt-alt/Makefile +@@ -4,7 +4,7 @@ + GCOV_PROFILE := y + + subdir-ccflags-y += -Werror +-ccflags-y += -I$(overlay)/$(src)/../tegra-virt-alt/include/ ++ccflags-y += -I$(srctree.nvidia-oot)/sound/soc/tegra-virt-alt/include/ + ccflags-y += -I$(overlay)/$(src)/../codecs + ccflags-y += -I$(srctree.nvidia-oot)/sound/soc/tegra-virt-alt/nvaudio_ivc/ + +-- +2.49.0 + diff --git a/pkgs/kernels/r36/0003-ANDURIL-Update-drm_gem_object_vmap_has_map_arg-test.patch b/pkgs/kernels/r36/0003-ANDURIL-Update-drm_gem_object_vmap_has_map_arg-test.patch new file mode 100644 index 00000000..7dbf637d --- /dev/null +++ b/pkgs/kernels/r36/0003-ANDURIL-Update-drm_gem_object_vmap_has_map_arg-test.patch @@ -0,0 +1,30 @@ +From f1a1f36fcac33d65488e63ad16ffa510553fb968 Mon Sep 17 00:00:00 2001 +From: Elliot Berman +Date: Tue, 20 May 2025 10:06:14 -0700 +Subject: [PATCH 3/3] ANDURIL: Update drm_gem_object_vmap_has_map_arg test + +Kernel has renamed "struct dma_buf_map" as "struct iosys_map" and GCC +doesn't like the implicit cast. Use untyped pointer to make GCC fine +with it. + +Signed-off-by: Elliot Berman +--- + kernel-open/conftest.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/kernel-open/conftest.sh b/kernel-open/conftest.sh +index b89a15e..971acb3 100644 +--- a/kernel-open/conftest.sh ++++ b/kernel-open/conftest.sh +@@ -5049,7 +5049,7 @@ compile_test() { + CODE=" + #include + int conftest_drm_gem_object_vmap_has_map_arg( +- struct drm_gem_object *obj, struct dma_buf_map *map) { ++ struct drm_gem_object *obj, void *map) { + return obj->funcs->vmap(obj, map); + }" + +-- +2.49.0 + diff --git a/pkgs/kernels/r36/Makefile.diff b/pkgs/kernels/r36/Makefile.diff new file mode 100644 index 00000000..201b83fa --- /dev/null +++ b/pkgs/kernels/r36/Makefile.diff @@ -0,0 +1,38 @@ +diff --git a/source/Makefile b/source/Makefile +index ad7dc07..602ddf0 100644 +--- a/source/Makefile ++++ b/source/Makefile +@@ -112,25 +112,22 @@ define display-cmd + KERNELRELEASE="" \ + SYSSRC=$(NVIDIA_HEADERS) \ + SYSOUT=$(NVIDIA_HEADERS) \ +- SYSSRCHOST1X=$(MAKEFILE_DIR)/nvidia-oot/drivers/gpu/host1x/include \ +- CC=$(CROSS_COMPILE)gcc \ +- LD=$(CROSS_COMPILE)ld.bfd \ +- AR=$(CROSS_COMPILE)ar \ +- CXX=$(CROSS_COMPILE)g++ \ +- OBJCOPY=$(CROSS_COMPILE)objcopy ++ SYSSRCHOST1X=$(MAKEFILE_DIR)/nvidia-oot/drivers/gpu/host1x/include + endef + + + nvidia-headers: nvidia-oot + mkdir -p $(NVIDIA_HEADERS) +- cp -LR $(KERNEL_HEADERS)/* $(NVIDIA_HEADERS) ++ cp -HR $(KERNEL_HEADERS)/* $(NVIDIA_HEADERS) ++ chmod -R u+w $(NVIDIA_HEADERS) + if [ "$(KERNEL_HEADERS)" != "$(KERNEL_OUTPUT)" ] ; then \ +- cp -LR $(KERNEL_OUTPUT)/include/* $(NVIDIA_HEADERS)/include/ ; \ +- cp -LR $(KERNEL_OUTPUT)/arch/arm64/include/* $(NVIDIA_HEADERS)/arch/arm64/include/ ; \ +- cp -LR $(KERNEL_OUTPUT)/scripts/* $(NVIDIA_HEADERS)/scripts/ ; \ ++ cp -HR $(KERNEL_OUTPUT)/include/* $(NVIDIA_HEADERS)/include/ ; \ ++ cp -HR $(KERNEL_OUTPUT)/arch/arm64/include/* $(NVIDIA_HEADERS)/arch/arm64/include/ ; \ ++ cp -HR $(KERNEL_OUTPUT)/scripts/* $(NVIDIA_HEADERS)/scripts/ ; \ + cp $(KERNEL_OUTPUT)/System.map $(NVIDIA_HEADERS)/ || true ; \ + fi +- cp -LR $(MAKEFILE_DIR)/nvidia-oot/include/* $(NVIDIA_HEADERS)/include/ ++ chmod -R u+w $(NVIDIA_HEADERS) ++ cp -HR $(MAKEFILE_DIR)/nvidia-oot/include/* $(NVIDIA_HEADERS)/include/ + cat $(KERNEL_OUTPUT)/Module.symvers $(MAKEFILE_DIR)/nvidia-oot/Module.symvers > \ + $(NVIDIA_HEADERS)/Module.symvers + diff --git a/pkgs/kernels/r36/default.nix b/pkgs/kernels/r36/default.nix new file mode 100644 index 00000000..02fb0f77 --- /dev/null +++ b/pkgs/kernels/r36/default.nix @@ -0,0 +1,123 @@ +{ applyPatches +, lib +, fetchFromGitHub +, l4t-xusb-firmware +, realtime ? false +, kernelPatches ? [ ] +, structuredExtraConfig ? { } +, argsOverride ? { } +, buildLinux +, gitRepos +, ... +}@args: +buildLinux (args // { + # See Makefile in kernel source root for VERSION/PATCHLEVEL/SUBLEVEL. + version = "5.15.148"; + extraMeta.branch = "5.15"; + + defconfig = "defconfig"; + + # https://github.com/NixOS/nixpkgs/pull/366004 + # introduced a breaking change that if a module is declared but it is not being used it will fail + # if you try to suppress each of he errors e.g. + # REISERFS_FS_SECURITY = lib.mkForce unset; within structuredExtraConfig + # that list runs to a long 100+ modules so we go back to the previous default and ignore them + ignoreConfigErrors = true; + + # disabling the dependency on the common-config would seem appropriate as we define our own defconfig + # however, it seems that some of the settings for e.g. fw loading are only made available there. + # TODO: a future task could be to set this, disable ignoreConfigErrors and add the needed modules to the + # structuredExtraConfig below. + #enableCommonConfig = false; + + # Using applyPatches here since it's not obvious how to append an extra + # postPatch. This is not very efficient. + src = gitRepos."kernel/kernel-jammy-src"; + autoModules = false; + features = { }; # TODO: Why is this needed in nixpkgs master (but not NixOS 22.05)? + + kernelPatches = [ + { + name = "ipu: Depend on x86"; + patch = ./0001-ipu-Depend-on-x86.patch; + } + ] ++ kernelPatches; + + structuredExtraConfig = with lib.kernel; { + # stage-1 links /lib/firmware to the /nix/store path in the initramfs. + # However, since it's builtin and not a module, that's too late, since + # the kernel will have already tried loading! + EXTRA_FIRMWARE_DIR = freeform "${l4t-xusb-firmware}/lib/firmware"; + + # Override the default CMA_SIZE_MBYTES=32M setting in common-config.nix with the default from tegra_defconfig + # Otherwise, nvidia's driver craps out + CMA_SIZE_MBYTES = lib.mkForce (freeform "64"); + + ### So nat.service and firewall work ### + NF_TABLES = module; # This one should probably be in common-config.nix + # this NFT_NAT is not actually being set. when build with enableCommonConfig = false; + # and not ignoreConfigErrors = true; it will fail with error about unused option + # unused means that it wanted to set it as a module, but make oldconfig didn't ask it about that option, + # so it didn't get a chance to set it. + NFT_NAT = module; + NFT_MASQ = module; + NFT_REJECT = module; + NFT_COMPAT = module; + NFT_LOG = module; + NFT_COUNTER = module; + + # search for "ip46tables" in nixpkgs and find all the -m options. + # Enable the corresponding Kconfigs + # TODO: nixpkgs should turn these on themselves. + NETFILTER_XT_MATCH_PKTTYPE = module; + NETFILTER_XT_MATCH_COMMENT = module; + NETFILTER_XT_MATCH_CONNTRACK = module; + NETFILTER_XT_MATCH_LIMIT = module; + NETFILTER_XT_MATCH_MARK = module; + NETFILTER_XT_MATCH_MULTIPORT = module; + + IP_NF_MATCH_RPFILTER = module; + + # IPv6 is enabled by default and without some of these `firewall.service` will explode. + IP6_NF_MATCH_AH = module; + IP6_NF_MATCH_EUI64 = module; + IP6_NF_MATCH_FRAG = module; + IP6_NF_MATCH_OPTS = module; + IP6_NF_MATCH_HL = module; + IP6_NF_MATCH_IPV6HEADER = module; + IP6_NF_MATCH_MH = module; + IP6_NF_MATCH_RPFILTER = module; + IP6_NF_MATCH_RT = module; + IP6_NF_MATCH_SRH = module; + + # Needed since mdadm stuff is currently unconditionally included in the initrd + # This will hopefully get changed, see: https://github.com/NixOS/nixpkgs/pull/183314 + MD_LINEAR = module; + MD_RAID0 = module; + MD_RAID1 = module; + MD_RAID10 = module; + MD_RAID456 = module; + + # Needed for booting from USB + USB_UAS = module; + + FW_LOADER_COMPRESS_XZ = yes; + FW_LOADER_COMPRESS_ZSTD = yes; + + # Restore default LSM from security/Kconfig. Undoes Nvidia downstream changes. + LSM = freeform "landlock,lockdown,yama,loadpin,safesetid,integrity,selinux,smack,tomoyo,apparmor,bpf"; + } // lib.optionalAttrs realtime { + PREEMPT_VOLUNTARY = lib.mkForce no; # Disable the one set in common-config.nix + # These are the options enabled/disabled by source/generic_rt_build.sh (this file comes after source/source_sync.sh) + PREEMPT_RT = yes; + DEBUG_PREEMPT = no; + KVM = no; + EMBEDDED = yes; + NAMESPACES = yes; + CPU_IDLE_TEGRA18X = no; + CPU_FREQ_GOV_INTERACTIVE = no; + CPU_FREQ_TIMES = no; + FAIR_GROUP_SCHED = no; + } // structuredExtraConfig; + +} // argsOverride) diff --git a/pkgs/kernels/r36/devicetree.nix b/pkgs/kernels/r36/devicetree.nix new file mode 100644 index 00000000..4f75ee27 --- /dev/null +++ b/pkgs/kernels/r36/devicetree.nix @@ -0,0 +1,53 @@ +{ bspSrc +, gitRepos +, kernel +, l4tMajorMinorPatchVersion +, lib +, runCommand +, stdenv +, buildPackages +, ... +}: +let + l4t-devicetree-sources = runCommand "l4t-devicetree-sources" { } + (lib.strings.concatStrings + ([ "mkdir -p $out ; cp ${bspSrc}/source/Makefile $out/Makefile ;" ] ++ + lib.lists.forEach + [ "hardware/nvidia/t23x/nv-public" "hardware/nvidia/tegra/nv-public" "kernel-devicetree" ] + ( + project: + '' + mkdir -p "$out/${project}" + cp --no-preserve=all -vr "${lib.attrsets.attrByPath [project] 0 gitRepos}"/. "$out/${project}" + '' + ))); +in +stdenv.mkDerivation (finalAttrs: { + pname = "l4t-devicetree"; + version = "${l4tMajorMinorPatchVersion}"; + src = l4t-devicetree-sources; + + inherit kernel; + + nativeBuildInputs = finalAttrs.kernel.moduleBuildDependencies; + depsBuildBuild = [ buildPackages.stdenv.cc ]; + + # See bspSrc/source/Makefile + makeFlags = [ + "KERNEL_HEADERS=${finalAttrs.kernel.dev}/lib/modules/${finalAttrs.kernel.modDirVersion}/source" + "KERNEL_OUTPUT=${finalAttrs.kernel.dev}/lib/modules/${finalAttrs.kernel.modDirVersion}/build" + ]; + + buildFlags = "dtbs"; + + installPhase = '' + runHook preInstall + + mkdir -p "$out"/ + # See kernel-devicetree/generic-dts/Makefile + # The dtbs are installed to kernel-devicetree/generic-dts/dtbs + install -Dm644 kernel-devicetree/generic-dts/dtbs/* "$out/" + + runHook postInstall + ''; +}) diff --git a/pkgs/kernels/r36/oot-modules.nix b/pkgs/kernels/r36/oot-modules.nix new file mode 100644 index 00000000..a90f7846 --- /dev/null +++ b/pkgs/kernels/r36/oot-modules.nix @@ -0,0 +1,94 @@ +{ applyPatches +, bspSrc +, buildPackages +, gitRepos +, kernel +, l4tMajorMinorPatchVersion +, lib +, runCommand +, stdenv +, ... +}: +let + patchedBsp = applyPatches { + name = "patchedBsp"; + src = bspSrc; + patches = [ + ./Makefile.diff + ]; + }; + + mkCopyProjectCommand = project: '' + mkdir -p "$out/${project.name}" + cp --no-preserve=all -vr "${project}"/. "$out/${project.name}" + ''; + + l4t-oot-projects = [ + (gitRepos.hwpm.overrideAttrs { name = "hwpm"; }) + (applyPatches { + name = "nvidia-oot"; + src = gitRepos.nvidia-oot; + patches = [ + ./0001-rtl8822ce-Fix-Werror-address.patch + ./0002-sound-Fix-include-path-for-tegra-virt-alt-include.patch + ]; + }) + (gitRepos.nvgpu.overrideAttrs { name = "nvgpu"; }) + (applyPatches { + name = "nvdisplay"; + src = gitRepos.nvdisplay; + patches = [ + ./0001-nvidia-drm-Guard-nv_dev-in-nv_drm_suspend_resume.patch + ./0002-ANDURIL-Add-some-missing-BASE_CFLAGS.patch + ./0003-ANDURIL-Update-drm_gem_object_vmap_has_map_arg-test.patch + ]; + }) + (applyPatches { + name = "nvethernetrm"; + src = gitRepos.nvethernetrm; + # Some directories in the git repo are RO. + # This works for L4T b/c they use different output directory + postPatch = '' + chmod -R u+w osi + ''; + }) + ]; + + l4t-oot-modules-sources = runCommand "l4t-oot-sources" { } + ( + # Copy the Makefile + '' + mkdir -p "$out" + cp "${patchedBsp}/source/Makefile" "$out/Makefile" + '' + # copy the projects + + lib.strings.concatMapStringsSep "\n" mkCopyProjectCommand l4t-oot-projects + # See bspSrc/source/source_sync.sh symlink at end of file + + '' + ln -vsrf "$out/nvethernetrm" "$out/nvidia-oot/drivers/net/ethernet/nvidia/nvethernet/nvethernetrm" + '' + ); +in +stdenv.mkDerivation (finalAttrs: { + pname = "l4t-oot-modules"; + version = "${l4tMajorMinorPatchVersion}"; + src = l4t-oot-modules-sources; + + inherit kernel; + + nativeBuildInputs = finalAttrs.kernel.moduleBuildDependencies; + depsBuildBuild = [ buildPackages.stdenv.cc ]; + + # See bspSrc/source/Makefile + makeFlags = finalAttrs.kernel.makeFlags ++ [ + "KERNEL_HEADERS=${finalAttrs.kernel.dev}/lib/modules/${finalAttrs.kernel.modDirVersion}/source" + "KERNEL_OUTPUT=${finalAttrs.kernel.dev}/lib/modules/${finalAttrs.kernel.modDirVersion}/build" + "INSTALL_MOD_PATH=$(out)" + ]; + + # # GCC 14.2 seems confused about DRM_MODESET_LOCK_ALL_BEGIN/DRM_MODESET_LOCK_ALL_END in nvdisplay/kernel-open/nvidia-drm/nvidia-drm-drv.c:1344 + # extraMakeFlags = [ "KCFLAGS=-Wno-error=unused-label" ]; + + buildFlags = [ "modules" ]; + installTargets = [ "modules_install" ]; +}) From 925ccda7dafb250eb047d6d03f9ba3da714b597c Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Mon, 5 May 2025 13:25:07 -0700 Subject: [PATCH 08/39] uefi-firmware: Introduce r36.4.3 uefi build This uefi-firmware derivation uses stuart to compile the firmware blob since L4T has added mandatory build scripts that run in the stuart system (a kconfig-esque configuration system). --- device-pkgs/flash-script.nix | 3 + .../r36/capsule-authentication.diff | 14 + pkgs/uefi-firmware/r36/default.nix | 363 ++++++++++++++++++ pkgs/uefi-firmware/r36/pyenv.nix | 100 +++++ .../r36/remove-gcc-prefix-checks.diff | 40 ++ pkgs/uefi-firmware/r36/repeatability.diff | 13 + .../r36/stuart-passthru-compiler-prefix.diff | 18 + 7 files changed, 551 insertions(+) create mode 100644 pkgs/uefi-firmware/r36/capsule-authentication.diff create mode 100644 pkgs/uefi-firmware/r36/default.nix create mode 100644 pkgs/uefi-firmware/r36/pyenv.nix create mode 100644 pkgs/uefi-firmware/r36/remove-gcc-prefix-checks.diff create mode 100644 pkgs/uefi-firmware/r36/repeatability.diff create mode 100644 pkgs/uefi-firmware/r36/stuart-passthru-compiler-prefix.diff diff --git a/device-pkgs/flash-script.nix b/device-pkgs/flash-script.nix index 830f9a40..7a0fd56c 100644 --- a/device-pkgs/flash-script.nix +++ b/device-pkgs/flash-script.nix @@ -46,6 +46,9 @@ ${lib.optionalString (dtbsDir != null) "cp -r ${dtbsDir}/. kernel/dtb/"} ${lib.optionalString (uefi-firmware != null) '' cp ${uefi-firmware}/uefi_jetson.bin bootloader/uefi_jetson.bin + if [ -e "${uefi-firmware}/uefi_jetson_minimal.bin" ] ; then + cp ${uefi-firmware}/uefi_jetson_minimal.bin bootloader/uefi_jetson_minimal.bin + fi # For normal NixOS usage, we'd probably use systemd-boot or GRUB instead, # but lets replace the upstream L4TLauncher EFI payload anyway diff --git a/pkgs/uefi-firmware/r36/capsule-authentication.diff b/pkgs/uefi-firmware/r36/capsule-authentication.diff new file mode 100644 index 00000000..0c4ac0f5 --- /dev/null +++ b/pkgs/uefi-firmware/r36/capsule-authentication.diff @@ -0,0 +1,14 @@ +diff --git a/Platform/NVIDIA/NVIDIA.common.dsc.inc b/Platform/NVIDIA/NVIDIA.common.dsc.inc +index 8e8ddbbe..84b8a84b 100644 +--- a/Platform/NVIDIA/NVIDIA.common.dsc.inc ++++ b/Platform/NVIDIA/NVIDIA.common.dsc.inc +@@ -945,6 +945,9 @@ gEfiSecurityPkgTokenSpaceGuid.PcdSingleBootApplicationGuid|{ GUID("cbf481fb-b373 + gNVIDIATokenSpaceGuid.PcdNvLogToScratchRegs|TRUE + !endif + ++ !include PublicCapsuleKey.cer.gEfiSecurityPkgTokenSpaceGuid.PcdPkcs7CertBuffer.inc ++ !include PublicCapsuleKey.cer.gFmpDevicePkgTokenSpaceGuid.PcdFmpDevicePkcs7CertBufferXdr.inc ++ + [PcdsDynamicDefault] + # + # Enable emulated variable NV mode in variable driver. diff --git a/pkgs/uefi-firmware/r36/default.nix b/pkgs/uefi-firmware/r36/default.nix new file mode 100644 index 00000000..1a2dd107 --- /dev/null +++ b/pkgs/uefi-firmware/r36/default.nix @@ -0,0 +1,363 @@ +{ lib +, stdenv +, callPackage +, buildPackages +, fetchFromGitHub +, fetchpatch +, runCommand +, acpica-tools +, dtc +, python3 +, unixtools +, libuuid +, which +, nasm +, applyPatches +, nukeReferences +, l4tMajorMinorPatchVersion +, uniqueHash ? "" +, # Optional path to a boot logo that will be converted and cropped into the format required + bootLogo ? null +, # Patches to apply to edk2-nvidia source tree + edk2NvidiaPatches ? [ ] +, # Patches to apply to edk2 source tree + edk2UefiPatches ? [ ] +, debugMode ? false +, errorLevelInfo ? debugMode +, # Enables a bunch more info messages + + # The root certificate (in PEM format) for authenticating capsule updates. By + # default, EDK2 authenticates using a test keypair commited upstream. + trustedPublicCertPemFile ? null +}: + +let + # TODO: Move this generation out of uefi-firmware.nix, because this .nix + # file is callPackage'd using an aarch64 version of nixpkgs, and we don't + # want to have to recompilie imagemagick + bootLogoVariants = runCommand "uefi-bootlogo" { nativeBuildInputs = [ buildPackages.buildPackages.imagemagick ]; } '' + mkdir -p "$out" + convert "${bootLogo}" -resize 1920x1080 -gravity Center -extent 1920x1080 -format bmp -define bmp:format=bmp3 "$out/logo1080.bmp" + convert "${bootLogo}" -resize 1280x720 -gravity Center -extent 1280x720 -format bmp -define bmp:format=bmp3 "$out/logo720.bmp" + convert "${bootLogo}" -resize 640x480 -gravity Center -extent 640x480 -format bmp -define bmp:format=bmp3 "$out/logo480.bmp" + ''; + + # See: https://github.com/NVIDIA/edk2-edkrepo-manifest/blob/main/edk2-nvidia/Platform/NVIDIAPlatformsManifest.xml + edk2-src = applyPatches { + name = "edk2"; + src = (fetchFromGitHub { + owner = "NVIDIA"; + repo = "edk2"; + rev = "r${l4tMajorMinorPatchVersion}"; + fetchSubmodules = true; + hash = "sha256-TBroMmFyZt6ypooDtSzScjA3POPr76rJKfLQfAkRwdU="; + }).overrideAttrs + # see https://github.com/NixOS/nixpkgs/pull/354193 + { + env = { + GIT_CONFIG_COUNT = 1; + GIT_CONFIG_KEY_0 = "url.https://github.com/tianocore/edk2-subhook.git.insteadOf"; + GIT_CONFIG_VALUE_0 = "https://github.com/Zeex/subhook.git"; + }; + }; + # see https://github.com/NixOS/nixpkgs/blob/9e7e65f7c5ec6a9cfb4ca7239c78a3d237c160ac/pkgs/by-name/ed/edk2/package.nix#L51-L98 + patches = [ + # pass targetPrefix as an env var + (fetchpatch { + url = "https://src.fedoraproject.org/rpms/edk2/raw/08f2354cd280b4ce5a7888aa85cf520e042955c3/f/0021-Tweak-the-tools_def-to-support-cross-compiling.patch"; + hash = "sha256-E1/fiFNVx0aB1kOej2DJ2DlBIs9tAAcxoedym2Zhjxw="; + }) + # https://github.com/tianocore/edk2/pull/5658 + (fetchpatch { + name = "fix-cross-compilation-antlr-dlg.patch"; + url = "https://github.com/tianocore/edk2/commit/a34ff4a8f69a7b8a52b9b299153a8fac702c7df1.patch"; + hash = "sha256-u+niqwjuLV5tNPykW4xhb7PW2XvUmXhx5uvftG1UIbU="; + }) + (fetchpatch { + name = "[PATCH] MdePkg: Check if compiler has __has_builtin before trying to"; + url = "https://github.com/tianocore/edk2/commit/57a890fd03356350a1b7a2a0064c8118f44e9958.patch"; + hash = "sha256-on+yJOlH9B2cD1CS9b8Pmg99pzrlrZT6/n4qPHAbDcA="; + }) + + ./remove-gcc-prefix-checks.diff + ]; + + # EDK2 is currently working on OpenSSL 3.3.x support. Use buildpackages.openssl again, + # when "https://github.com/tianocore/edk2/pull/6167" is merged. + postPatch = '' + # We don't want EDK2 to keep track of OpenSSL, they're frankly bad at it. + rm -r CryptoPkg/Library/OpensslLib/openssl + mkdir -p CryptoPkg/Library/OpensslLib/openssl + ( + cd CryptoPkg/Library/OpensslLib/openssl + tar --strip-components=1 -xf ${buildPackages.openssl_3.src} + + # Apply OpenSSL patches. + ${lib.pipe buildPackages.openssl_3.patches [ + (builtins.filter ( + patch: + !builtins.elem (baseNameOf patch) [ + # Exclude patches not required in this context. + "nix-ssl-cert-file.patch" + "openssl-disable-kernel-detection.patch" + "use-etc-ssl-certs-darwin.patch" + "use-etc-ssl-certs.patch" + ] + )) + (map (patch: "patch -p1 < ${patch}\n")) + lib.concatStrings + ]} + ) + + # enable compilation using Clang + # https://bugzilla.tianocore.org/show_bug.cgi?id=4620 + substituteInPlace BaseTools/Conf/tools_def.template --replace-fail \ + 'DEFINE CLANGPDB_WARNING_OVERRIDES = ' \ + 'DEFINE CLANGPDB_WARNING_OVERRIDES = -Wno-unneeded-internal-declaration ' + ''; + }; + + edk2-platforms = fetchFromGitHub rec { + owner = "NVIDIA"; + repo = "edk2-platforms"; + name = repo; + rev = "r${l4tMajorMinorPatchVersion}"; + sha256 = "sha256-27dKEi66UWBgJi3Sb2/naeeSC2CJ5+Dbtw8e0o5Y/Hg="; + }; + + edk2-non-osi = fetchFromGitHub rec { + owner = "NVIDIA"; + repo = "edk2-non-osi"; + name = repo; + rev = "r${l4tMajorMinorPatchVersion}"; + sha256 = "sha256-FnznH8KsB3rD7sL5Lx2GuQZRPZ+uqAYqenjk+7x89mE="; + }; + + edk2-nvidia = applyPatches { + name = "edk2-nvidia"; + src = fetchFromGitHub { + owner = "NVIDIA"; + repo = "edk2-nvidia"; + rev = "r${l4tMajorMinorPatchVersion}"; + sha256 = "sha256-Ri+0vrxvd7eE7TP/KBM0ET2jX0fupdC3+Dli+IshUP8="; + }; + patches = edk2NvidiaPatches ++ [ + ###### git log r36.4.3-updates ^r36.4.3 ###### + (fetchpatch { + # fix: Leave DisplayHandoff enabled on ACPI boot + url = "https://github.com/NVIDIA/edk2-nvidia/commit/7b2c3a5b0b1639a71df6770152d547f2d27740a5.patch"; + hash = "sha256-ONVHv0KhO4Xwr7dJUxNfsZJNesxBzCQAnI7/sWZHrCA="; + }) + (fetchpatch { + # fix: Early free of device nodes in AcpiDtbSsdtGenerator + url = "https://github.com/NVIDIA/edk2-nvidia/commit/cecfa36d3b600e932880d7d97d17c8080d87d97b.patch"; + hash = "sha256-lT6tunO3mmAzv4MtFmH+gpkWvvhH9ejgxMumS3s4qSY="; + }) + (fetchpatch { + # fix: bug in block erase logic + url = "https://github.com/NVIDIA/edk2-nvidia/commit/fc333bd6dcb7e0921303f35ee01055ef33df444b.patch"; + hash = "sha256-1IxQYgmpcGdF7ckhmmxa2Y+P59qXYTRvV7lrb2xbQl0="; + }) + (fetchpatch { + # fix: bug in secureboot hash compute and optimize reads + url = "https://github.com/NVIDIA/edk2-nvidia/commit/9d4a790e7786d9699405f15927f2fc391915bb19.patch"; + hash = "sha256-MVzWEzzKPRfDWiqgGnfl9dwgDnPLJxjsvijH5jM2Pgw="; + }) + # skip chore(github): Migrate to upload-artifact@v4 (#126) b/c not needed, could be added + (fetchpatch { + # fix: switch default value of PcdSocDisplayHandoffMode to Auto (#125) + url = "https://github.com/NVIDIA/edk2-nvidia/commit/a85e6cecf3e37eda685c7c8c9041a570a6397640.patch"; + hash = "sha256-f4XSCEYE1NOF4sr/OfHxcD/n06o5aod33+6TWyMaoRs="; + }) + ##################################################### + + # Fix Eqos driver to use correct TX clock name + # PR: https://github.com/NVIDIA/edk2-nvidia/pull/76 + (fetchpatch { + url = "https://github.com/NVIDIA/edk2-nvidia/commit/26f50dc3f0f041d20352d1656851c77f43c7238e.patch"; + hash = "sha256-cc+eGLFHZ6JQQix1VWe/UOkGunAzPb8jM9SXa9ScIn8="; + }) + + ./stuart-passthru-compiler-prefix.diff + ./repeatability.diff + ] ++ lib.optionals (trustedPublicCertPemFile != null) [ + ./capsule-authentication.diff + ]; + postPatch = lib.optionalString errorLevelInfo '' + sed -i 's#PcdDebugPrintErrorLevel|.*#PcdDebugPrintErrorLevel|0x8000004F#' Platform/NVIDIA/NVIDIA.common.dsc.inc + '' + lib.optionalString (bootLogo != null) '' + cp ${bootLogoVariants}/logo1080.bmp Silicon/NVIDIA/Assets/nvidiagray1080.bmp + cp ${bootLogoVariants}/logo720.bmp Silicon/NVIDIA/Assets/nvidiagray720.bmp + cp ${bootLogoVariants}/logo480.bmp Silicon/NVIDIA/Assets/nvidiagray480.bmp + ''; + }; + + edk2-nvidia-non-osi = fetchFromGitHub rec { + owner = "NVIDIA"; + repo = "edk2-nvidia-non-osi"; + name = repo; + rev = "r${l4tMajorMinorPatchVersion}"; + sha256 = "sha256-qQs1jO/h6+j9WLfz1OtYpgZutEeX284BlcUKJWvghEE="; + }; + + pythonEnv = buildPackages.python312.withPackages (ps: callPackage ./pyenv.nix { inherit ps edk2-nvidia; }); + + buildTarget = if debugMode then "DEBUG" else "RELEASE"; + + targetArch = + if stdenv.hostPlatform.isi686 then + "IA32" + else if stdenv.hostPlatform.isx86_64 then + "X64" + else if stdenv.hostPlatform.isAarch32 then + "ARM" + else if stdenv.hostPlatform.isAarch64 then + "AARCH64" + else if stdenv.hostPlatform.isRiscV64 then + "RISCV64" + else if stdenv.hostPlatform.isLoongArch64 then + "LOONGARCH64" + else + throw "Unsupported architecture"; + + mkStuartDrv = platformBuild: + # TODO: edk2.mkDerivation doesn't have a way to override the edk version used! + # Make it not via passthru ? + stdenv.mkDerivation (finalAttrs: { + pname = "${platformBuild}-edk2-uefi-${buildTarget}"; + version = l4tMajorMinorPatchVersion; + + srcs = [ + edk2-src + edk2-platforms + edk2-non-osi + edk2-nvidia + edk2-nvidia-non-osi + ]; + + sourceRoot = "."; + + depsBuildBuild = [ buildPackages.stdenv.cc buildPackages.bash libuuid ]; + nativeBuildInputs = [ + pythonEnv + + # from nixpkgs, for stuart + acpica-tools + dtc + nasm + unixtools.whereis + which + ]; + strictDeps = true; + + # trick taken from https://src.fedoraproject.org/rpms/edk2/blob/08f2354cd280b4ce5a7888aa85cf520e042955c3/f/edk2.spec#_319 + ${"GCC5_${targetArch}_PREFIX"} = stdenv.cc.targetPrefix; + # stuart (nvidia extensions) really wants CROSS_COMPILER_PREFIX to look like this + CROSS_COMPILER_PREFIX = "${stdenv.cc}/bin/${stdenv.cc.targetPrefix}"; + # DANGER: If someone else modifies PYTHONPATH, then we lose this + # We're okay when this was written. + PYTHONPATH = "${edk2-nvidia}/Silicon/NVIDIA"; + # Version is ${FIRMWARE_VERSION_BASE}-${GIT_SYNC_REVISION} + FIRMWARE_VERSION_BASE = "${l4tMajorMinorPatchVersion}"; + + # see nixpkgs/pkgs/by-name/ed/edk2/package.nix + hardeningDisable = [ + "format" + "fortify" + ]; + + patches = edk2UefiPatches; + + patchPhase = '' + find . -name \*_ext_dep.yaml -delete + patchShebangs . + ''; + + configurePhase = '' + runHook preConfigure + + unset AR + unset AS + unset CC + unset CXX + unset LD + unset NM + unset OBJCOPY + unset OBJDUMP + unset RANLIB + unset READELF + unset SIZE + unset STRINGS + unset STRIP + + export WORKSPACE=$(pwd) + GIT_SYNC_REVISION=$(printf "%s-%s" "${uniqueHash}" "$out" | sha256sum | head -c 12) + CFLAGS=$NIX_CFLAGS_COMPILE_FOR_BUILD LDFLAGS=$NIX_LDFLAGS_FOR_BUILD python edk2/BaseTools/Edk2ToolsBuild.py -t GCC5 + + ${lib.optionalString (trustedPublicCertPemFile != null) '' + echo Using ${trustedPublicCertPemFile} as public certificate for capsule verification + ${lib.getExe buildPackages.openssl} x509 -outform DER -in ${trustedPublicCertPemFile} -out edk2/PublicCapsuleKey.cer + python3 edk2/BaseTools/Scripts/BinToPcd.py -p gEfiSecurityPkgTokenSpaceGuid.PcdPkcs7CertBuffer -i edk2/PublicCapsuleKey.cer -o edk2/PublicCapsuleKey.cer.gEfiSecurityPkgTokenSpaceGuid.PcdPkcs7CertBuffer.inc + python3 edk2/BaseTools/Scripts/BinToPcd.py -x -p gFmpDevicePkgTokenSpaceGuid.PcdFmpDevicePkcs7CertBufferXdr -i edk2/PublicCapsuleKey.cer -o edk2/PublicCapsuleKey.cer.gFmpDevicePkgTokenSpaceGuid.PcdFmpDevicePkcs7CertBufferXdr.inc + ''} + + runHook postConfigure + ''; + + buildPhase = '' + stuart_setup -c "edk2-nvidia/Platform/NVIDIA/${platformBuild}/PlatformBuild.py" + stuart_build -c "edk2-nvidia/Platform/NVIDIA/${platformBuild}/PlatformBuild.py" --target ${buildTarget} + ''; + + installPhase = '' + runHook preInstall + mv -v Build/*/* $out + mv -v reports/* $out + runHook postInstall + ''; + }); + + jetson-edk2-uefi = mkStuartDrv "Jetson"; + jetson-edk2-uefi-minimal = mkStuartDrv "JetsonMinimal"; + jetson-edk-uefi-stmm-optee = mkStuartDrv "StandaloneMmOptee"; + + uefi-firmware = runCommand "uefi-firmware-${l4tMajorMinorPatchVersion}" + { + nativeBuildInputs = [ python3 nukeReferences ]; + # Keep in sync with FIRMWARE_VERSION_BASE and GIT_SYNC_REVISION above + passthru.biosVersion = "${l4tMajorMinorPatchVersion}-" + lib.substring 0 12 (builtins.hashString "sha256" "${uniqueHash}-${jetson-edk2-uefi}"); + } + '' + mkdir -p $out + python3 ${edk2-nvidia}/Silicon/NVIDIA/edk2nv/FormatUefiBinary.py \ + ${jetson-edk2-uefi}/FV/UEFI_NS.Fv \ + $out/uefi_jetson.bin + + python3 ${edk2-nvidia}/Silicon/NVIDIA/edk2nv/FormatUefiBinary.py \ + ${jetson-edk2-uefi}/AARCH64/L4TLauncher.efi \ + $out/L4TLauncher.efi + + mkdir -p $out/dtbs + for filename in ${jetson-edk2-uefi}/AARCH64/Silicon/NVIDIA/Tegra/DeviceTree/DeviceTree/OUTPUT/*.dtb; do + cp $filename $out/dtbs/$(basename "$filename" ".dtb").dtbo + done + + python3 ${edk2-nvidia}/Silicon/NVIDIA/edk2nv/FormatUefiBinary.py \ + ${jetson-edk2-uefi-minimal}/FV/UEFI_NS.Fv \ + $out/uefi_jetson_minimal.bin + + python3 ${edk2-nvidia}/Silicon/NVIDIA/edk2nv/FormatUefiBinary.py \ + ${jetson-edk-uefi-stmm-optee}/FV/UEFI_MM.Fv \ + $out/standalonemm_optee.bin + + # Get rid of any string references to source(s) + nuke-refs $out/uefi_jetson.bin + nuke-refs $out/uefi_jetson_minimal.bin + nuke-refs $out/standalonemm_optee.bin + ''; +in +{ + inherit uefi-firmware; +} + + diff --git a/pkgs/uefi-firmware/r36/pyenv.nix b/pkgs/uefi-firmware/r36/pyenv.nix new file mode 100644 index 00000000..ba399ac3 --- /dev/null +++ b/pkgs/uefi-firmware/r36/pyenv.nix @@ -0,0 +1,100 @@ +{ fetchFromGitHub +, ps +, ... +}: +with ps; +let + edk2-pytool-library = buildPythonPackage + rec { + pname = "edk2-pytool-library"; + # Bumped from 0.19.3 for edk2-basetools + version = "0.23.2"; + pyproject = true; + + src = fetchPypi { + pname = "edk2_pytool_library"; + inherit version; + hash = "sha256-v33XVI+m2CSOuuxsu2JcBjm0cQmspWQGireQzL6/6rI="; + }; + build-system = [ setuptools-scm ]; + + dependencies = [ + pyasn1 + pyasn1-modules + cryptography + joblib + GitPython + sqlalchemy + pygount + ]; + }; + edk2-pytool-extensions = buildPythonPackage + rec { + pname = "edk2-pytool-extensions"; + version = "0.29.4"; + pyproject = true; + + src = fetchPypi { + pname = "edk2_pytool_extensions"; + inherit version; + hash = "sha256-qHLLHjFKnfgn4aO6n+CxhEqwyR7MaHYOfZxJCDhR13s="; + }; + build-system = [ setuptools-scm ]; + + dependencies = [ + edk2-pytool-library + pyyaml + pefile + semantic-version + GitPython + openpyxl + XlsxWriter + ]; + }; + edk2-basetools = buildPythonPackage + rec { + pname = "edk2-basetools"; + # Want 0.1.48, but it hard-codes a fetch from pypi! + # 0.1.50 is broken, see tianocore/edk2-basetools#124 + version = "0.1.53"; + pyproject = true; + + src = fetchFromGitHub { + owner = "tianocore"; + repo = pname; + rev = "v${version}"; + hash = "sha256-qg54/2fYjX9pJbcu2iryrWIvQc1iOFl8v490zD7IhrA="; + }; + build-system = [ setuptools setuptools-scm pytest pytest-html pytest-cov flake8 build ]; + + dependencies = [ + edk2-pytool-library + antlr4-python3-runtime + ]; + }; + kconfiglib = buildPythonPackage + rec { + pname = "kconfiglib"; + version = "14.1.0"; # Latest when writing, conveniently not pinned + pyproject = true; + + src = fetchPypi { + inherit pname version; + hash = "sha256-vtLMIhb1OOykJVqDpFiNiCNWPN1QEU+GzxomdOYCyTw="; + }; + build-system = [ setuptools ]; + }; +in +[ + # from edk2/pip-requirements.txt + edk2-pytool-library + edk2-pytool-extensions + edk2-basetools + antlr4-python3-runtime + lcov-cobertura + regex + # from edk2-nvidia + kconfiglib + # implicit! + setuptools +] diff --git a/pkgs/uefi-firmware/r36/remove-gcc-prefix-checks.diff b/pkgs/uefi-firmware/r36/remove-gcc-prefix-checks.diff new file mode 100644 index 00000000..cbd5913f --- /dev/null +++ b/pkgs/uefi-firmware/r36/remove-gcc-prefix-checks.diff @@ -0,0 +1,40 @@ +diff --git a/BaseTools/Plugin/LinuxGcc5ToolChain/LinuxGcc5ToolChain.py b/BaseTools/Plugin/LinuxGcc5ToolChain/LinuxGcc5ToolChain.py +index dab7a87997..db18dc8341 100644 +--- a/BaseTools/Plugin/LinuxGcc5ToolChain/LinuxGcc5ToolChain.py ++++ b/BaseTools/Plugin/LinuxGcc5ToolChain/LinuxGcc5ToolChain.py +@@ -21,35 +21,6 @@ class LinuxGcc5ToolChain(IUefiBuildPlugin): + + def do_pre_build(self, thebuilder): + self.Logger = logging.getLogger("LinuxGcc5ToolChain") +- +- # +- # GCC5 - The ARM and AARCH64 compilers need their paths set if available +- if thebuilder.env.GetValue("TOOL_CHAIN_TAG") == "GCC5": +- +- # Start with AARACH64 compiler +- ret = self._check_aarch64() +- if ret != 0: +- self.Logger.critical("Failed in check aarch64") +- return ret +- +- # Check arm compiler +- ret = self._check_arm() +- if ret != 0: +- self.Logger.critical("Failed in check arm") +- return ret +- +- # Check RISCV64 compiler +- ret = self._check_riscv64() +- if ret != 0: +- self.Logger.critical("Failed in check riscv64") +- return ret +- +- # Check LoongArch64 compiler +- ret = self._check_loongarch64() +- if ret != 0: +- self.Logger.critical("Failed in check loongarch64") +- return ret +- + return 0 + + def _check_arm(self): diff --git a/pkgs/uefi-firmware/r36/repeatability.diff b/pkgs/uefi-firmware/r36/repeatability.diff new file mode 100644 index 00000000..24f73828 --- /dev/null +++ b/pkgs/uefi-firmware/r36/repeatability.diff @@ -0,0 +1,13 @@ +diff --git a/Silicon/NVIDIA/edk2nv/stuart/builder.py b/Silicon/NVIDIA/edk2nv/stuart/builder.py +index 692400d2..f4e37d05 100644 +--- a/Silicon/NVIDIA/edk2nv/stuart/builder.py ++++ b/Silicon/NVIDIA/edk2nv/stuart/builder.py +@@ -323,7 +323,7 @@ class NVIDIAPlatformBuilder(UefiBuilder): + self.settings.GetGuid(), reason_dynamic) + + # Set additional build variables +- cur_time = datetime.datetime.now() ++ cur_time = datetime.datetime.fromtimestamp(int(os.getenv("SOURCE_DATE_EPOCH"))) + build_ts = cur_time.astimezone().replace(microsecond=0).isoformat() + self.env.SetValue("BLD_*_BUILD_DATE_TIME", build_ts, reason_dynamic) + epoch_time = int(time.time()) diff --git a/pkgs/uefi-firmware/r36/stuart-passthru-compiler-prefix.diff b/pkgs/uefi-firmware/r36/stuart-passthru-compiler-prefix.diff new file mode 100644 index 00000000..aead7267 --- /dev/null +++ b/pkgs/uefi-firmware/r36/stuart-passthru-compiler-prefix.diff @@ -0,0 +1,18 @@ +diff --git a/Silicon/NVIDIA/edk2nv/stuart/builder.py b/Silicon/NVIDIA/edk2nv/stuart/builder.py +index 692400d2..31cef6ae 100644 +--- a/Silicon/NVIDIA/edk2nv/stuart/builder.py ++++ b/Silicon/NVIDIA/edk2nv/stuart/builder.py +@@ -340,13 +340,6 @@ class NVIDIAPlatformBuilder(UefiBuilder): + str(ws_dir / self.settings.GetReportFile()), + reason_setman) + +- # Set shell env +- shell_environment.GetEnvironment().set_shell_var( +- f"{toolchain_tag}_AARCH64_PREFIX", +- self.settings.GetCrossCompilerPrefix()) +- shell_environment.GetEnvironment().set_shell_var( +- f"DTCPP_PREFIX", +- self.settings.GetCrossCompilerPrefix()) + # - Needed by build.py. + confdir_path = ws_dir / self.settings.GetConfDirName() + shell_environment.GetEnvironment().set_shell_var( From 6c40cc625c8333a22454e44171ce3bf51fcae8dd Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Mon, 5 May 2025 15:30:29 -0700 Subject: [PATCH 09/39] cuda-packages: Build vpi2 for jetpack 5, vpi3 for jetpack 6 --- modules/default.nix | 2 +- pkgs/cuda-packages/vpi-firmware.nix | 18 ++++++++++++++++++ pkgs/cuda-packages/{vpi2 => vpi}/package.nix | 18 +++++++++++++----- pkgs/cuda-packages/{vpi2 => vpi}/vpi2.patch | 0 pkgs/cuda-packages/vpi2-firmware.nix | 10 ---------- pkgs/samples/combined-test.nix | 6 +++--- .../{vpi2-samples.nix => vpi-samples.nix} | 13 ++++++++----- pkgs/samples/{vpi2-test.nix => vpi-test.nix} | 8 ++++---- 8 files changed, 47 insertions(+), 28 deletions(-) create mode 100644 pkgs/cuda-packages/vpi-firmware.nix rename pkgs/cuda-packages/{vpi2 => vpi}/package.nix (56%) rename pkgs/cuda-packages/{vpi2 => vpi}/vpi2.patch (100%) delete mode 100644 pkgs/cuda-packages/vpi2-firmware.nix rename pkgs/samples/{vpi2-samples.nix => vpi-samples.nix} (80%) rename pkgs/samples/{vpi2-test.nix => vpi-test.nix} (80%) diff --git a/modules/default.nix b/modules/default.nix index bc9f1b12..08384058 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -292,7 +292,7 @@ in hardware.firmware = with pkgs.nvidia-jetpack; [ l4t-firmware l4t-xusb-firmware # usb firmware also present in linux-firmware package, but that package is huge and has much more than needed - cudaPackages.vpi2-firmware # Optional, but needed for pva_auth_allowlist firmware file used by VPI2 + cudaPackages.vpi-firmware # Optional, but needed for pva_auth_allowlist firmware file used by VPI2 ]; hardware.deviceTree.enable = true; diff --git a/pkgs/cuda-packages/vpi-firmware.nix b/pkgs/cuda-packages/vpi-firmware.nix new file mode 100644 index 00000000..724c4184 --- /dev/null +++ b/pkgs/cuda-packages/vpi-firmware.nix @@ -0,0 +1,18 @@ +# Needed for vpi${majorVersion}-samples benchmark w/ pva to work +{ debs +, dpkg +, runCommand +, l4tMajorMinorPatchVersion +, lib +, +}: +let + majorVersion = { + "35" = "2"; + "36" = "3"; + }.${lib.versions.major l4tMajorMinorPatchVersion}; +in +runCommand "vpi${majorVersion}-firmware" { nativeBuildInputs = [ dpkg ]; } '' + dpkg-deb -x ${debs.common."libnvvpi${majorVersion}".src} source + install -D source/opt/nvidia/vpi${majorVersion}/lib64/priv/vpi${majorVersion}_pva_auth_allowlist $out/lib/firmware/pva_auth_allowlist +'' diff --git a/pkgs/cuda-packages/vpi2/package.nix b/pkgs/cuda-packages/vpi/package.nix similarity index 56% rename from pkgs/cuda-packages/vpi2/package.nix rename to pkgs/cuda-packages/vpi/package.nix index 209c9836..9565a0c9 100644 --- a/pkgs/cuda-packages/vpi2/package.nix +++ b/pkgs/cuda-packages/vpi/package.nix @@ -6,16 +6,24 @@ , l4t-multimedia , libcufft , libnpp +, l4tMajorMinorPatchVersion +, lib , }: +let + majorVersion = { + "35" = "2"; + "36" = "3"; + }.${lib.versions.major l4tMajorMinorPatchVersion}; +in buildFromDebs { - pname = "vpi2"; - version = debs.common.vpi2-dev.version; + pname = "vpi${majorVersion}"; + version = debs.common."vpi${majorVersion}-dev".version; srcs = [ - debs.common.libnvvpi2.src - debs.common.vpi2-dev.src + debs.common."libnvvpi${majorVersion}".src + debs.common."vpi${majorVersion}-dev".src ]; - sourceRoot = "source/opt/nvidia/vpi2"; + sourceRoot = "source/opt/nvidia/vpi${majorVersion}"; buildInputs = [ l4t-core l4t-3d-core diff --git a/pkgs/cuda-packages/vpi2/vpi2.patch b/pkgs/cuda-packages/vpi/vpi2.patch similarity index 100% rename from pkgs/cuda-packages/vpi2/vpi2.patch rename to pkgs/cuda-packages/vpi/vpi2.patch diff --git a/pkgs/cuda-packages/vpi2-firmware.nix b/pkgs/cuda-packages/vpi2-firmware.nix deleted file mode 100644 index 21ac1d9e..00000000 --- a/pkgs/cuda-packages/vpi2-firmware.nix +++ /dev/null @@ -1,10 +0,0 @@ -# Needed for vpi2-samples benchmark w/ pva to work -{ debs -, dpkg -, runCommand -, -}: -runCommand "vpi2-firmware" { nativeBuildInputs = [ dpkg ]; } '' - dpkg-deb -x ${debs.common.libnvvpi2.src} source - install -D source/opt/nvidia/vpi2/lib64/priv/vpi2_pva_auth_allowlist $out/lib/firmware/pva_auth_allowlist -'' diff --git a/pkgs/samples/combined-test.nix b/pkgs/samples/combined-test.nix index 82b4abc1..142b25df 100644 --- a/pkgs/samples/combined-test.nix +++ b/pkgs/samples/combined-test.nix @@ -3,7 +3,7 @@ , cupti-test , libnvinfer-test , multimedia-test -, vpi2-test +, vpi-test , writeShellApplication }: writeShellApplication { @@ -35,8 +35,8 @@ writeShellApplication { ${multimedia-test}/bin/multimedia-test echo "=====" - echo "Running VPI2 test" + echo "Running VPI test" echo "=====" - ${vpi2-test}/bin/vpi2-test + ${vpi-test}/bin/vpi-test ''; } diff --git a/pkgs/samples/vpi2-samples.nix b/pkgs/samples/vpi-samples.nix similarity index 80% rename from pkgs/samples/vpi2-samples.nix rename to pkgs/samples/vpi-samples.nix index 5a99e2b3..2f3e6af2 100644 --- a/pkgs/samples/vpi2-samples.nix +++ b/pkgs/samples/vpi-samples.nix @@ -2,6 +2,7 @@ , cudaPackages , debs , dpkg +, lib , opencv , stdenv }: @@ -9,21 +10,23 @@ let inherit (cudaPackages) cuda_cudart cuda_nvcc - vpi2 + vpi ; + + vpiMajor = lib.versions.major vpi.version; in stdenv.mkDerivation { __structuredAttrs = true; strictDeps = true; - pname = "vpi2-samples"; - inherit (debs.common.vpi2-samples) src version; + pname = "vpi-samples"; + inherit (debs.common."vpi${vpiMajor}-samples") src version; unpackCmd = "dpkg -x $src source"; - sourceRoot = "source/opt/nvidia/vpi2/samples"; + sourceRoot = "source/opt/nvidia/vpi${vpiMajor}/samples"; nativeBuildInputs = [ cmake cuda_nvcc dpkg ]; - buildInputs = [ cuda_cudart opencv vpi2 ]; + buildInputs = [ cuda_cudart opencv vpi ]; configurePhase = '' runHook preBuild diff --git a/pkgs/samples/vpi2-test.nix b/pkgs/samples/vpi-test.nix similarity index 80% rename from pkgs/samples/vpi2-test.nix rename to pkgs/samples/vpi-test.nix index ff2a4750..fd5ae547 100644 --- a/pkgs/samples/vpi2-test.nix +++ b/pkgs/samples/vpi-test.nix @@ -1,21 +1,21 @@ -{ vpi2-samples, writeShellApplication }: +{ vpi-samples, writeShellApplication }: # Tested via "./result/bin/vpi_sample_05_benchmark " (Try pva especially) # Getting a bunch of "pva 16000000.pva0: failed to get firmware" messages, so unsure if its working. writeShellApplication { name = "vpi2-test"; text = '' echo " * Running vpi_sample_05_benchmark cuda" - ${vpi2-samples}/bin/vpi_sample_05_benchmark cuda + ${vpi-samples}/bin/vpi_sample_05_benchmark cuda echo echo " * Running vpi_sample_05_benchmark cpu" - ${vpi2-samples}/bin/vpi_sample_05_benchmark cpu + ${vpi-samples}/bin/vpi_sample_05_benchmark cpu echo CHIP="$(tr -d '\0' < /proc/device-tree/compatible)" if [[ "''${CHIP}" =~ "tegra194" ]]; then echo " * Running vpi_sample_05_benchmark pva" - ${vpi2-samples}/bin/vpi_sample_05_benchmark pva + ${vpi-samples}/bin/vpi_sample_05_benchmark pva echo fi ''; From 16a8e7cbe10b527af0ba77d12d895e4afb017894 Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Mon, 5 May 2025 15:31:32 -0700 Subject: [PATCH 10/39] Update removal paths for l4t-tools in jetpack 6 In L4T r36, the wpa_supplicant binaries are now inside sbin/. Remove those and don't complain if the files don't exist. --- pkgs/l4t/default.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkgs/l4t/default.nix b/pkgs/l4t/default.nix index c183768d..c2368aac 100644 --- a/pkgs/l4t/default.nix +++ b/pkgs/l4t/default.nix @@ -377,7 +377,8 @@ let buildInputs = [ stdenv.cc.cc.lib l4t-core ]; postPatch = '' # Remove a utility that bring in too many libraries - rm bin/nv_macsec_wpa_supplicant + # bin/ on L4T r35; sbin/ on L4T r36 + rm -f bin/nv_macsec_wpa_supplicant sbin/nv_wpa_supplicant_wifi sbin/wpa_supplicant # This just contains a symlink to a binary already in /bin (nvcapture-status-decoder) rm -rf opt From 4b94076c2120156e7b0fbce85201bc01dee17ba3 Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Fri, 27 Jun 2025 13:45:14 -0700 Subject: [PATCH 11/39] kernel: build out-of-tree devicetree and modules in jetpack 6 --- mk-overlay.nix | 14 +- modules/default.nix | 511 ++++++++++++++++++++++---------------------- 2 files changed, 272 insertions(+), 253 deletions(-) diff --git a/mk-overlay.nix b/mk-overlay.nix index f81285e6..56aa6bbb 100644 --- a/mk-overlay.nix +++ b/mk-overlay.nix @@ -27,6 +27,9 @@ let l4tMajorVersion = versions.major l4tMajorMinorPatchVersion; + l4tAtLeast = versionAtLeast l4tMajorMinorPatchVersion; + l4tOlder = versionOlder l4tMajorMinorPatchVersion; + sourceInfo = import ./sourceinfo { inherit l4tMajorMinorPatchVersion; inherit (final) lib fetchurl fetchgit; @@ -35,6 +38,7 @@ in makeScope final.newScope (self: { inherit (sourceInfo) debs gitRepos; inherit jetpackMajorMinorPatchVersion l4tMajorMinorPatchVersion cudaMajorMinorVersion; + inherit l4tAtLeast l4tOlder; callPackages = callPackagesWith (final // self); @@ -132,9 +136,13 @@ makeScope final.newScope (self: { tests = final.callPackages ./pkgs/tests { inherit l4tMajorMinorPatchVersion; }; - kernelPackagesOverlay = final: _: { - nvidia-display-driver = final.callPackage ./pkgs/kernels/r${l4tMajorVersion}/display-driver.nix { inherit (self) gitRepos l4tMajorMinorPatchVersion; }; - }; + kernelPackagesOverlay = final: _: + if self.l4tAtLeast "36" then { + devicetree = self.callPackage ./pkgs/kernels/r${l4tMajorVersion}/devicetree.nix { }; + nvidia-oot-modules = final.callPackage ./pkgs/kernels/r${l4tMajorVersion}/oot-modules.nix { inherit (self) bspSrc gitRepos l4tMajorMinorPatchVersion; }; + } else { + nvidia-display-driver = final.callPackage ./pkgs/kernels/r${l4tMajorVersion}/display-driver.nix { inherit (self) gitRepos l4tMajorMinorPatchVersion; }; + }; kernel = self.callPackage ./pkgs/kernels/r${l4tMajorVersion} { kernelPatches = [ ]; }; kernelPackages = (final.linuxPackagesFor self.kernel).extend self.kernelPackagesOverlay; diff --git a/modules/default.nix b/modules/default.nix index 08384058..90f77cd9 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -35,6 +35,8 @@ let assertion = cfg.majorVersion == majorVersion -> checkValidSoms soms; message = "Jetpack ${majorVersion} only supports som families: ${lib.strings.concatStringsSep " " soms} (or generic). Configured som: ${cfg.som}."; }; + + jetpackAtLeast = lib.versionAtLeast cfg.majorVersion; in { imports = [ @@ -174,272 +176,281 @@ in }; }; - config = mkIf cfg.enable { - assertions = [ - { - # NixOS provides two main ways to feed a package set into a config: - # 1. The options nixpkgs.hostPlatform/nixpkgs.buildPlatform, which are - # used to construct an import of nixpkgs. - # 2. The option nixpkgs.pkgs (set by default if you use the pkgs.nixos - # function), which is a pre-configured import of nixpkgs. + config = mkIf cfg.enable (lib.mkMerge [ + { + assertions = [ + { + # NixOS provides two main ways to feed a package set into a config: + # 1. The options nixpkgs.hostPlatform/nixpkgs.buildPlatform, which are + # used to construct an import of nixpkgs. + # 2. The option nixpkgs.pkgs (set by default if you use the pkgs.nixos + # function), which is a pre-configured import of nixpkgs. + # + # Regardless of how the package set is setup, it _must_ have its + # hostPlatform compatible with aarch64 in order to run on the Jetson + # platform. + assertion = pkgs.stdenv.hostPlatform.isAarch64; + message = '' + NixOS config has an invalid package set for the Jetson platform. Try + setting nixpkgs.hostPlatform to "aarch64-linux" or otherwise using an + aarch64-linux compatible package set. + ''; + } + { + assertion = (config.virtualisation.docker.enable && cfg.container-toolkit.enable) -> lib.versionAtLeast config.virtualisation.docker.package.version "25"; + message = "Docker version < 25 does not support CDI"; + } + { + assertion = !config.hardware.nvidia-container-toolkit.enable; + message = "hardware.nvidia-container-toolkit.enable does not work with jetson devices (yet), use hardware.nvidia-jetpack.container-toolkit.enable instead"; + } + (validSomsAssertion "5" [ "xavier" "orin" ]) + (validSomsAssertion "6" [ "orin" ]) + ]; + + warnings = (lib.optionals nvidiaDockerActive [ + "You have set virtualisation.docker.enableNvidia. This option is deprecated, please set hardware.nvidia-jetpack.container-toolkit.enable instead." + ]) ++ (lib.optionals nvidiaPodmanActive [ + "You have set virtualisation.podman.enableNvidia. This option is deprecated, please set hardware.nvidia-jetpack.container-toolkit.enable instead." + ]); + + # Use mkOptionDefault so that we prevent conflicting with the priority that + # `nixos-generate-config` uses. + nixpkgs.hostPlatform = lib.mkOptionDefault "aarch64-linux"; + + # Use mkBefore to ensure that our overlays get merged prior to any + # downstream jetpack-nixos users. This should prevent a situation where a + # user's overlay is merged before ours and that overlay depends on + # something defined in our overlay. + nixpkgs.overlays = lib.mkBefore [ + (import ../overlay.nix) + ( + let + otherJetpacks = builtins.filter (v: v != cfg.majorVersion) jetpackVersions; + mkWarnValue = v: lib.warn "nvidia-jetpack${v} is unsupported when nixos is configured to use Jetpack ${cfg.majorVersion}" { }; + in + final: prev: + # set default nvidia-jetpack to our jetpack version + { nvidia-jetpack = final."nvidia-jetpack${cfg.majorVersion}"; } + # and warn/fail if anyone tries to evaluate something else + // builtins.listToAttrs (builtins.map + (v: { name = "nvidia-jetpack${v}"; value = mkWarnValue v; }) + otherJetpacks) + ) + (import ../overlay-with-config.nix config) + ]; + + # Advertise support for CUDA. + nixpkgs.config = mkIf cfg.configureCuda { + cudaSupport = lib.mkDefault true; + cudaCapabilities = + let + isGeneric = cfg.som == "generic"; + isXavier = lib.hasPrefix "xavier-" cfg.som; + isOrin = lib.hasPrefix "orin-" cfg.som; + in + lib.mkDefault + (lib.optionals (isXavier || isGeneric) [ "7.2" ] + ++ lib.optionals (isOrin || isGeneric) [ "8.7" ]); + }; + + boot.kernelPackages = + if cfg.kernel.realtime then + pkgs.nvidia-jetpack.rtkernelPackages + else + pkgs.nvidia-jetpack.kernelPackages; + + boot.kernelParams = [ + # Needed on Orin at least, but upstream has it for both + "nvidia.rm_firmware_active=all" + ] + ++ lib.optionals cfg.console.enable [ + "console=tty0" # Output to HDMI/DP. May need fbcon=map:0 as well + "console=ttyTCU0,115200" # Provides console on "Tegra Combined UART" (TCU) + ] + ++ lib.optional (lib.hasPrefix "xavier-" cfg.som || cfg.som == "generic") "video=efifb:off"; # Disable efifb driver, which crashes Xavier NX and possibly AGX + + boot.initrd.includeDefaultModules = false; # Avoid a bunch of modules we may not get from tegra_defconfig + boot.initrd.availableKernelModules = [ "xhci-tegra" "ucsi_ccg" "typec_ucsi" "typec" ]; # Make sure USB firmware makes it into initrd + + boot.kernelModules = + [ "nvgpu" ] + ++ lib.optionals cfg.modesetting.enable [ + "tegra-udrm" # For Xavier` + "nvidia-drm" # For Orin + ]; + + boot.extraModprobeConfig = lib.optionalString cfg.modesetting.enable '' + options tegra-udrm modeset=1 + options nvidia-drm modeset=1 + ''; + + boot.extraModulePackages = + ( + # For Orin. Unsupported with PREEMPT_RT. + lib.optional (cfg.majorVersion == "5" && !cfg.kernel.realtime) + config.boot.kernelPackages.nvidia-display-driver + ) ++ ( + lib.optional (jetpackAtLeast "6") + config.boot.kernelPackages.nvidia-oot-modules + ); + + hardware.firmware = with pkgs.nvidia-jetpack; [ + l4t-firmware + l4t-xusb-firmware # usb firmware also present in linux-firmware package, but that package is huge and has much more than needed + cudaPackages.vpi-firmware # Optional, but needed for pva_auth_allowlist firmware file used by VPI2 + ]; + + hardware.deviceTree.enable = true; + + hardware.graphics.package = pkgs.nvidia-jetpack.l4t-3d-core; + hardware.graphics.extraPackages = + with pkgs.nvidia-jetpack; + # l4t-core provides - among others - libnvrm_gpu.so and libnvrm_mem.so. + # The l4t-core/lib directory is directly set in the DT_RUNPATH of + # l4t-cuda's libcuda.so, thus the standard driver doesn't need them to be + # added in ${driverLink}. # - # Regardless of how the package set is setup, it _must_ have its - # hostPlatform compatible with aarch64 in order to run on the Jetson - # platform. - assertion = pkgs.stdenv.hostPlatform.isAarch64; - message = '' - NixOS config has an invalid package set for the Jetson platform. Try - setting nixpkgs.hostPlatform to "aarch64-linux" or otherwise using an - aarch64-linux compatible package set. - ''; - } - { - assertion = (config.virtualisation.docker.enable && cfg.container-toolkit.enable) -> lib.versionAtLeast config.virtualisation.docker.package.version "25"; - message = "Docker version < 25 does not support CDI"; - } - { - assertion = !config.hardware.nvidia-container-toolkit.enable; - message = "hardware.nvidia-container-toolkit.enable does not work with jetson devices (yet), use hardware.nvidia-jetpack.container-toolkit.enable instead"; - } - (validSomsAssertion "5" [ "xavier" "orin" ]) - (validSomsAssertion "6" [ "orin" ]) - ]; - - warnings = (lib.optionals nvidiaDockerActive [ - "You have set virtualisation.docker.enableNvidia. This option is deprecated, please set hardware.nvidia-jetpack.container-toolkit.enable instead." - ]) ++ (lib.optionals nvidiaPodmanActive [ - "You have set virtualisation.podman.enableNvidia. This option is deprecated, please set hardware.nvidia-jetpack.container-toolkit.enable instead." - ]); - - # Use mkOptionDefault so that we prevent conflicting with the priority that - # `nixos-generate-config` uses. - nixpkgs.hostPlatform = lib.mkOptionDefault "aarch64-linux"; - - # Use mkBefore to ensure that our overlays get merged prior to any - # downstream jetpack-nixos users. This should prevent a situation where a - # user's overlay is merged before ours and that overlay depends on - # something defined in our overlay. - nixpkgs.overlays = lib.mkBefore [ - (import ../overlay.nix) - ( - let - otherJetpacks = builtins.filter (v: v != cfg.majorVersion) jetpackVersions; - mkWarnValue = v: lib.warn "nvidia-jetpack${v} is unsupported when nixos is configured to use Jetpack ${cfg.majorVersion}" { }; - in - final: prev: - # set default nvidia-jetpack to our jetpack version - { nvidia-jetpack = final."nvidia-jetpack${cfg.majorVersion}"; } - # and warn/fail if anyone tries to evaluate something else - // builtins.listToAttrs (builtins.map - (v: { name = "nvidia-jetpack${v}"; value = mkWarnValue v; }) - otherJetpacks) - ) - (import ../overlay-with-config.nix config) - ]; - - # Advertise support for CUDA. - nixpkgs.config = mkIf cfg.configureCuda { - cudaSupport = lib.mkDefault true; - cudaCapabilities = + # However, this isn't the case for cuda_compat's driver currently, which + # is why we're including this derivation in extraPackages. + # + # To avoid exposing a bunch of other unrelated libraries from l4t-core, + # we're wrapping l4t-core in a derivation that only exposes the two + # required libraries. + # + # Those libraries should ideally be directly accessible from the + # DT_RUNPATH of cuda_compat's libcuda.so in the same way, but this + # requires more integration between upstream Nixpkgs and jetpack-nixos. + # When that happens, please remove l4tCoreWrapper below. let - isGeneric = cfg.som == "generic"; - isXavier = lib.hasPrefix "xavier-" cfg.som; - isOrin = lib.hasPrefix "orin-" cfg.som; + l4tCoreWrapper = pkgs.stdenv.mkDerivation { + name = "l4t-core-wrapper"; + phases = [ "installPhase" ]; + installPhase = '' + runHook preInstall + + mkdir -p $out/lib + ln -s ${l4t-core}/lib/libnvrm_gpu.so $out/lib/libnvrm_gpu.so + ln -s ${l4t-core}/lib/libnvrm_mem.so $out/lib/libnvrm_mem.so + + runHook postInstall + ''; + }; in - lib.mkDefault - (lib.optionals (isXavier || isGeneric) [ "7.2" ] - ++ lib.optionals (isOrin || isGeneric) [ "8.7" ]); - }; + [ + l4tCoreWrapper + l4t-cuda + l4t-nvsci # cuda may use nvsci + l4t-gbm + l4t-wayland + ]; - boot.kernelPackages = - if cfg.kernel.realtime then - pkgs.nvidia-jetpack.rtkernelPackages - else - pkgs.nvidia-jetpack.kernelPackages; - - boot.kernelParams = [ - # Needed on Orin at least, but upstream has it for both - "nvidia.rm_firmware_active=all" - ] - ++ lib.optionals cfg.console.enable [ - "console=tty0" # Output to HDMI/DP. May need fbcon=map:0 as well - "console=ttyTCU0,115200" # Provides console on "Tegra Combined UART" (TCU) - ] - ++ lib.optional (lib.hasPrefix "xavier-" cfg.som || cfg.som == "generic") "video=efifb:off"; # Disable efifb driver, which crashes Xavier NX and possibly AGX - - boot.initrd.includeDefaultModules = false; # Avoid a bunch of modules we may not get from tegra_defconfig - boot.initrd.availableKernelModules = [ "xhci-tegra" "ucsi_ccg" "typec_ucsi" "typec" ]; # Make sure USB firmware makes it into initrd - - boot.kernelModules = - [ "nvgpu" ] - ++ lib.optionals cfg.modesetting.enable [ - "tegra-udrm" # For Xavier` - "nvidia-drm" # For Orin + services.udev.packages = [ + (pkgs.runCommand "jetson-udev-rules" { } '' + install -D -t $out/etc/udev/rules.d ${pkgs.nvidia-jetpack.l4t-init}/etc/udev/rules.d/99-tegra-devices.rules + sed -i \ + -e '/camera_device_detect/d' \ + -e 's#/bin/mknod#${pkgs.coreutils}/bin/mknod#' \ + $out/etc/udev/rules.d/99-tegra-devices.rules + '') ]; - boot.extraModprobeConfig = lib.optionalString cfg.modesetting.enable '' - options tegra-udrm modeset=1 - options nvidia-drm modeset=1 - ''; - - # For Orin. Unsupported with PREEMPT_RT. - boot.extraModulePackages = lib.optional - ( - !cfg.kernel.realtime - ) - config.boot.kernelPackages.nvidia-display-driver; - - hardware.firmware = with pkgs.nvidia-jetpack; [ - l4t-firmware - l4t-xusb-firmware # usb firmware also present in linux-firmware package, but that package is huge and has much more than needed - cudaPackages.vpi-firmware # Optional, but needed for pva_auth_allowlist firmware file used by VPI2 - ]; - - hardware.deviceTree.enable = true; - - hardware.graphics.package = pkgs.nvidia-jetpack.l4t-3d-core; - hardware.graphics.extraPackages = - with pkgs.nvidia-jetpack; - # l4t-core provides - among others - libnvrm_gpu.so and libnvrm_mem.so. - # The l4t-core/lib directory is directly set in the DT_RUNPATH of - # l4t-cuda's libcuda.so, thus the standard driver doesn't need them to be - # added in ${driverLink}. - # - # However, this isn't the case for cuda_compat's driver currently, which - # is why we're including this derivation in extraPackages. - # - # To avoid exposing a bunch of other unrelated libraries from l4t-core, - # we're wrapping l4t-core in a derivation that only exposes the two - # required libraries. - # - # Those libraries should ideally be directly accessible from the - # DT_RUNPATH of cuda_compat's libcuda.so in the same way, but this - # requires more integration between upstream Nixpkgs and jetpack-nixos. - # When that happens, please remove l4tCoreWrapper below. - let - l4tCoreWrapper = pkgs.stdenv.mkDerivation { - name = "l4t-core-wrapper"; - phases = [ "installPhase" ]; - installPhase = '' - runHook preInstall - - mkdir -p $out/lib - ln -s ${l4t-core}/lib/libnvrm_gpu.so $out/lib/libnvrm_gpu.so - ln -s ${l4t-core}/lib/libnvrm_mem.so $out/lib/libnvrm_mem.so - - runHook postInstall + # Force the driver, since otherwise the fbdev or modesetting X11 drivers + # may be used, which don't work and can interfere with the correct + # selection of GLX drivers. + services.xserver.drivers = lib.mkForce ( + lib.singleton { + name = "nvidia"; + modules = [ pkgs.nvidia-jetpack.l4t-3d-core ]; + display = true; + screenSection = '' + Option "AllowEmptyInitialConfiguration" "true" + ''; + } + ); + + # If we aren't using modesetting, we won't have a DRM device with the + # "master-of-seat" tag, so "loginctl show-seat seat0" reports + # "CanGraphical=false" and consequently lightdm doesn't start. We override + # that here. + services.xserver.displayManager.lightdm.extraConfig = + lib.optionalString (!cfg.modesetting.enable) + '' + logind-check-graphical = false ''; - }; - in - [ - l4tCoreWrapper - l4t-cuda - l4t-nvsci # cuda may use nvsci - l4t-gbm - l4t-wayland - ]; - - services.udev.packages = [ - (pkgs.runCommand "jetson-udev-rules" { } '' - install -D -t $out/etc/udev/rules.d ${pkgs.nvidia-jetpack.l4t-init}/etc/udev/rules.d/99-tegra-devices.rules - sed -i \ - -e '/camera_device_detect/d' \ - -e 's#/bin/mknod#${pkgs.coreutils}/bin/mknod#' \ - $out/etc/udev/rules.d/99-tegra-devices.rules - '') - ]; - - # Force the driver, since otherwise the fbdev or modesetting X11 drivers - # may be used, which don't work and can interfere with the correct - # selection of GLX drivers. - services.xserver.drivers = lib.mkForce ( - lib.singleton { - name = "nvidia"; - modules = [ pkgs.nvidia-jetpack.l4t-3d-core ]; - display = true; - screenSection = '' - Option "AllowEmptyInitialConfiguration" "true" - ''; - } - ); - - # If we aren't using modesetting, we won't have a DRM device with the - # "master-of-seat" tag, so "loginctl show-seat seat0" reports - # "CanGraphical=false" and consequently lightdm doesn't start. We override - # that here. - services.xserver.displayManager.lightdm.extraConfig = - lib.optionalString (!cfg.modesetting.enable) - '' - logind-check-graphical = false - ''; - # Used by libjetsonpower.so, which is used by nvfancontrol at least. - environment.etc."nvpower/libjetsonpower".source = "${pkgs.nvidia-jetpack.l4t-tools}/etc/nvpower/libjetsonpower"; + # Used by libjetsonpower.so, which is used by nvfancontrol at least. + environment.etc."nvpower/libjetsonpower".source = "${pkgs.nvidia-jetpack.l4t-tools}/etc/nvpower/libjetsonpower"; - # Include nv_tegra_release, just so we can tell what version our NixOS machine was built from. - environment.etc."nv_tegra_release".source = "${pkgs.nvidia-jetpack.l4t-core}/etc/nv_tegra_release"; + # Include nv_tegra_release, just so we can tell what version our NixOS machine was built from. + environment.etc."nv_tegra_release".source = "${pkgs.nvidia-jetpack.l4t-core}/etc/nv_tegra_release"; - # https://developer.ridgerun.com/wiki/index.php/Xavier/JetPack_5.0.2/Performance_Tuning - systemd.services.jetson_clocks = mkIf cfg.maxClock { - enable = true; - description = "Set maximum clock speed"; - serviceConfig = { - Type = "oneshot"; - ExecStart = "${pkgs.nvidia-jetpack.l4t-tools}/bin/jetson_clocks"; - }; - after = [ "nvpmodel.service" ]; - wantedBy = [ "multi-user.target" ]; - }; - - systemd.services.tee-supplicant = - let - args = lib.escapeShellArgs ( - [ - "--ta-path=${teeApplications}" - "--plugin-path=${supplicantPlugins}" - ] - ++ cfg.firmware.optee.supplicant.extraArgs - ); - in - lib.mkIf cfg.firmware.optee.supplicant.enable { - description = "Userspace supplicant for OPTEE-OS"; + # https://developer.ridgerun.com/wiki/index.php/Xavier/JetPack_5.0.2/Performance_Tuning + systemd.services.jetson_clocks = mkIf cfg.maxClock { + enable = true; + description = "Set maximum clock speed"; serviceConfig = { - ExecStart = "${pkgs.nvidia-jetpack.opteeClient}/bin/tee-supplicant ${args}"; - Restart = "always"; + Type = "oneshot"; + ExecStart = "${pkgs.nvidia-jetpack.l4t-tools}/bin/jetson_clocks"; }; + after = [ "nvpmodel.service" ]; wantedBy = [ "multi-user.target" ]; }; - environment.systemPackages = with pkgs.nvidia-jetpack; [ - l4t-tools - otaUtils # Tools for UEFI capsule updates - ]; - - systemd.services.nvidia-cdi-generate = lib.mkIf cfg.container-toolkit.enable { - serviceConfig = { - Type = "oneshot"; - RemainAfterExit = true; - RuntimeDirectory = "cdi"; - }; - wantedBy = [ "multi-user.target" ]; - script = + systemd.services.tee-supplicant = let - exe = lib.getExe pkgs.nvidia-jetpack.nvidia-ctk; + args = lib.escapeShellArgs ( + [ + "--ta-path=${teeApplications}" + "--plugin-path=${supplicantPlugins}" + ] + ++ cfg.firmware.optee.supplicant.extraArgs + ); in - '' - ${exe} cdi generate \ - --nvidia-ctk-path=${exe} \ - --driver-root=${pkgs.nvidia-jetpack.containerDeps} \ - --ldconfig-path ${lib.getExe' pkgs.glibc "ldconfig"} \ - --dev-root=/ \ - --mode=csv \ - --csv.file=${pkgs.nvidia-jetpack.l4tCsv} \ - --output="$RUNTIME_DIRECTORY/jetpack-nixos" - ''; - }; + lib.mkIf cfg.firmware.optee.supplicant.enable { + description = "Userspace supplicant for OPTEE-OS"; + serviceConfig = { + ExecStart = "${pkgs.nvidia-jetpack.opteeClient}/bin/tee-supplicant ${args}"; + Restart = "always"; + }; + wantedBy = [ "multi-user.target" ]; + }; - # Used by libEGL_nvidia.so.0 - environment.etc."egl/egl_external_platform.d".source = - "${pkgs.addDriverRunpath.driverLink}/share/egl/egl_external_platform.d/"; - }; + environment.systemPackages = with pkgs.nvidia-jetpack; [ + l4t-tools + otaUtils # Tools for UEFI capsule updates + ]; + + systemd.services.nvidia-cdi-generate = lib.mkIf cfg.container-toolkit.enable { + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = true; + RuntimeDirectory = "cdi"; + }; + wantedBy = [ "multi-user.target" ]; + script = + let + exe = lib.getExe pkgs.nvidia-jetpack.nvidia-ctk; + in + '' + ${exe} cdi generate \ + --nvidia-ctk-path=${exe} \ + --driver-root=${pkgs.nvidia-jetpack.containerDeps} \ + --ldconfig-path ${lib.getExe' pkgs.glibc "ldconfig"} \ + --dev-root=/ \ + --mode=csv \ + --csv.file=${pkgs.nvidia-jetpack.l4tCsv} \ + --output="$RUNTIME_DIRECTORY/jetpack-nixos" + ''; + }; + + # Used by libEGL_nvidia.so.0 + environment.etc."egl/egl_external_platform.d".source = + "${pkgs.addDriverRunpath.driverLink}/share/egl/egl_external_platform.d/"; + } + (lib.mkIf (jetpackAtLeast "6") + { + hardware.deviceTree.dtbSource = pkgs.nvidia-jetpack.kernelPackages.devicetree; + }) + ]); } From 7fc015e3c3caf9d270b23dcfbf26ecc05b281317 Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Mon, 5 May 2025 17:49:10 -0700 Subject: [PATCH 12/39] optee: Enable PAC/BTI in L4T r35 for t234 socs PAC/BTI must be enabled to boot Arm Trusted Firmware. --- mk-overlay.nix | 2 +- pkgs/optee/default.nix | 25 +++++++++++++++---------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/mk-overlay.nix b/mk-overlay.nix index 56aa6bbb..2fb1bdb8 100644 --- a/mk-overlay.nix +++ b/mk-overlay.nix @@ -89,7 +89,7 @@ makeScope final.newScope (self: { # Nvidia's recommended toolchain is gcc9: # https://nv-tegra.nvidia.com/r/gitweb?p=tegra/optee-src/nv-optee.git;a=blob;f=optee/atf_and_optee_README.txt;h=591edda3d4ec96997e054ebd21fc8326983d3464;hb=5ac2ab218ba9116f1df4a0bb5092b1f6d810e8f7#l33 stdenv = final.gcc9Stdenv; - inherit (self) bspSrc gitRepos l4tMajorMinorPatchVersion uefi-firmware; + inherit (self) bspSrc gitRepos l4tMajorMinorPatchVersion l4tAtLeast uefi-firmware; }) buildTOS buildOpteeTaDevKit opteeClient; genEkb = self.callPackage ./pkgs/optee/gen-ekb.nix { }; diff --git a/pkgs/optee/default.nix b/pkgs/optee/default.nix index d0895544..3228b33b 100644 --- a/pkgs/optee/default.nix +++ b/pkgs/optee/default.nix @@ -1,4 +1,5 @@ { l4tMajorMinorPatchVersion +, l4tAtLeast , bspSrc , buildPackages , lib @@ -21,16 +22,17 @@ let pname = "optee_client"; version = l4tMajorMinorPatchVersion; src = nvopteeSrc; - patches = [ - ./0001-Don-t-prepend-foo-bar-baz-to-TEEC_LOAD_PATH.patch - (fetchpatch { - name = "tee-supplicant-Allow-for-TA-load-path-to-be-specified-at-runtime.patch"; - url = "https://github.com/OP-TEE/optee_client/commit/f3845d8bee3645eedfcc494be4db034c3c69e9ab.patch"; - stripLen = 1; - extraPrefix = "optee/optee_client/"; - hash = "sha256-XjFpMbyXy74sqnc8l+EgTaPXqwwHcvni1Z68ShokTGc="; - }) - ]; + patches = + if l4tAtLeast "36" then [ ] else [ + ./0001-Don-t-prepend-foo-bar-baz-to-TEEC_LOAD_PATH.patch + (fetchpatch { + name = "tee-supplicant-Allow-for-TA-load-path-to-be-specified-at-runtime.patch"; + url = "https://github.com/OP-TEE/optee_client/commit/f3845d8bee3645eedfcc494be4db034c3c69e9ab.patch"; + stripLen = 1; + extraPrefix = "optee/optee_client/"; + hash = "sha256-XjFpMbyXy74sqnc8l+EgTaPXqwwHcvni1Z68ShokTGc="; + }) + ]; nativeBuildInputs = [ pkg-config ]; buildInputs = [ libuuid ]; enableParallelBuilding = true; @@ -204,6 +206,9 @@ let # `warning: /build/source/build/rk3399/release/bl31/bl31.elf has a LOAD segment with RWX permissions` # See also: https://developer.trustedfirmware.org/T996 "LDFLAGS=-no-warn-rwx-segments" + ] ++ lib.optionals (l4tAtLeast "36" && socType == "t234") [ + "BRANCH_PROTECTION=3" + "ARM_ARCH_MINOR=3" ]; enableParallelBuilding = true; From 541cb7d1442104c639c8d1a7bae25127b342791c Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Mon, 5 May 2025 17:53:21 -0700 Subject: [PATCH 13/39] Update patch for flash-tools An additional line needs to be removed from the l4t_bup_gen.func and tegrahost_v2 is no longer present (or needed) for flashing. --- pkgs/flash-tools/default.nix | 11 +++++++---- .../{flash-tools.patch => flash-tools-r35.patch} | 0 pkgs/flash-tools/flash-tools-r36.patch | 12 ++++++++++++ 3 files changed, 19 insertions(+), 4 deletions(-) rename pkgs/flash-tools/{flash-tools.patch => flash-tools-r35.patch} (100%) create mode 100644 pkgs/flash-tools/flash-tools-r36.patch diff --git a/pkgs/flash-tools/default.nix b/pkgs/flash-tools/default.nix index 1014f4ee..02b40910 100644 --- a/pkgs/flash-tools/default.nix +++ b/pkgs/flash-tools/default.nix @@ -46,7 +46,7 @@ let perl ]; - patches = [ ./flash-tools.patch ]; + patches = [ ./flash-tools-r${lib.versions.major l4tMajorMinorPatchVersion}.patch ]; postPatch = '' # Needed in Jetpack 5 @@ -77,12 +77,15 @@ let # Wrap x86 binaries in qemu pushd bootloader/ >/dev/null for filename in chkbdinfo mkbctpart mkbootimg mksparse tegrabct_v2 tegradevflash_v2 tegrahost_v2 tegrakeyhash tegraopenssl tegraparser_v2 tegrarcm_v2 tegrasign_v2; do - mv "$filename" ."$filename"-wrapped - cat >"$filename" <"$filename" </dev/null ''); diff --git a/pkgs/flash-tools/flash-tools.patch b/pkgs/flash-tools/flash-tools-r35.patch similarity index 100% rename from pkgs/flash-tools/flash-tools.patch rename to pkgs/flash-tools/flash-tools-r35.patch diff --git a/pkgs/flash-tools/flash-tools-r36.patch b/pkgs/flash-tools/flash-tools-r36.patch new file mode 100644 index 00000000..50fd579b --- /dev/null +++ b/pkgs/flash-tools/flash-tools-r36.patch @@ -0,0 +1,12 @@ +diff --color -Naur original/bootloader/l4t_bup_gen.func new/bootloader/l4t_bup_gen.func +--- original/bootloader/l4t_bup_gen.func 2025-01-07 17:42:15.358647998 -0800 ++++ new/bootloader/l4t_bup_gen.func 2025-04-14 15:21:33.105126516 -0700 +@@ -25,8 +25,6 @@ + + declare -A ENTRY_LIST + ENTRY_LIST[bl]="" +-ENTRY_LIST[kernel]="" +-ENTRY_LIST[safety_user]="" + + PART_NAME="" + IMAGE_SIGNED=0 From 7dbc8e02f4a95a8efa91417a1dd0342172494f8c Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Mon, 5 May 2025 17:54:48 -0700 Subject: [PATCH 14/39] l4t: move flatten lib/nvidia/ Some directories are present, but empty. Only do the mv if there are files present. --- pkgs/l4t/default.nix | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/pkgs/l4t/default.nix b/pkgs/l4t/default.nix index c2368aac..a028a06b 100644 --- a/pkgs/l4t/default.nix +++ b/pkgs/l4t/default.nix @@ -76,15 +76,26 @@ let fi if [[ -d lib/aarch64-linux-gnu ]]; then - mv lib/aarch64-linux-gnu/* lib + if [[ -n "$(ls lib/aarch64-linux-gnu)" ]] ; then + mv -v -t lib lib/aarch64-linux-gnu/* + fi rm -rf lib/aarch64-linux-gnu fi if [[ -d lib/tegra ]]; then - mv lib/tegra/* lib + if [[ -n "$(ls lib/tegra)" ]] ; then + mv -v -t lib lib/tegra/* + fi rm -rf lib/tegra fi + if [[ -d lib/nvidia ]]; then + if [[ -n "$(ls lib/nvidia)" ]] ; then + mv -v -t lib lib/nvidia/* + fi + rm -rf lib/nvidia + fi + ${postPatch} rm -f lib/ld.so.conf From 7aa1b2675440235f5a51dafb6c617aea0420d76a Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Mon, 5 May 2025 17:57:53 -0700 Subject: [PATCH 15/39] l4t: l4t-3d-core: Make libnvidia-vulkan-producer.so optional It is not present in r36, so only patch it if it's present. --- pkgs/l4t/default.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkgs/l4t/default.nix b/pkgs/l4t/default.nix index a028a06b..baca5109 100644 --- a/pkgs/l4t/default.nix +++ b/pkgs/l4t/default.nix @@ -178,10 +178,11 @@ let # TODO: Replace this with appendRunpaths which is available in 23.11 preFixup = '' postFixupHooks+=(' + # ls to filter out libnvidia-vulkan-producer.so, which is only present in r35 patchelf --add-rpath ${lib.makeLibraryPath [ libglvnd ]} \ $out/lib/libEGL_nvidia.so.0 \ $out/lib/libGLX_nvidia.so.0 \ - $out/lib/libnvidia-vulkan-producer.so + $(ls $out/lib/libnvidia-vulkan-producer.so) patchelf --add-rpath ${lib.makeLibraryPath (with xorg; [ libX11 libXext libxcb ])} \ $out/lib/libGLX_nvidia.so.0 \ From 3f890653d4b429bcfedb02961c1b4cbdf80bacce Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Mon, 5 May 2025 17:58:39 -0700 Subject: [PATCH 16/39] l4t: l4t-cuda: libnvidia-ptxjitcompiler.so uses cuda driver version In jetpack 6, libnvidia-ptxjitcompiler.so is suffixed with the CUDA driver version, not the l4t version. Describe the CUDA driver version in the overlay.nix and use it, if set. --- mk-overlay.nix | 2 ++ overlay.nix | 8 ++++++++ pkgs/l4t/default.nix | 11 ++++++++--- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/mk-overlay.nix b/mk-overlay.nix index 2fb1bdb8..f6186f1f 100644 --- a/mk-overlay.nix +++ b/mk-overlay.nix @@ -5,6 +5,7 @@ { jetpackMajorMinorPatchVersion , l4tMajorMinorPatchVersion , cudaMajorMinorPatchVersion +, cudaDriverMajorMinorVersion , bspHash }: final: _: @@ -180,4 +181,5 @@ makeScope final.newScope (self: { # Instead, we must either use final.callPackages or packagesFromDirectoryRecursive. // final.callPackages ./pkgs/l4t { inherit (self) debs l4tMajorMinorPatchVersion; + inherit cudaDriverMajorMinorVersion; }) diff --git a/overlay.nix b/overlay.nix index 253ba1ed..6b260221 100644 --- a/overlay.nix +++ b/overlay.nix @@ -7,6 +7,10 @@ final: prev: l4tMajorMinorPatchVersion = "35.6.1"; cudaMajorMinorPatchVersion = "11.4.298"; + # used to version libnvidia-ptxjitcompiler.so. L4T r35 uses l4tMajorMinorPatchVersion, so set to null + # and we'll use l4tMajorMinorPatchVersion instead + cudaDriverMajorMinorVersion = null; + bspHash = "sha256-nqKEd3R7MJXuec3Q4odDJ9SNTUD1FyluWg/SeeptbUE="; } final @@ -19,6 +23,10 @@ final: prev: l4tMajorMinorPatchVersion = "36.4.3"; cudaMajorMinorPatchVersion = "12.6.10"; + # nix build .#legacyPacakges.l4t-cuda.src; unpack the deb; find libnvidia-ptxjijtcompiler.so + # and use that. + cudaDriverMajorMinorVersion = "540.4.0"; + bspHash = "sha256-lJpEBJxM5qjv31cuoIIMh09u5dQco+STW58OONEYc9I="; } final diff --git a/pkgs/l4t/default.nix b/pkgs/l4t/default.nix index baca5109..615d00cd 100644 --- a/pkgs/l4t/default.nix +++ b/pkgs/l4t/default.nix @@ -22,6 +22,7 @@ , debs , l4tMajorMinorPatchVersion , cudaPackages +, cudaDriverMajorMinorVersion }: let # The version currently in nixpkgs 23.11 and master 0.15 is pretty old and @@ -201,6 +202,10 @@ let buildInputs = [ l4t-core ]; postPatch = + let + version = lib.defaultTo l4tMajorMinorPatchVersion cudaDriverMajorMinorVersion; + folder = if cudaDriverMajorMinorVersion == null then "tegra" else "nvidia"; + in '' # Additional libcuda symlinks ln -sf libcuda.so.1.1 lib/libcuda.so.1 @@ -214,9 +219,9 @@ let # well as libnvidia-ptxjitcompiler in the same package. meta-tegra does a # similar thing where they pull libnvidia-ptxjitcompiler out of # l4t-3d-core and place it in the same package as libcuda. - dpkg --fsys-tarfile ${debs.t234.nvidia-l4t-3d-core.src} | tar -xO ./usr/lib/aarch64-linux-gnu/tegra/libnvidia-ptxjitcompiler.so.${l4tMajorMinorPatchVersion} > lib/libnvidia-ptxjitcompiler.so.${l4tMajorMinorPatchVersion} - ln -sf libnvidia-ptxjitcompiler.so.${l4tMajorMinorPatchVersion} lib/libnvidia-ptxjitcompiler.so.1 - ln -sf libnvidia-ptxjitcompiler.so.${l4tMajorMinorPatchVersion} lib/libnvidia-ptxjitcompiler.so + dpkg --fsys-tarfile ${debs.t234.nvidia-l4t-3d-core.src} | tar -xO ./usr/lib/aarch64-linux-gnu/${folder}/libnvidia-ptxjitcompiler.so.${version} > lib/libnvidia-ptxjitcompiler.so.${version} + ln -sf libnvidia-ptxjitcompiler.so.${version} lib/libnvidia-ptxjitcompiler.so.1 + ln -sf libnvidia-ptxjitcompiler.so.${version} lib/libnvidia-ptxjitcompiler.so ''; # libcuda.so actually depends on libnvcucompat.so at runtime (probably From 7767a2598390e7461ec70b73ac4de5d158bcc0f4 Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Mon, 5 May 2025 18:04:54 -0700 Subject: [PATCH 17/39] modules: Handle renamed partitionTemplate directory In L4T r36, the "t186ref" directory is renamed to "generic". Handle it with a variable. --- modules/devices.nix | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/modules/devices.nix b/modules/devices.nix index 7610f4bd..2447ba60 100644 --- a/modules/devices.nix +++ b/modules/devices.nix @@ -48,6 +48,8 @@ let '' ) paths))); + + partitionTemplateDirectory = if cfg.majorVersion == "5" then "t186ref" else "generic"; in { config = lib.mkIf cfg.enable (lib.mkMerge [{ @@ -100,14 +102,14 @@ in targetBoard = mkDefault "jetson-agx-orin-devkit"; # We don't flash the sdmmc with kernel/initrd/etc at all. Just let it be a # regular NixOS machine instead of having some weird partition structure. - partitionTemplate = mkDefault "${pkgs.nvidia-jetpack.bspSrc}/bootloader/t186ref/cfg/flash_t234_qspi.xml"; + partitionTemplate = mkDefault "${pkgs.nvidia-jetpack.bspSrc}/bootloader/${partitionTemplateDirectory}/cfg/flash_t234_qspi.xml"; }) (mkIf (cfg.som == "orin-agx-industrial") { targetBoard = mkDefault "jetson-agx-orin-devkit-industrial"; # Remove the sdmmc part of this flash.xmo file. The industrial spi part is still different partitionTemplate = mkDefault (pkgs.runCommand "flash.xml" { nativeBuildInputs = [ pkgs.buildPackages.xmlstarlet ]; } '' - xmlstarlet ed -d '//device[@type="sdmmc_user"]' ${pkgs.nvidia-jetpack.bspSrc}/bootloader/t186ref/cfg/flash_t234_qspi_sdmmc_industrial.xml >$out + xmlstarlet ed -d '//device[@type="sdmmc_user"]' ${pkgs.nvidia-jetpack.bspSrc}/bootloader/${partitionTemplateDirectory}/cfg/flash_t234_qspi_sdmmc_industrial.xml >$out ''); }) @@ -115,7 +117,7 @@ in targetBoard = mkDefault "jetson-orin-nano-devkit${lib.optionalString cfg.super "-super"}"; # Use this instead if you want to use the original Xavier NX Devkit module (p3509-a02) #targetBoard = mkDefault "p3509-a02+p3767-0000"; - partitionTemplate = mkDefault "${pkgs.nvidia-jetpack.bspSrc}/bootloader/t186ref/cfg/flash_t234_qspi.xml"; + partitionTemplate = mkDefault "${pkgs.nvidia-jetpack.bspSrc}/bootloader/${partitionTemplateDirectory}/cfg/flash_t234_qspi.xml"; }) (mkIf (cfg.som == "xavier-agx") { @@ -123,25 +125,25 @@ in # Remove unnecessary partitions to make it more like # flash_t194_uefi_sdmmc_min.xml, except also keep the A/B slots of # each partition - partitionTemplate = mkDefault (filterPartitions xavierAgxPartitionsToRemove "${pkgs.nvidia-jetpack.bspSrc}/bootloader/t186ref/cfg/flash_t194_sdmmc.xml"); + partitionTemplate = mkDefault (filterPartitions xavierAgxPartitionsToRemove "${pkgs.nvidia-jetpack.bspSrc}/bootloader/${partitionTemplateDirectory}/cfg/flash_t194_sdmmc.xml"); }) (mkIf (cfg.som == "xavier-agx-industrial") { targetBoard = mkDefault "jetson-agx-xavier-industrial"; # Remove the sdmmc part of this flash.xml file. The industrial spi part is still different partitionTemplate = mkDefault (pkgs.runCommand "flash.xml" { nativeBuildInputs = [ pkgs.buildPackages.xmlstarlet ]; } '' - xmlstarlet ed -d '//device[@type="sdmmc_user"]' ${pkgs.nvidia-jetpack.bspSrc}/bootloader/t186ref/cfg/flash_l4t_t194_spi_emmc_jaxi.xml >$out + xmlstarlet ed -d '//device[@type="sdmmc_user"]' ${pkgs.nvidia-jetpack.bspSrc}/bootloader/${partitionTemplateDirectory}/cfg/flash_l4t_t194_spi_emmc_jaxi.xml >$out ''); }) (mkIf (cfg.som == "xavier-nx") { targetBoard = mkDefault "jetson-xavier-nx-devkit"; - partitionTemplate = mkDefault (filterPartitions defaultPartitionsToRemove "${pkgs.nvidia-jetpack.bspSrc}/bootloader/t186ref/cfg/flash_l4t_t194_spi_sd_p3668.xml"); + partitionTemplate = mkDefault (filterPartitions defaultPartitionsToRemove "${pkgs.nvidia-jetpack.bspSrc}/bootloader/${partitionTemplateDirectory}/cfg/flash_l4t_t194_spi_sd_p3668.xml"); }) (mkIf (cfg.som == "xavier-nx-emmc") { targetBoard = mkDefault "jetson-xavier-nx-devkit-emmc"; - partitionTemplate = mkDefault (filterPartitions defaultPartitionsToRemove "${pkgs.nvidia-jetpack.bspSrc}/bootloader/t186ref/cfg/flash_l4t_t194_spi_emmc_p3668.xml"); + partitionTemplate = mkDefault (filterPartitions defaultPartitionsToRemove "${pkgs.nvidia-jetpack.bspSrc}/bootloader/${partitionTemplateDirectory}/cfg/flash_l4t_t194_spi_emmc_p3668.xml"); }) ]; From bcf98fff46735c1c116ad6509feb8bfad221ff6b Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Mon, 5 May 2025 18:05:54 -0700 Subject: [PATCH 18/39] modules: Disable usb-otg only in 5.15 orin-nx USB OTG should work in Jetpack 6. --- modules/devices.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/devices.nix b/modules/devices.nix index 2447ba60..bfa9dcb8 100644 --- a/modules/devices.nix +++ b/modules/devices.nix @@ -147,7 +147,7 @@ in }) ]; - boot.kernelPatches = lib.mkIf (cfg.som == "orin-nx") [ + boot.kernelPatches = lib.mkIf (cfg.som == "orin-nx" && lib.versions.majorMinor config.system.build.kernel.version == "5.10") [ { name = "disable-usb-otg"; patch = null; From b4f4d23bdfa8a35e9ada3b362c55612785e77afe Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Mon, 5 May 2025 18:16:32 -0700 Subject: [PATCH 19/39] l4t.csv: Install multiple files In jetpack 6, there are multiple csv files to describe the necessary container context. The nvidia-ctk tool is not satisfied if the csv files are simply concatenated. Install all the files and register both with nvidia-ctk cdi generate. --- modules/default.nix | 2 +- pkgs/containers/l4t-csv.nix | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/default.nix b/modules/default.nix index 90f77cd9..c1ad6f2d 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -439,7 +439,7 @@ in --ldconfig-path ${lib.getExe' pkgs.glibc "ldconfig"} \ --dev-root=/ \ --mode=csv \ - --csv.file=${pkgs.nvidia-jetpack.l4tCsv} \ + $(for f in ${pkgs.nvidia-jetpack.l4tCsv}/*; do echo "--csv.file=$f"; done) \ --output="$RUNTIME_DIRECTORY/jetpack-nixos" ''; }; diff --git a/pkgs/containers/l4t-csv.nix b/pkgs/containers/l4t-csv.nix index db1bbbdd..7f50c1df 100644 --- a/pkgs/containers/l4t-csv.nix +++ b/pkgs/containers/l4t-csv.nix @@ -1,5 +1,5 @@ { bspSrc, runCommand }: runCommand "l4t.csv" { } '' tar -xf "${bspSrc}/nv_tegra/config.tbz2" - install etc/nvidia-container-runtime/host-files-for-container.d/l4t.csv $out + install -Dt $out etc/nvidia-container-runtime/host-files-for-container.d/*.csv '' From 86e13ce614cc98df6db3a59680c76d437e1f4d87 Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Tue, 6 May 2025 09:47:13 -0700 Subject: [PATCH 20/39] bup: Sign bup in jetpack 6 In jetpack 6, flash.sh must be called with --sign argument. See build_l4t_bup.sh. --- overlay-with-config.nix | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/overlay-with-config.nix b/overlay-with-config.nix index 7075b0b1..97160a1d 100644 --- a/overlay-with-config.nix +++ b/overlay-with-config.nix @@ -152,8 +152,23 @@ final: prev: ( ${cfg.firmware.secureBoot.preSignCommands final.buildPackages} '' + lib.concatMapStringsSep "\n" (v: with v; - "BOARDID=${boardid} BOARDSKU=${boardsku} FAB=${fab} BOARDREV=${boardrev} FUSELEVEL=${fuselevel} CHIPREV=${chiprev} ${lib.optionalString (chipsku != null) "CHIP_SKU=${chipsku}"} ${lib.optionalString (ramcode != null) "RAMCODE=${ramcode}"} ./flash.sh ${lib.optionalString (cfg.flashScriptOverrides.partitionTemplate != null) "-c flash.xml"} --no-flash --bup --multi-spec ${builtins.toString cfg.flashScriptOverrides.flashArgs}" - ) + (lib.concatStringsSep " " [ + "BOARDID=${boardid}" + "BOARDSKU=${boardsku}" + "FAB=${fab}" + "BOARDREV=${boardrev}" + "FUSELEVEL=${fuselevel}" + "CHIPREV=${chiprev}" + (lib.optionalString (chipsku != null) "CHIP_SKU=${chipsku}") + (lib.optionalString (ramcode != null) "RAMCODE=${ramcode}") + "./flash.sh" + (lib.optionalString (cfg.flashScriptOverrides.partitionTemplate != null) "-c flash.xml") + "--no-flash" + (lib.optionalString (cfg.majorVersion == "6") "--sign") + "--bup" + "--multi-spec" + (builtins.toString cfg.flashScriptOverrides.flashArgs) + ])) cfg.firmware.variants; }) + '' mkdir -p $out From 7ce47fb627d7fc178ad0230ed442325213dc6ff7 Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Tue, 6 May 2025 10:27:59 -0700 Subject: [PATCH 21/39] samples: cupti-samples: Enable compilation of cupti-samples in jetpack 6 A couple of patches to fixup the makefile and suppress a -Wunused-result. cupti-samples also exports a shared object now, so install that in $out/lib. --- ...mples-Explicitly-ignore-fread-return.patch | 28 +++++++++++++ ...x-include-path-search-for-common-hea.patch | 39 +++++++++++++++++++ pkgs/samples/cupti-samples.nix | 15 ++++++- 3 files changed, 80 insertions(+), 2 deletions(-) create mode 100644 pkgs/samples/0001-cupti-samples-Explicitly-ignore-fread-return.patch create mode 100644 pkgs/samples/0002-cupti_samples-Fix-include-path-search-for-common-hea.patch diff --git a/pkgs/samples/0001-cupti-samples-Explicitly-ignore-fread-return.patch b/pkgs/samples/0001-cupti-samples-Explicitly-ignore-fread-return.patch new file mode 100644 index 00000000..74c731e2 --- /dev/null +++ b/pkgs/samples/0001-cupti-samples-Explicitly-ignore-fread-return.patch @@ -0,0 +1,28 @@ +From c9c6455af16a0d325fafc48c20d17f14796576d8 Mon Sep 17 00:00:00 2001 +From: Elliot Berman +Date: Tue, 29 Apr 2025 16:36:27 -0700 +Subject: [PATCH 1/2] cupti-samples: Explicitly ignore fread() return + +Suppresses -Wunused-result. +--- + extensions/include/c_util/FileOp.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/extensions/include/c_util/FileOp.h b/extensions/include/c_util/FileOp.h +index ae0bf76..0e187c6 100644 +--- a/extensions/include/c_util/FileOp.h ++++ b/extensions/include/c_util/FileOp.h +@@ -44,7 +44,7 @@ bool ReadBinaryFile(const char* pFileName, std::vector& image) + } + + image.resize((size_t)fileLength); +- fread(&image[0], 1, image.size(), fp); ++ (void)fread(&image[0], 1, image.size(), fp); + fclose(fp); + return true; +-} +\ No newline at end of file ++} +-- +2.49.0 + diff --git a/pkgs/samples/0002-cupti_samples-Fix-include-path-search-for-common-hea.patch b/pkgs/samples/0002-cupti_samples-Fix-include-path-search-for-common-hea.patch new file mode 100644 index 00000000..9b6365cc --- /dev/null +++ b/pkgs/samples/0002-cupti_samples-Fix-include-path-search-for-common-hea.patch @@ -0,0 +1,39 @@ +From e0b4eac5ccf0f85fa4b6cdd2793c9a7e3efac26b Mon Sep 17 00:00:00 2001 +From: Elliot Berman +Date: Tue, 29 Apr 2025 16:42:41 -0700 +Subject: [PATCH 2/2] cupti_samples: Fix include path search for common headers + +--- + pm_sampling/Makefile | 2 +- + sass_metrics/Makefile | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/pm_sampling/Makefile b/pm_sampling/Makefile +index 7b5a98d..fb8b2db 100644 +--- a/pm_sampling/Makefile ++++ b/pm_sampling/Makefile +@@ -9,7 +9,7 @@ endif + CUDA_INSTALL_PATH ?= ../../../.. + CUPTI_INSTALL_PATH ?= $(CUDA_INSTALL_PATH)/extras/CUPTI + NVCC := "$(CUDA_INSTALL_PATH)/bin/nvcc" +-INCLUDES := -I"$(CUDA_INSTALL_PATH)/include" -I$(CUPTI_INSTALL_PATH)/include -I$(CUPTI_INSTALL_PATH)/samples/common ++INCLUDES := -I"$(CUDA_INSTALL_PATH)/include" -I../../include -I../common + + ifeq ($(OS),Windows_NT) + LIB_PATH ?= $(CUPTI_INSTALL_PATH)\lib64 +diff --git a/sass_metrics/Makefile b/sass_metrics/Makefile +index ad37da3..d0be6e1 100644 +--- a/sass_metrics/Makefile ++++ b/sass_metrics/Makefile +@@ -9,7 +9,7 @@ endif + CUDA_INSTALL_PATH ?= ../../../.. + CUPTI_INSTALL_PATH ?= $(CUDA_INSTALL_PATH)/extras/CUPTI + NVCC := "$(CUDA_INSTALL_PATH)/bin/nvcc" +-INCLUDES := -I"$(CUDA_INSTALL_PATH)/include" -I"$(CUPTI_INSTALL_PATH)/include" -I"$(CUPTI_INSTALL_PATH)/samples/common" ++INCLUDES := -I"$(CUDA_INSTALL_PATH)/include" -I"../../include" -I"../common" + TARGET_ARCH ?= $(HOST_ARCH) + TARGET_OS ?= $(shell uname | tr A-Z a-z) + +-- +2.49.0 + diff --git a/pkgs/samples/cupti-samples.nix b/pkgs/samples/cupti-samples.nix index 600e0bba..6f5557c0 100644 --- a/pkgs/samples/cupti-samples.nix +++ b/pkgs/samples/cupti-samples.nix @@ -10,6 +10,7 @@ let inherit (cudaPackages) cuda_nvcc cudatoolkit + cudaAtLeast cudaMajorMinorVersion cudaVersionDashes flags @@ -40,8 +41,14 @@ stdenv.mkDerivation { enableParallelBuilding = true; + patches = lib.optionals (cudaAtLeast "12") [ + ./0001-cupti-samples-Explicitly-ignore-fread-return.patch + ./0002-cupti_samples-Fix-include-path-search-for-common-hea.patch + ]; + # Sample directories which we won't build. ignoredSampleDirs = { + common = 1; extensions = 1; }; @@ -87,8 +94,12 @@ stdenv.mkDerivation { # Skip directories that don't exist or are ignored [[ ! -d $sampleDir || ''${ignoredSampleDirs["$sampleDir"]-0} -eq 1 ]] && continue # Install the sample, using the special name if it exists and the directory name if it doesn't. - install -Dm755 -t "$out/bin" \ - "$sampleDir/''${sampleExes["$sampleDir"]:-"$sampleDir"}" + file="$sampleDir/''${sampleExes["$sampleDir"]:-"$sampleDir"}" + if [[ -x $file ]] ; then + install -Dm755 -t "$out/bin" "$file" + elif [[ -e $file.so ]] ; then + install -Dm555 -t "$out/lib" "$file" + fi done unset -v sampleDir From 9bd20eafed37eb467c153626c752336176204776 Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Tue, 6 May 2025 10:31:33 -0700 Subject: [PATCH 22/39] cudnn-samples: Use cudnn v9 in CUDA 12 Jetpack 6 ships CUDA 12 and uses cudnn v9. --- pkgs/cuda-packages/cudnn/fixup.nix | 22 +++++++++++++++++----- pkgs/samples/cudnn-samples.nix | 12 ++++++++++-- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/pkgs/cuda-packages/cudnn/fixup.nix b/pkgs/cuda-packages/cudnn/fixup.nix index 1b6518ed..751edfbd 100644 --- a/pkgs/cuda-packages/cudnn/fixup.nix +++ b/pkgs/cuda-packages/cudnn/fixup.nix @@ -3,11 +3,17 @@ , libcublas , patchelf , zlib +, cudaMajorVersion , }: let inherit (lib.attrsets) getLib; inherit (lib.meta) getExe; + + cudnnMajorVersion = { + "11" = "8"; + "12" = "9"; + }.${cudaMajorVersion}; in prevAttrs: { buildInputs = prevAttrs.buildInputs or [ ] ++ [ @@ -17,16 +23,22 @@ prevAttrs: { postFixup = prevAttrs.postFixup or "" - + '' + + lib.optionalString (lib.versionAtLeast cudnnMajorVersion "9") '' + pushd "''${!outputLib:?}/lib" >/dev/null + ln -s libcudnn.so.${cudnnMajorVersion} libcudnn.so + popd >/dev/null + '' + + lib.optionalString (lib.versionOlder cudnnMajorVersion "9") '' echo "patchelf-ing libcudnn with runtime dependencies" "${getExe patchelf}" "''${!outputLib:?}/lib/libcudnn.so" --add-needed libcudnn_cnn_infer.so "${getExe patchelf}" "''${!outputLib:?}/lib/libcudnn_ops_infer.so" --add-needed libcublas.so --add-needed libcublasLt.so - - echo "creating symlinks for header files in include without the _v8 suffix before the file extension" + '' + + '' + echo "creating symlinks for header files in include without the _v${cudnnMajorVersion} suffix before the file extension" pushd "''${!outputInclude:?}/include" >/dev/null for file in *.h; do - echo "symlinking $file to $(basename "$file" "_v8.h").h" - ln -s "$file" "$(basename "$file" "_v8.h").h" + echo "symlinking $file to $(basename "$file" "_v${cudnnMajorVersion}.h").h" + ln -s "$file" "$(basename "$file" "_v${cudnnMajorVersion}.h").h" done unset -v file popd >/dev/null diff --git a/pkgs/samples/cudnn-samples.nix b/pkgs/samples/cudnn-samples.nix index 654e3264..fd6980bc 100644 --- a/pkgs/samples/cudnn-samples.nix +++ b/pkgs/samples/cudnn-samples.nix @@ -10,18 +10,24 @@ let cuda_nvcc cudatoolkit cudnn + cudaMajorVersion flags ; + + cudnnMajorVersion = { + "11" = "8"; + "12" = "9"; + }.${cudaMajorVersion}; in stdenv.mkDerivation { __structuredAttrs = true; strictDeps = true; pname = "cudnn-samples"; - inherit (debs.common.libcudnn8-samples) src version; + inherit (debs.common."libcudnn${cudnnMajorVersion}-samples") src version; unpackCmd = "dpkg -x $src source"; - sourceRoot = "source/usr/src/cudnn_samples_v8"; + sourceRoot = "source/usr/src/cudnn_samples_v${cudnnMajorVersion}"; nativeBuildInputs = [ autoAddDriverRunpath cuda_nvcc dpkg ]; buildInputs = [ cudatoolkit cudnn ]; @@ -40,6 +46,8 @@ stdenv.mkDerivation { # Sample directories which we won't build. ignoredSampleDirs = { + cmake = 1; + common = 1; # `mnistCUDNN` requires freeimage which is marked vulnerable in upstream as of 24.05 mnistCUDNN = 1; }; From 00740749943e773c35f663b5a2b1ae04678a592c Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Tue, 6 May 2025 10:32:12 -0700 Subject: [PATCH 23/39] samples: Patch fixes for jetpack 6 Minor patch no longer-applicable and hunk adjustments for jetpack 6. --- pkgs/samples/libnvinfer-samples.nix | 3 ++- pkgs/samples/multimedia-samples.nix | 16 ++++++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/pkgs/samples/libnvinfer-samples.nix b/pkgs/samples/libnvinfer-samples.nix index b93be535..1c248bd0 100644 --- a/pkgs/samples/libnvinfer-samples.nix +++ b/pkgs/samples/libnvinfer-samples.nix @@ -13,6 +13,7 @@ let cuda_nvcc cuda_profiler_api cudatoolkit + cudaOlder cudnn flags libcublas @@ -32,7 +33,7 @@ stdenv.mkDerivation { nativeBuildInputs = [ autoAddDriverRunpath cuda_nvcc dpkg ]; buildInputs = [ cuda_cudart cuda_profiler_api cudnn libcublas tensorrt ]; - postPatch = '' + postPatch = lib.optionalString (cudaOlder "12") '' substituteInPlace Makefile.config \ --replace-fail \ '-I"$(CUDNN_INSTALL_DIR)/include"' \ diff --git a/pkgs/samples/multimedia-samples.nix b/pkgs/samples/multimedia-samples.nix index c61a4484..a306d969 100644 --- a/pkgs/samples/multimedia-samples.nix +++ b/pkgs/samples/multimedia-samples.nix @@ -8,6 +8,7 @@ , l4t-camera , l4t-cuda , l4t-multimedia +, l4tOlder , lib , libdrm , libglvnd @@ -63,10 +64,17 @@ stdenv.mkDerivation { # TODO: Unify this with headers in l4t-jetson-multimedia-api patches = [ - (fetchurl { - url = "https://raw.githubusercontent.com/OE4T/meta-tegra/af0a93313c13e9eac4e80082d8a8e8ac5f7ad6e8/recipes-multimedia/argus/files/0005-Remove-DO-NOT-USE-declarations-from-v4l2_nv_extensio.patch"; - sha256 = "sha256-IJ1teGEUxYDEPYSvYZbqdmUYg9tOORN7WGYpDaUUnHY="; - }) + (if (l4tOlder "36") then + (fetchurl { + url = "https://raw.githubusercontent.com/OE4T/meta-tegra/af0a93313c13e9eac4e80082d8a8e8ac5f7ad6e8/recipes-multimedia/argus/files/0005-Remove-DO-NOT-USE-declarations-from-v4l2_nv_extensio.patch"; + sha256 = "sha256-IJ1teGEUxYDEPYSvYZbqdmUYg9tOORN7WGYpDaUUnHY="; + }) + else + (fetchurl { + url = "https://raw.githubusercontent.com/OE4T/meta-tegra/2b51abd5b3e2436f8eeb98e8f985806521379174/recipes-multimedia/argus/files/0001-Remove-DO-NOT-USE-declarations-from-v4l2_nv_extensio.patch"; + sha256 = "sha256-J9Hhm7oOptUR39KMbxZB1+esAlKWTyyKk1Ep3ZlJ488="; + }) + ) (fetchurl { url = "https://raw.githubusercontent.com/OE4T/meta-tegra/4f825ddeb2e9a1b5fbff623955123c20b82c8274/recipes-multimedia/argus/tegra-mmapi-samples/0004-samples-classes-fix-a-data-race-in-shutting-down-deq.patch"; sha256 = "sha256-mkS2eKuDvXDhHkIglUGcYbEWGxCP5gRSdmEvuVw/chI="; From a5d36e577dea747d680e00e43cc257f3ff6d9e42 Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Wed, 7 May 2025 11:30:04 -0700 Subject: [PATCH 24/39] cuda-packages: shared library resolution for jetpack 6 Add additional build input dependencies needed only on jetpack 6 (cuda 12+). --- mk-overlay.nix | 4 ++-- pkgs/cuda-packages/cuda_cccl.nix | 4 ++-- pkgs/cuda-packages/cuda_gdb/fixup.nix | 2 ++ pkgs/cuda-packages/libcusolver/fixup.nix | 16 ++++++++++++++-- pkgs/cuda-packages/libcusparse/fixup.nix | 6 ++++++ .../package.nix} | 1 + pkgs/cuda-packages/libnvjitlink.nix | 17 +++++++++++++++++ pkgs/cuda-packages/libnvjpeg.nix | 17 +++++++++++++++++ pkgs/cuda-packages/tensorrt/fixup.nix | 4 ++++ pkgs/l4t/default.nix | 12 ++++++++++++ 10 files changed, 77 insertions(+), 6 deletions(-) create mode 100644 pkgs/cuda-packages/libcusparse/fixup.nix rename pkgs/cuda-packages/{libcusparse.nix => libcusparse/package.nix} (88%) create mode 100644 pkgs/cuda-packages/libnvjitlink.nix create mode 100644 pkgs/cuda-packages/libnvjpeg.nix diff --git a/mk-overlay.nix b/mk-overlay.nix index f6186f1f..91824d1d 100644 --- a/mk-overlay.nix +++ b/mk-overlay.nix @@ -180,6 +180,6 @@ makeScope final.newScope (self: { # attribute set, we cannot use self.callPackages because we would end up with infinite recursion. # Instead, we must either use final.callPackages or packagesFromDirectoryRecursive. // final.callPackages ./pkgs/l4t { - inherit (self) debs l4tMajorMinorPatchVersion; - inherit cudaDriverMajorMinorVersion; + inherit (self) debs; + inherit l4tMajorMinorPatchVersion cudaDriverMajorMinorVersion l4tAtLeast; }) diff --git a/pkgs/cuda-packages/cuda_cccl.nix b/pkgs/cuda-packages/cuda_cccl.nix index 076198fc..829d567e 100644 --- a/pkgs/cuda-packages/cuda_cccl.nix +++ b/pkgs/cuda-packages/cuda_cccl.nix @@ -1,6 +1,6 @@ -{ deb-builder }: +{ deb-builder, cudaOlder }: deb-builder { - sourceName = "cuda-thrust"; + sourceName = "cuda-${if cudaOlder "12" then "thrust" else "cccl"}"; packageName = "cuda_cccl"; outputs = [ "out" diff --git a/pkgs/cuda-packages/cuda_gdb/fixup.nix b/pkgs/cuda-packages/cuda_gdb/fixup.nix index da558b6c..f9089551 100644 --- a/pkgs/cuda-packages/cuda_gdb/fixup.nix +++ b/pkgs/cuda-packages/cuda_gdb/fixup.nix @@ -4,6 +4,7 @@ , lib , python3 , stdenv +, gmp }: let inherit (lib.attrsets) recursiveUpdate; @@ -17,6 +18,7 @@ prevAttrs: { buildInputs = prevAttrs.buildInputs or [ ] + ++ optionals (cudaAtLeast "12") [ gmp ] # aarch64, sbsa needs expat ++ optionals stdenv.hostPlatform.isAarch64 [ expat ]; diff --git a/pkgs/cuda-packages/libcusolver/fixup.nix b/pkgs/cuda-packages/libcusolver/fixup.nix index 5deef439..da7989c9 100644 --- a/pkgs/cuda-packages/libcusolver/fixup.nix +++ b/pkgs/cuda-packages/libcusolver/fixup.nix @@ -1,3 +1,15 @@ # NOTE: All fixups must be at least binary functions to avoid callPackage adding override attributes. -{ lib, libcublas }: -prevAttrs: { buildInputs = prevAttrs.buildInputs or [ ] ++ [ (lib.getLib libcublas) ]; } +{ lib +, libcublas +, libcusparse ? null +, libnvjitlink ? null +, cudaAtLeast +}: +prevAttrs: { + buildInputs = prevAttrs.buildInputs or [ ] ++ [ + (lib.getLib libcublas) + ] ++ lib.lists.optionals (cudaAtLeast "12") [ + (lib.getLib libcusparse) + (lib.getLib libnvjitlink) + ]; +} diff --git a/pkgs/cuda-packages/libcusparse/fixup.nix b/pkgs/cuda-packages/libcusparse/fixup.nix new file mode 100644 index 00000000..41f3360d --- /dev/null +++ b/pkgs/cuda-packages/libcusparse/fixup.nix @@ -0,0 +1,6 @@ +# NOTE: All fixups must be at least binary functions to avoid callPackage adding override attributes. +{ lib, libnvjitlink ? null, cudaAtLeast }: +prevAttrs: { + buildInputs = prevAttrs.buildInputs or [ ] + ++ lib.lists.optionals (cudaAtLeast "12") [ (lib.getLib libnvjitlink) ]; +} diff --git a/pkgs/cuda-packages/libcusparse.nix b/pkgs/cuda-packages/libcusparse/package.nix similarity index 88% rename from pkgs/cuda-packages/libcusparse.nix rename to pkgs/cuda-packages/libcusparse/package.nix index 3ed274dd..83729a16 100644 --- a/pkgs/cuda-packages/libcusparse.nix +++ b/pkgs/cuda-packages/libcusparse/package.nix @@ -1,6 +1,7 @@ { deb-builder }: deb-builder { sourceName = "libcusparse"; + fixupFns = [ ./fixup.nix ]; outputs = [ "out" "dev" diff --git a/pkgs/cuda-packages/libnvjitlink.nix b/pkgs/cuda-packages/libnvjitlink.nix new file mode 100644 index 00000000..b222ae2e --- /dev/null +++ b/pkgs/cuda-packages/libnvjitlink.nix @@ -0,0 +1,17 @@ +{ deb-builder }: +deb-builder { + sourceName = "libnvjitlink"; + packageName = "libnvjitlink"; + outputs = [ + "out" + "dev" + "include" + "lib" + "static" + "stubs" + ]; + releaseInfo = { + license = "CUDA Toolkit"; + name = "libnvjitlink"; + }; +} diff --git a/pkgs/cuda-packages/libnvjpeg.nix b/pkgs/cuda-packages/libnvjpeg.nix new file mode 100644 index 00000000..ca7e1995 --- /dev/null +++ b/pkgs/cuda-packages/libnvjpeg.nix @@ -0,0 +1,17 @@ +{ deb-builder }: +deb-builder { + sourceName = "libnvjpeg"; + packageName = "libnvjpeg"; + outputs = [ + "out" + "dev" + "include" + "lib" + "static" + "stubs" + ]; + releaseInfo = { + license = "CUDA Toolkit"; + name = "libnvjpeg"; + }; +} diff --git a/pkgs/cuda-packages/tensorrt/fixup.nix b/pkgs/cuda-packages/tensorrt/fixup.nix index 770ac7c4..acf256ce 100644 --- a/pkgs/cuda-packages/tensorrt/fixup.nix +++ b/pkgs/cuda-packages/tensorrt/fixup.nix @@ -7,6 +7,8 @@ , libcublas , libcudla , patchelf +, cudaAtLeast +, l4t-dla-compiler ? null # something bad if cudaAtLeast "12" passes }: prevAttrs: { # Samples, lib, and static all reference a FHS @@ -20,6 +22,8 @@ prevAttrs: { cudnn libcublas libcudla + ] ++ lib.optionals (cudaAtLeast "12") [ + l4t-dla-compiler ]; debNormalization = diff --git a/pkgs/l4t/default.nix b/pkgs/l4t/default.nix index 615d00cd..c99984b9 100644 --- a/pkgs/l4t/default.nix +++ b/pkgs/l4t/default.nix @@ -21,6 +21,7 @@ , bc , debs , l4tMajorMinorPatchVersion +, l4tAtLeast , cudaPackages , cudaDriverMajorMinorVersion }: @@ -243,6 +244,14 @@ let ''; }; + # Only for L4T r36+ + l4t-dla-compiler = buildFromDeb { + name = "nvidia-l4t-dla-compiler"; + src = debs.common."nvidia-l4t-dla-compiler".src; + version = debs.common."nvidia-l4t-dla-compiler".version; + buildInputs = [ l4t-cuda ]; + }; + # TODO: Make nvwifibt systemd scripts work l4t-firmware = buildFromDeb { name = "nvidia-l4t-firmware"; @@ -439,4 +448,7 @@ in l4t-tools l4t-wayland l4t-xusb-firmware; +} // lib.optionalAttrs (l4tAtLeast "36") { + inherit + l4t-dla-compiler; } From b9576a16efa5da89a68d37a661946c2c6b25d7cf Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Wed, 7 May 2025 11:32:10 -0700 Subject: [PATCH 25/39] cuda-packages: Add cuda 12.6 version configuration --- pkgs/cuda-packages/cudaConfig.nix | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/pkgs/cuda-packages/cudaConfig.nix b/pkgs/cuda-packages/cudaConfig.nix index 19c7c3c6..d34e15d5 100644 --- a/pkgs/cuda-packages/cudaConfig.nix +++ b/pkgs/cuda-packages/cudaConfig.nix @@ -23,7 +23,7 @@ _: { isJetson = true; minCudaMajorMinorVersion = "11.4"; dontDefaultAfterCudaMajorMinorVersion = null; - maxCudaMajorMinorVersion = "12.2"; + maxCudaMajorMinorVersion = "12.8"; }; }; # NVCC compatibilities come from @@ -45,6 +45,19 @@ _: { minMajorVersion = "6"; }; }; + + # Maximum Clang version is 18 + # https://docs.nvidia.com/cuda/archive/12.6.0/cuda-installation-guide-linux/index.html#host-compiler-support-policy + "12.6" = { + clang = { + maxMajorVersion = "18"; + minMajorVersion = "7"; + }; + gcc = { + maxMajorVersion = "13"; + minMajorVersion = "6"; + }; + }; }; }; } From 1ba05b74ce99e45267cdd3c3cc5c9e900e152a6c Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Wed, 7 May 2025 11:34:22 -0700 Subject: [PATCH 26/39] cuda-packages: cuda_gdb: Don't bail if our python version isn't found --- pkgs/cuda-packages/cuda_gdb/fixup.nix | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/pkgs/cuda-packages/cuda_gdb/fixup.nix b/pkgs/cuda-packages/cuda_gdb/fixup.nix index f9089551..e6212d37 100644 --- a/pkgs/cuda-packages/cuda_gdb/fixup.nix +++ b/pkgs/cuda-packages/cuda_gdb/fixup.nix @@ -27,12 +27,11 @@ prevAttrs: { prevAttrs.postInstall or "" # Remove binaries requiring Python3 versions we do not have + optionalString (cudaAtLeast "12.5") '' - pushd "''${!outputBin:?}/bin" >/dev/null echo "removing cuda-gdb-python*-tui binaries for Python 3 versions we do not have" - mv "cuda-gdb-python${python3MajorMinorVersion}-tui" ../ - rm -f cuda-gdb-python*-tui - mv "../cuda-gdb-python${python3MajorMinorVersion}-tui" . - popd >/dev/null + find "''${!outputBin:?}/bin" \ + -name cuda-gdb-python\*-tui \ + \( ! -name "cuda-gdb-python${python3MajorMinorVersion}-tui" \) \ + -print -delete ''; passthru = recursiveUpdate (prevAttrs.passthru or { }) { From 0e2e4bcb9187b54df1095d09e083920c6e430fc6 Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Wed, 7 May 2025 12:35:59 -0700 Subject: [PATCH 27/39] cuda-packages: cuda_nvcc: Align with ConnorBaker/cuda-packages Align cuda_nvcc fixups with https://github.com/ConnorBaker/cuda-packages/blob/7731ebdf397c5ce123571abf2dc41ebac86237d3/pkgs/development/cuda-modules/fixups/cuda/cuda_nvcc.nix --- pkgs/cuda-packages/cuda_nvcc/fixup.nix | 35 +++++++++++++++----------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/pkgs/cuda-packages/cuda_nvcc/fixup.nix b/pkgs/cuda-packages/cuda_nvcc/fixup.nix index 9ef060dc..e6f219ac 100644 --- a/pkgs/cuda-packages/cuda_nvcc/fixup.nix +++ b/pkgs/cuda-packages/cuda_nvcc/fixup.nix @@ -1,18 +1,23 @@ # NOTE: All fixups must be at least binary functions to avoid callPackage adding override attributes. { backendStdenv , cudaAtLeast -, cudaConfig -, cudaMajorMinorPatchVersion -, cudaMajorMinorVersion , cudaOlder , lib -, makeBinaryWrapper , setupCudaHook }: let inherit (lib.strings) concatStringsSep optionalString; in +let cudaStdenv = backendStdenv; in finalAttrs: prevAttrs: { + # The nvcc and cicc binaries contain hard-coded references to /usr + allowFHSReferences = true; + # Entries here will be in nativeBuildInputs when cuda_nvcc is in nativeBuildInputs + propagatedBuildInputs = prevAttrs.propagatedBuildInputs or [ ] ++ [ + # nvccHook + cudaStdenv.cc + ]; + # Patch the nvcc.profile. # Syntax: # - `=` for assignment, @@ -73,8 +78,7 @@ finalAttrs: prevAttrs: { # Always move the nvvm directory to the bin output. '' moveToOutput "nvvm" "''${!outputBin:?}" - echo "moving nvvm/lib64 to nvvm/lib" - mv "''${!outputBin:?}/nvvm/lib64" "''${!outputBin:?}/nvvm/lib" + mv --verbose --no-clobber "''${!outputBin:?}/nvvm/lib64" "''${!outputBin:?}/nvvm/lib" '' # Create a directory for our manual propagation. + '' @@ -98,7 +102,7 @@ finalAttrs: prevAttrs: { "''${!outputInclude:?}/include" '' # Add the dependency on the include output to the nvcc.profile. - + '' + + lib.optionalString (cudaOlder "12") '' echo "adding ''${!outputInclude:?} to propagatedBuildInputs of ''${!outputBin:?}" printWords "''${!outputInclude:?}" >> "''${!outputBin:?}/nix-support/native-propagated-build-inputs" '' @@ -106,7 +110,11 @@ finalAttrs: prevAttrs: { + ( let # TODO: Should we also patch the LIBRARIES line's use of $(TOP)/$(_TARGET_DIR_)? - oldNvvmDir = concatStringsSep "/" [ "$(TOP)" "$(_NVVM_BRANCH_)" ]; + oldNvvmDir = lib.concatStringsSep "/" ( + [ "$(TOP)" ] + ++ lib.optionals (cudaOlder "12.5") [ "$(_NVVM_BRANCH_)" ] + ++ lib.optionals (cudaAtLeast "12.5") [ "nvvm" ] + ); newNvvmDir = ''''${!outputBin:?}/nvvm''; in # Unconditional patching to switch to the correct NVVM paths. @@ -122,11 +130,11 @@ finalAttrs: prevAttrs: { # Add the dependency on backendStdenv.cc and the new NVVM directories to the nvcc.profile. # NOTE: Escape the dollar sign in the variable expansion to prevent early expansion. + '' - echo "adding backendStdenv.cc and ${newNvvmDir} to nvcc.profile" + echo "adding cudaStdenv.cc and ${newNvvmDir} to nvcc.profile" cat << EOF >> "''${!outputBin:?}/bin/nvcc.profile" # Fix a compatible backend compiler - PATH += "${backendStdenv.cc}/bin": + PATH += "${cudaStdenv.cc}/bin": # Expose the split-out nvvm LIBRARIES =+ \$(_SPACE_) "-L${newNvvmDir}/lib" @@ -140,7 +148,7 @@ finalAttrs: prevAttrs: { # NOTE: mkDerivation's setup.sh clobbers all dependency files in fixupPhase, so we must register the paths in postFixup. postFixup = prevAttrs.postFixup or "" - + '' + + lib.optionalString (cudaOlder "12") ('' echo "adding setupCudaHook to propagatedBuildInputs of ''${!outputBin:?}" printWords "${setupCudaHook}" >> "''${!outputBin:?}/nix-support/propagated-build-inputs" '' @@ -149,10 +157,7 @@ finalAttrs: prevAttrs: { + '' echo "adding backendStdenv.cc to propagatedNativeBuildInputs of ''${!outputBin:?}" printWords "${backendStdenv.cc}" >> "''${!outputBin:?}/nix-support/propagated-native-build-inputs" - ''; - - # The nvcc and cicc binaries contain hard-coded references to /usr - allowFHSReferences = true; + ''); meta = prevAttrs.meta or { } // { mainProgram = "nvcc"; From bf87be9230e78cae3f0b98e3fe224f45061c9817 Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Wed, 7 May 2025 13:10:21 -0700 Subject: [PATCH 28/39] cuda-samples: Compile from GitHub source in CUDA 12 CUDA no longer ships the cuda-samples source. Fetch and build it from GitHub. --- pkgs/samples/cuda-samples.nix | 306 ++++++++++++++++++++++++++++------ pkgs/samples/cuda-test.nix | 8 +- 2 files changed, 260 insertions(+), 54 deletions(-) diff --git a/pkgs/samples/cuda-samples.nix b/pkgs/samples/cuda-samples.nix index 1228b5eb..783090c2 100644 --- a/pkgs/samples/cuda-samples.nix +++ b/pkgs/samples/cuda-samples.nix @@ -8,6 +8,8 @@ , lib , pkg-config , stdenv +, cmake +, fetchFromGitHub }: let inherit (cudaPackages) @@ -16,56 +18,260 @@ let cudaMajorMinorVersion cudaVersionDashes flags + cuda_cccl + cuda_cudart + cuda_nvrtc + cuda_nvtx + cuda_profiler_api + cudaAtLeast + cudaOlder + libcublas + libcufft + libcurand + libcusolver + libcusparse + libnpp + libnvjpeg ; inherit (stdenv.hostPlatform) parsed; in -stdenv.mkDerivation { - __structuredAttrs = true; - strictDeps = true; - - pname = "cuda-samples"; - inherit (debs.common."cuda-samples-${cudaVersionDashes}") src version; - - unpackCmd = "dpkg -x $src source"; - sourceRoot = "source/usr/local/cuda-${cudaMajorMinorVersion}/samples"; - - nativeBuildInputs = [ autoAddDriverRunpath cuda_nvcc dpkg pkg-config ]; - buildInputs = [ cudatoolkit ]; - - # NOTE: ptxjit requires that we build for a single architecture, which we don't necessarily do. - postPatch = '' - substituteInPlace 0_Simple/matrixMul_nvrtc/Makefile \ - --replace-fail \ - '$(EXEC) cp "$(CUDA_PATH)/$(CUDA_INSTALL_TARGET_DIR)include/cooperative_groups.h" .' \ - '$(EXEC) cp "$(CUDA_PATH)/include/cooperative_groups.h" .' \ - --replace-fail \ - '$(EXEC) cp -r "$(CUDA_PATH)/$(CUDA_INSTALL_TARGET_DIR)include/cooperative_groups" .' \ - '$(EXEC) cp -r "$(CUDA_PATH)/include/cooperative_groups" .' - - substituteInPlace 6_Advanced/ptxjit/Makefile \ - --replace-fail \ - 'SAMPLE_ENABLED := 1' \ - 'SAMPLE_ENABLED := 0' - ''; - - makeFlags = [ - "CUDA_PATH=${cudatoolkit}" - "SMS=${lib.replaceStrings [ ";" ] [" "] flags.cmakeCudaArchitecturesString}" - # NOTE: CUDA_SEARCH_PATH is only ever used to find stubs. - # Some packages (like deviceQueryDrv) try to link against driver stubs and are not built if they are not found. - "CUDA_SEARCH_PATH=${cudatoolkit}/lib/stubs" - ]; - - enableParallelBuilding = true; - - installPhase = '' - runHook preInstall - - install -Dm755 -t $out/bin bin/${parsed.cpu.name}/${parsed.kernel.name}/release/* - - # *_nvrtc samples require your current working directory contains the corresponding .cu file - find -ipath "*_nvrtc/*.cu" -exec install -Dt $out/data {} \; - - runHook postInstall - ''; -} +if cudaOlder "12" then + stdenv.mkDerivation + { + __structuredAttrs = true; + strictDeps = true; + + pname = "cuda-samples"; + inherit (debs.common."cuda-samples-${cudaVersionDashes}") src version; + + unpackCmd = "dpkg -x $src source"; + sourceRoot = "source/usr/local/cuda-${cudaMajorMinorVersion}/samples"; + + nativeBuildInputs = [ autoAddDriverRunpath cuda_nvcc dpkg pkg-config ]; + buildInputs = [ cudatoolkit ]; + + # NOTE: ptxjit requires that we build for a single architecture, which we don't necessarily do. + postPatch = '' + substituteInPlace 0_Simple/matrixMul_nvrtc/Makefile \ + --replace-fail \ + '$(EXEC) cp "$(CUDA_PATH)/$(CUDA_INSTALL_TARGET_DIR)include/cooperative_groups.h" .' \ + '$(EXEC) cp "$(CUDA_PATH)/include/cooperative_groups.h" .' \ + --replace-fail \ + '$(EXEC) cp -r "$(CUDA_PATH)/$(CUDA_INSTALL_TARGET_DIR)include/cooperative_groups" .' \ + '$(EXEC) cp -r "$(CUDA_PATH)/include/cooperative_groups" .' + + substituteInPlace 6_Advanced/ptxjit/Makefile \ + --replace-fail \ + 'SAMPLE_ENABLED := 1' \ + 'SAMPLE_ENABLED := 0' + ''; + + makeFlags = [ + "CUDA_PATH=${cudatoolkit}" + "SMS=${lib.replaceStrings [ ";" ] [" "] flags.cmakeCudaArchitecturesString}" + # NOTE: CUDA_SEARCH_PATH is only ever used to find stubs. + # Some packages (like deviceQueryDrv) try to link against driver stubs and are not built if they are not found. + "CUDA_SEARCH_PATH=${cudatoolkit}/lib/stubs" + ]; + + enableParallelBuilding = true; + + installPhase = '' + runHook preInstall + + install -Dm755 -t $out/bin bin/${parsed.cpu.name}/${parsed.kernel.name}/release/* + + # *_nvrtc samples require your current working directory contains the corresponding .cu file + find -ipath "*_nvrtc/*.cu" -exec install -Dt $out/data {} \; + + runHook postInstall + ''; + } +else +# Copied from https://github.com/ConnorBaker/cuda-packages/blob/7731ebdf397c5ce123571abf2dc41ebac86237d3/pkgs/development/cuda-modules/packages/cuda-samples.nix + stdenv.mkDerivation (finalAttrs: { + __structuredAttrs = true; + strictDeps = true; + + pname = "cuda-samples"; + version = "12.8"; + + # We should be able to use samples from the latest version of CUDA + # on most of the CUDA package sets we have. + # Plus, 12.8 and later are rewritten to use CMake which makes it much, much easier to build. + src = fetchFromGitHub { + owner = "NVIDIA"; + repo = "cuda-samples"; + tag = "v${finalAttrs.version}"; + hash = "sha256-Ba0Fi0v/sQ+1iJ4mslgyIAE+oK5KO0lMoTQCC91vpiA="; + }; + + prePatch = + # https://github.com/NVIDIA/cuda-samples/issues/333 + '' + echo "removing sample 0_Introduction/UnifiedMemoryStreams which requires OpenMP support for CUDA" + substituteInPlace \ + "$NIX_BUILD_TOP/$sourceRoot/Samples/0_Introduction/CMakeLists.txt" \ + --replace-fail \ + 'add_subdirectory(UnifiedMemoryStreams)' \ + '# add_subdirectory(UnifiedMemoryStreams)' + '' + # This sample tries to use a relative path, which doesn't work for our splayed installation. + + '' + echo "patching sample 0_Introduction/matrixMul_nvrtc" + substituteInPlace \ + "$NIX_BUILD_TOP/$sourceRoot/Samples/0_Introduction/matrixMul_nvrtc/CMakeLists.txt" \ + --replace-fail \ + "\''${CUDAToolkit_BIN_DIR}/../include/cooperative_groups" \ + "${lib.getOutput "include" cuda_cudart}/include/cooperative_groups" \ + --replace-fail \ + "\''${CUDAToolkit_BIN_DIR}/../include/nv" \ + "${lib.getOutput "include" cuda_cccl}/include/nv" \ + --replace-fail \ + "\''${CUDAToolkit_BIN_DIR}/../include/cuda" \ + "${lib.getOutput "include" cuda_cccl}/include/cuda" + '' + # These three samples give undefined references, like + # nvlink error : Undefined reference to '__cudaCDP2Free' in 'CMakeFiles/cdpBezierTessellation.dir/BezierLineCDP.cu.o' + # nvlink error : Undefined reference to '__cudaCDP2Malloc' in 'CMakeFiles/cdpBezierTessellation.dir/BezierLineCDP.cu.o' + # nvlink error : Undefined reference to '__cudaCDP2GetParameterBufferV2' in 'CMakeFiles/cdpBezierTessellation.dir/BezierLineCDP.cu.o' + # nvlink error : Undefined reference to '__cudaCDP2LaunchDeviceV2' in 'CMakeFiles/cdpBezierTessellation.dir/BezierLineCDP.cu.o' + + '' + for sample in cdp{AdvancedQuicksort,BezierTessellation,Quadtree,SimplePrint,SimpleQuicksort}; do + echo "removing sample 3_CUDA_Features/$sample which fails to link" + substituteInPlace \ + "$NIX_BUILD_TOP/$sourceRoot/Samples/3_CUDA_Features/CMakeLists.txt" \ + --replace-fail \ + "add_subdirectory($sample)" \ + "# add_subdirectory($sample)" + done + unset -v sample + '' + + lib.optionalString (cudaOlder "12.4") '' + echo "removing sample 3_CUDA_Features/graphConditionalNodes which requires at least CUDA 12.4" + substituteInPlace \ + "$NIX_BUILD_TOP/$sourceRoot/Samples/3_CUDA_Features/CMakeLists.txt" \ + --replace-fail \ + "add_subdirectory(graphConditionalNodes)" \ + "# add_subdirectory(graphConditionalNodes)" + '' + # For some reason this sample requires a static library, which we don't propagate by default due to size. + + '' + echo "patching sample 4_CUDA_Libraries/simpleCUFFT_callback to use dynamic library" + substituteInPlace \ + "$NIX_BUILD_TOP/$sourceRoot/Samples/4_CUDA_Libraries/simpleCUFFT_callback/CMakeLists.txt" \ + --replace-fail \ + 'CUDA::cufft_static' \ + 'CUDA::cufft' + '' + # Patch to use the correct path to libnvJitLink.so, or disable the sample if older than 12.4. + + lib.optionalString (cudaOlder "12.4") '' + echo "removing sample 4_CUDA_Libraries/jitLto which requires at least CUDA 12.4" + substituteInPlace \ + "$NIX_BUILD_TOP/$sourceRoot/Samples/4_CUDA_Libraries/CMakeLists.txt" \ + --replace-fail \ + "add_subdirectory(jitLto)" \ + "# add_subdirectory(jitLto)" + '' + + lib.optionalString (cudaAtLeast "12.4") '' + echo "patching sample 4_CUDA_Libraries/jitLto to use correct path to libnvJitLink.so" + substituteInPlace \ + "$NIX_BUILD_TOP/$sourceRoot/Samples/4_CUDA_Libraries/jitLto/CMakeLists.txt" \ + --replace-fail \ + "\''${CUDAToolkit_LIBRARY_DIR}/libnvJitLink.so" \ + "${lib.getLib cudaPackages.libnvjitlink}/lib/libnvJitLink.so" + '' + # /build/NVIDIA-cuda-samples-v12.8/Samples/4_CUDA_Libraries/watershedSegmentationNPP/watershedSegmentationNPP.cpp:272:80: error: cannot convert 'size_t*' {aka 'long unsigned int*'} to 'int*' + # 272 | nppStatus = nppiSegmentWatershedGetBufferSize_8u_C1R(oSizeROI[nImage], &aSegmentationScratchBufferSize[nImage]); + # | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + # | | + # | size_t* {aka long unsigned int*} + + lib.optionalString (cudaOlder "12.8") '' + echo "removing sample 4_CUDA_Libraries/watershedSegmentationNPP which requires at least CUDA 12.8" + substituteInPlace \ + "$NIX_BUILD_TOP/$sourceRoot/Samples/4_CUDA_Libraries/CMakeLists.txt" \ + --replace-fail \ + "add_subdirectory(watershedSegmentationNPP)" \ + "# add_subdirectory(watershedSegmentationNPP)" + '' + # NVVM samples require a specific build of LLVM, which is a hassle. + + '' + echo "removing samples 7_libNVVM which require a specific build of LLVM" + substituteInPlace \ + "$NIX_BUILD_TOP/$sourceRoot/Samples/CMakeLists.txt" \ + --replace-fail \ + 'add_subdirectory(7_libNVVM)' \ + '# add_subdirectory(7_libNVVM)' + '' + # Don't use hard-coded CUDA architectures + + '' + echo "patching CMakeLists.txt to use provided CUDA architectures" + local path="" + while IFS= read -r -d $'\0' path; do + echo "removing CMAKE_CUDA_ARCHITECTURES declaration from $path" + substituteInPlace \ + "$path" \ + --replace-fail \ + 'set(CMAKE_CUDA_ARCHITECTURES' \ + '# set(CMAKE_CUDA_ARCHITECTURES' + done < <(grep --files-with-matches --null "set(CMAKE_CUDA_ARCHITECTURES" --recursive "$NIX_BUILD_TOP/$sourceRoot") + unset -v path + ''; + + nativeBuildInputs = [ + # TODO(connorbaker): remove this if we want to support CUDA 12.8 or anything using cuda_compat + autoAddDriverRunpath + cmake + cuda_nvcc + ]; + + buildInputs = [ + cuda_cccl + cuda_cudart + cuda_nvrtc + cuda_nvtx + cuda_profiler_api + libcublas + libcufft + libcurand + libcusolver + libcusparse + libnpp + cudaPackages.libnvjitlink + libnvjpeg + (lib.getOutput "stubs" cuda_cudart) + ]; + + cmakeFlags = [ + (lib.cmakeFeature "CMAKE_CUDA_ARCHITECTURES" flags.cmakeCudaArchitecturesString) + (lib.cmakeBool "BUILD_TEGRA" true) + ]; + + # TODO(@connorbaker): + # For some reason, using the combined find command doesn't delete directories: + # find "$PWD/Samples" \ + # \( -type d -name CMakeFiles \) \ + # -o \( -type f -name cmake_install.cmake \) \ + # -o \( -type f -name Makefile \) \ + # -exec rm -rf {} + + installPhase = '' + runHook preInstall + + pushd "$NIX_BUILD_TOP/$sourceRoot/''${cmakeBuildDir:?}" >/dev/null + + echo "deleting CMake related files" + + find "$PWD/Samples" -type d -name CMakeFiles -exec rm -rf {} + + find "$PWD/Samples" -type f -name cmake_install.cmake -exec rm -rf {} + + find "$PWD/Samples" -type f -name Makefile -exec rm -rf {} + + + echo "copying $PWD/Samples to $out/" + mkdir -p "$out" + cp -rv "$PWD/Samples"/* "$out/" + + popd >/dev/null + + runHook postInstall + ''; + }) + diff --git a/pkgs/samples/cuda-test.nix b/pkgs/samples/cuda-test.nix index 7dd7a81e..ade9836b 100644 --- a/pkgs/samples/cuda-test.nix +++ b/pkgs/samples/cuda-test.nix @@ -6,11 +6,11 @@ writeShellApplication { deviceQuery deviceQueryDrv bandwidthTest clock clock_nvrtc matrixMul matrixMulCUBLAS matrixMulDrv matrixMulDynlinkJIT ) - # clock_nvrtc expects .cu files under $PWD/data - cd ${cuda-samples}/bin for binary in "''${BINARIES[@]}"; do - echo " * Running $binary" - ./"$binary" + real="$(find ${cuda-samples} -type f -name "$binary")" + echo " * Running $real" + # clock_nvrtc expects .cu files under $PWD/data + pushd "$(dirname "$real")" && "$real" && popd echo echo done From d160ea980517493cdc0a0ba132a5274294ce2144 Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Wed, 7 May 2025 16:48:20 -0700 Subject: [PATCH 29/39] nixos module: Default to jetpack 6 for orin and generic --- modules/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/default.nix b/modules/default.nix index c1ad6f2d..cbf92ffb 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -53,7 +53,7 @@ in enable = mkEnableOption "NVIDIA Jetson device support"; majorVersion = mkOption { - default = "5"; + default = if cfg.som == "generic" || lib.hasPrefix "orin" cfg.som then "6" else "5"; type = types.enum jetpackVersions; description = "Jetpack major version to use"; }; From 00be2437cc4152ddacec4883ddd774224b1538f4 Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Thu, 8 May 2025 09:31:25 -0700 Subject: [PATCH 30/39] flake: Add flash scripts/capsule updates for orin + jetpack 5 --- flake.nix | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index c22c064e..19220fbc 100644 --- a/flake.nix +++ b/flake.nix @@ -56,7 +56,7 @@ let supportedConfigurations = lib.listToAttrs (map (c: { - name = "${c.som}" + (lib.optionalString (c.super or false) "-super") + "-${c.carrierBoard}"; + name = c.som + lib.optionalString (c.super or false) "-super" + "-${c.carrierBoard}" + lib.optionalString (c ? majorVersion) "-jp${c.majorVersion}"; value = c; }) [ { som = "orin-agx"; carrierBoard = "devkit"; } @@ -65,6 +65,12 @@ { som = "orin-nano"; carrierBoard = "devkit"; } { som = "orin-nx"; carrierBoard = "devkit"; super = true; } { som = "orin-nano"; carrierBoard = "devkit"; super = true; } + { som = "orin-agx"; carrierBoard = "devkit"; majorVersion = "5"; } + { som = "orin-agx-industrial"; carrierBoard = "devkit"; majorVersion = "5"; } + { som = "orin-nx"; carrierBoard = "devkit"; majorVersion = "5"; } + { som = "orin-nano"; carrierBoard = "devkit"; majorVersion = "5"; } + { som = "orin-nx"; carrierBoard = "devkit"; super = true; majorVersion = "5"; } + { som = "orin-nano"; carrierBoard = "devkit"; super = true; majorVersion = "5"; } { som = "xavier-agx"; carrierBoard = "devkit"; } { som = "xavier-agx-industrial"; carrierBoard = "devkit"; } # TODO: Entirely untested { som = "xavier-nx"; carrierBoard = "devkit"; } From 078f6cfcc127f632ac83649fbfad06553be2d088 Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Thu, 8 May 2025 17:43:34 -0700 Subject: [PATCH 31/39] initrd flashing: Updates for r36 More drivers are modules now and erasesize sysfs is broken. Hard-code it to 16384. Link: https://github.com/OE4T/meta-tegra/commit/106d558853661bac5db90d43e8c848f61d68d507 --- overlay-with-config.nix | 2 +- pkgs/flash-from-device/flash-from-device.sh | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/overlay-with-config.nix b/overlay-with-config.nix index 97160a1d..9afb5e51 100644 --- a/overlay-with-config.nix +++ b/overlay-with-config.nix @@ -78,7 +78,7 @@ final: prev: ( flashInitrd = let - modules = [ "qspi_mtd" "spi_tegra210_qspi" "at24" "spi_nor" ]; + modules = if lib.versions.majorMinor config.system.build.kernel.version == "5.10" then [ "qspi_mtd" "spi_tegra210_qspi" "at24" "spi_nor" ] else [ "mtdblock" "spi_tegra210_quad" ]; modulesClosure = prev.makeModulesClosure { rootModules = modules; kernel = config.system.modulesTree; diff --git a/pkgs/flash-from-device/flash-from-device.sh b/pkgs/flash-from-device/flash-from-device.sh index 6dd92d3a..91cd4a56 100644 --- a/pkgs/flash-from-device/flash-from-device.sh +++ b/pkgs/flash-from-device/flash-from-device.sh @@ -71,11 +71,11 @@ program_spi_partition() { return 1 fi fi - # Multiple copies of the BCT get installed at erase-block boundaries + # Multiple copies of the BCT get installed at 16KiB boundaries # within the defined BCT partition if [ "$partname" = "BCT" ]; then local slotsize - slotsize=$(cat /sys/class/mtd/mtd0/erasesize) + slotsize=16384 if [ -z "$slotsize" ]; then return 1 fi From faecb37e49612ea863041a8d6f65d1b881fe04e8 Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Fri, 9 May 2025 14:21:33 -0700 Subject: [PATCH 32/39] r36: early bring your own kernel support This appears to be working, but the conftest doesn't work well with any of the kernels I threw at it. --- modules/default.nix | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/modules/default.nix b/modules/default.nix index cbf92ffb..7ab71756 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -286,14 +286,15 @@ in ''; boot.extraModulePackages = - ( - # For Orin. Unsupported with PREEMPT_RT. - lib.optional (cfg.majorVersion == "5" && !cfg.kernel.realtime) - config.boot.kernelPackages.nvidia-display-driver - ) ++ ( - lib.optional (jetpackAtLeast "6") - config.boot.kernelPackages.nvidia-oot-modules - ); + # For Orin. Unsupported with PREEMPT_RT. + lib.optionals (cfg.majorVersion == "5" && !cfg.kernel.realtime) + [ config.boot.kernelPackages.nvidia-display-driver ] + ++ + lib.optionals (jetpackAtLeast "6") [ + (pkgs.nvidia-jetpack.kernelPackages.nvidia-oot-modules.overrideAttrs { + inherit (config.boot.kernelPackages) kernel; + }) + ]; hardware.firmware = with pkgs.nvidia-jetpack; [ l4t-firmware From fe35ed385baa94a5b26b4aa747050365bad7a07f Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Fri, 9 May 2025 14:52:34 -0700 Subject: [PATCH 33/39] Add iso installers for jetpack 5 --- README.md | 2 +- flake.nix | 13 +++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 76ecd7a0..09dac1c8 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ At this point, your device should have a working UEFI firmware accessible either Now, build and write the customized installer ISO to a USB drive: ```shell -$ nix build github:anduril/jetpack-nixos#iso_minimal +$ nix build github:anduril/jetpack-nixos#iso_minimal # iso_minimal_jp5 for Xavier (or otherwise wanting to use Jetpack 5) $ sudo dd if=./result/iso/nixos-22.11pre-git-aarch64-linux.iso of=/dev/sdX bs=1M oflag=sync status=progress ``` (Replace `/dev/sdX` with the correct path for your USB drive) diff --git a/flake.nix b/flake.nix index 19220fbc..da102834 100644 --- a/flake.nix +++ b/flake.nix @@ -34,7 +34,9 @@ buildPlatform = "x86_64-linux"; hostPlatform = "aarch64-linux"; }; - + }; + jetpack5_config = { + hardware.nvidia-jetpack.majorVersion = "5"; }; in { @@ -45,6 +47,12 @@ installer_minimal_cross = nixpkgs.lib.nixosSystem { modules = [ aarch64_cross_config installer_minimal_config ]; }; + installer_minimal_jp5 = nixpkgs.lib.nixosSystem { + modules = [ aarch64_config installer_minimal_config jetpack5_config ]; + }; + installer_minimal_cross_jp5 = nixpkgs.lib.nixosSystem { + modules = [ aarch64_cross_config installer_minimal_config jetpack5_config ]; + }; }; nixosModules.default = import ./modules/default.nix; @@ -95,8 +103,8 @@ uefiCapsuleUpdates = lib.mapAttrs' (n: c: lib.nameValuePair "uefi-capsule-update-${n}" c.system.build.uefiCapsuleUpdate) supportedNixOSConfigurations; in { - # TODO: Untested iso_minimal = self.nixosConfigurations.installer_minimal_cross.config.system.build.isoImage; + iso_minimal_jp5 = self.nixosConfigurations.installer_minimal_cross_jp5.config.system.build.isoImage; inherit (self.legacyPackages.x86_64-linux) board-automation python-jetson; @@ -110,6 +118,7 @@ aarch64-linux = { iso_minimal = self.nixosConfigurations.installer_minimal.config.system.build.isoImage; + iso_minimal_jp5 = self.nixosConfigurations.installer_minimal_jp5.config.system.build.isoImage; }; }; From 3becd7c79da2e5014c6ef84ca498b1eee8232324 Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Fri, 9 May 2025 15:29:58 -0700 Subject: [PATCH 34/39] Enable early usb support When booting off rootfs over USB, the USB drivers need to be probed. Add the needed modules to get those drivers probed. --- modules/default.nix | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/modules/default.nix b/modules/default.nix index 7ab71756..530ec5a2 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -271,7 +271,13 @@ in ++ lib.optional (lib.hasPrefix "xavier-" cfg.som || cfg.som == "generic") "video=efifb:off"; # Disable efifb driver, which crashes Xavier NX and possibly AGX boot.initrd.includeDefaultModules = false; # Avoid a bunch of modules we may not get from tegra_defconfig - boot.initrd.availableKernelModules = [ "xhci-tegra" "ucsi_ccg" "typec_ucsi" "typec" ]; # Make sure USB firmware makes it into initrd + boot.initrd.availableKernelModules = [ "xhci-tegra" "ucsi_ccg" "typec_ucsi" "typec" ] # Make sure USB firmware makes it into initrd + ++ lib.optionals (pkgs.nvidia-jetpack.l4tAtLeast "36") [ + "tegra_mce" + "phy-tegra-xusb" + "i2c-tegra" + "fusb301" + ]; boot.kernelModules = [ "nvgpu" ] From 46810e6e39e5bbc5be24b629007a85ba5c31130d Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Mon, 12 May 2025 10:27:36 -0700 Subject: [PATCH 35/39] l4t-multimedia: Drop unneeded patches in L4T r36 --- mk-overlay.nix | 2 +- pkgs/l4t/default.nix | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/mk-overlay.nix b/mk-overlay.nix index 91824d1d..dd8eb408 100644 --- a/mk-overlay.nix +++ b/mk-overlay.nix @@ -181,5 +181,5 @@ makeScope final.newScope (self: { # Instead, we must either use final.callPackages or packagesFromDirectoryRecursive. // final.callPackages ./pkgs/l4t { inherit (self) debs; - inherit l4tMajorMinorPatchVersion cudaDriverMajorMinorVersion l4tAtLeast; + inherit l4tMajorMinorPatchVersion cudaDriverMajorMinorVersion l4tAtLeast l4tOlder; }) diff --git a/pkgs/l4t/default.nix b/pkgs/l4t/default.nix index c99984b9..8c629a66 100644 --- a/pkgs/l4t/default.nix +++ b/pkgs/l4t/default.nix @@ -22,6 +22,7 @@ , debs , l4tMajorMinorPatchVersion , l4tAtLeast +, l4tOlder , cudaPackages , cudaDriverMajorMinorVersion }: @@ -310,7 +311,7 @@ let ''; buildInputs = [ l4t-core l4t-cuda l4t-nvsci pango alsa-lib ] ++ (with gst_all_1; [ gstreamer gst-plugins-base ]); - patches = [ + patches = lib.optionals (l4tOlder "36") [ (fetchpatch { url = "https://raw.githubusercontent.com/OE4T/meta-tegra/af0a93313c13e9eac4e80082d8a8e8ac5f7ad6e8/recipes-multimedia/argus/files/0005-Remove-DO-NOT-USE-declarations-from-v4l2_nv_extensio.patch"; sha256 = "sha256-meHF7uS2TFMoh0qGCmjGzR8hfhE0cCwSP2T3ufzwM0s="; From 69bc1ef95e0edbfe7ae0d7ef4b715531dc3e9714 Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Wed, 14 May 2025 11:10:28 -0700 Subject: [PATCH 36/39] Support for early networking stack --- modules/default.nix | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/modules/default.nix b/modules/default.nix index 530ec5a2..1574c5b5 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -273,10 +273,17 @@ in boot.initrd.includeDefaultModules = false; # Avoid a bunch of modules we may not get from tegra_defconfig boot.initrd.availableKernelModules = [ "xhci-tegra" "ucsi_ccg" "typec_ucsi" "typec" ] # Make sure USB firmware makes it into initrd ++ lib.optionals (pkgs.nvidia-jetpack.l4tAtLeast "36") [ + "nvme" "tegra_mce" "phy-tegra-xusb" "i2c-tegra" "fusb301" + # PCIe for nvme, ethernet, etc. + "phy_tegra194_p2u" + "pcie_tegra194" + # Ethernet for AGX + "nvpps" + "nvethernet" ]; boot.kernelModules = From 01963dd9ae4cb6353aee13748874b01c75048e7f Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Wed, 14 May 2025 18:06:10 -0700 Subject: [PATCH 37/39] tests: oci: Use r36.4.0 container for jetpack 6 --- mk-overlay.nix | 2 +- pkgs/tests/default.nix | 29 +++++++++++++++++++++++------ 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/mk-overlay.nix b/mk-overlay.nix index dd8eb408..b254dff4 100644 --- a/mk-overlay.nix +++ b/mk-overlay.nix @@ -135,7 +135,7 @@ makeScope final.newScope (self: { inherit (finalSamples) callPackage; }); - tests = final.callPackages ./pkgs/tests { inherit l4tMajorMinorPatchVersion; }; + tests = final.callPackages ./pkgs/tests { inherit l4tMajorMinorPatchVersion l4tAtLeast; }; kernelPackagesOverlay = final: _: if self.l4tAtLeast "36" then { diff --git a/pkgs/tests/default.nix b/pkgs/tests/default.nix index 2ebac64d..ae0cc4a1 100644 --- a/pkgs/tests/default.nix +++ b/pkgs/tests/default.nix @@ -1,21 +1,38 @@ { l4tMajorMinorPatchVersion , dockerTools , writeShellScriptBin +, lib +, l4tAtLeast }: let - l4tImage = dockerTools.pullImage { + imageArgs = { + "35" = { + imageDigest = "sha256:d1c8e971ab994235840eacc31c4ef4173bf9156317b1bf8aabe7e01eb21b2a0e"; + finalImageTag = "r35.4.1"; # As of 2024-10-27 there is (still) no 35.6.0 image published + sha256 = "sha256-IDePYGssk6yrcaocnluxBaRJb7BrXxS7tBlEo6hNtHw="; + }; + "36" = { + imageDigest = "sha256:34ccf0f3b63c6da9eee45f2e79de9bf7fdf3beda9abfd72bbf285ae9d40bb673"; + finalImageTag = "r36.4.0"; + sha256 = "sha256-+5+GRmyCl2ZcdYIJHU5snuFzEx1QkZic9bhtx9ZjXeo="; + }; + }; + l4tImage = dockerTools.pullImage ({ imageName = "nvcr.io/nvidia/l4t-jetpack"; - imageDigest = "sha256:d1c8e971ab994235840eacc31c4ef4173bf9156317b1bf8aabe7e01eb21b2a0e"; - finalImageTag = "r35.4.1"; # As of 2024-10-27 there is (still) no 35.6.0 image published - sha256 = "sha256-IDePYGssk6yrcaocnluxBaRJb7BrXxS7tBlEo6hNtHw="; os = "linux"; arch = "arm64"; - }; + } // imageArgs.${lib.versions.major l4tMajorMinorPatchVersion}); + + container_commands = + if l4tAtLeast "36" then + "apt-get update && apt-get install --yes cmake build-essential && wget https://github.com/NVIDIA/cuda-samples/archive/refs/tags/v12.9.tar.gz && tar xf v12.9.tar.gz && mkdir cuda-samples-12.9/build && cd cuda-samples-12.9/build && cmake -DBUILD_TEGRA=True .. ; make -C Samples/1_Utilities/deviceQuery && Samples/1_Utilities/deviceQuery/deviceQuery" + else + "cd /usr/local/cuda/samples/1_Utilities/deviceQuery && make && ./deviceQuery"; in { oci = writeShellScriptBin "oci-test" '' image=${l4tImage.imageName}:${l4tImage.imageTag} - container_commands="cd /usr/local/cuda/samples/1_Utilities/deviceQuery && make && ./deviceQuery" + container_commands="${container_commands}" for runtime in docker podman; do if command -v $runtime 2>&1 >/dev/null; then From 185a44919dfe85cab7453dac338a4f635c650aef Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Mon, 19 May 2025 15:11:46 -0700 Subject: [PATCH 38/39] Package libcupva 2.5 in jetpack 6 --- pkgs/l4t/default.nix | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/pkgs/l4t/default.nix b/pkgs/l4t/default.nix index 8c629a66..2c4ec4d5 100644 --- a/pkgs/l4t/default.nix +++ b/pkgs/l4t/default.nix @@ -233,17 +233,26 @@ let ''; }; - l4t-cupva = buildFromDeb { - name = "cupva"; - src = debs.common."cupva-2.3-l4t".src; - version = debs.common."cupva-2.3-l4t".version; - buildInputs = [ stdenv.cc.cc.lib l4t-cuda l4t-nvsci l4t-pva ]; - postPatch = '' - mkdir -p lib - mv opt/nvidia/cupva-2.3/lib/aarch64-linux-gnu/* lib/ - rm -rf opt - ''; - }; + l4t-cupva = buildFromDeb + ( + let + cupvaMajorMinorVersion = { + "35" = "2.3"; + "36" = "2.5"; + }.${lib.versions.major l4tMajorMinorPatchVersion}; + in + { + name = "cupva"; + src = debs.common."cupva-${cupvaMajorMinorVersion}-l4t".src; + version = debs.common."cupva-${cupvaMajorMinorVersion}-l4t".version; + buildInputs = [ stdenv.cc.cc.lib l4t-cuda l4t-nvsci l4t-pva ]; + postPatch = '' + mkdir -p lib + mv opt/nvidia/cupva-${cupvaMajorMinorVersion}/lib/aarch64-linux-gnu/* lib/ + rm -rf opt + ''; + } + ); # Only for L4T r36+ l4t-dla-compiler = buildFromDeb { From d86fc7894aa0b0f9b11dcb69f1b760ade4fd7efd Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Fri, 13 Jun 2025 14:07:05 -0700 Subject: [PATCH 39/39] README: Update for JetPack 6 Describe support matrix for JetPack 6 and "gotchas" with keeping firmware and kernel/rootfs aligned. --- README.md | 39 ++++++++++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 09dac1c8..c4b4b4fe 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # NixOS module for NVIDIA Jetson devices -This repository packages components from NVIDIA's [Jetpack SDK](https://developer.nvidia.com/embedded/jetpack) for use with NixOS, including: +This repository packages components from NVIDIA's [JetPack SDK](https://developer.nvidia.com/embedded/jetpack) for use with NixOS, including: * Platform firmware flashing scripts * A 5.10 Linux kernel from NVIDIA, which includes some open-source drivers like nvgpu * An [EDK2-based UEFI firmware](https://github.com/NVIDIA/edk2-nvidia) @@ -11,19 +11,22 @@ This repository packages components from NVIDIA's [Jetpack SDK](https://develope - Graphics: Wayland, GBM, EGL, Vulkan - Power/fan control: nvpmodel, nvfancontrol -This package is based on the Jetpack 5 release, and will only work with devices supported by Jetpack 5.1: - * Jetson Orin AGX - * Jetson Orin NX - * Jetson Xavier AGX - * Jetson Xavier NX +This package supports JetPack 5 and 6. It works with NVIDIA's developer kits supported by these versions only: -The Jetson Nano, TX2, and TX1 devices are _not_ supported, since support for them was dropped upstream in Jetpack 5. -In the future, when the Orin Nano is released, it should be possible to make it work as well. +| Device | JetPack 5 | JetPack 6 | +| ------------------ | --------- | --------- | +| Jetson Orin AGX | ✓ | ✓ | +| Jetson Orin NX | ✓ | ✓ | +| Jetson Orin Nano | ✓ | ✓ | +| Jetson Xavier AGX | ✓ | | +| Jetson Xavier NX | ✓ | | + +The Jetson Nano, TX2, and TX1 devices are _not_ supported, since support for them was dropped upstream in JetPack 5. ## Getting started ### Flashing UEFI firmware -This step may be optional if your device already has recent-enough firmware which includes UEFI. (Post-Jetpack 5. Only newly shipped Orin devices might have this) +This step may be optional if your device already has recent-enough firmware which includes UEFI. (Post-JetPack 5. Only newly shipped Orin devices might have this) If you are unsure, I'd recommend flashing the firmware anyway. Plug in your Jetson device, press the "power" button" and ensure the power light turns on. @@ -49,7 +52,7 @@ At this point, your device should have a working UEFI firmware accessible either Now, build and write the customized installer ISO to a USB drive: ```shell -$ nix build github:anduril/jetpack-nixos#iso_minimal # iso_minimal_jp5 for Xavier (or otherwise wanting to use Jetpack 5) +$ nix build github:anduril/jetpack-nixos#iso_minimal # iso_minimal_jp5 for Xavier (or otherwise wanting to use JetPack 5) $ sudo dd if=./result/iso/nixos-22.11pre-git-aarch64-linux.iso of=/dev/sdX bs=1M oflag=sync status=progress ``` (Replace `/dev/sdX` with the correct path for your USB drive) @@ -95,6 +98,20 @@ Concretely, that means that you cannot modify the EFI variables from Linux, so U You may need to enter the firmware menu and reorder it manually so NixOS will boot first. (See [this issue](https://forums.developer.nvidia.com/t/using-uefi-runtime-variables-on-xavier-agx/227970)) +### JetPack Versions +The major JetPack version may be changed by setting `hardware.nvidia-jetpack.majorVersion`. +It defaults to the latest version supported by the board (e.g. JetPack 6 for Orin and JetPack 5 for Xavier). +The "generic" som defaults to JetPack 6. + +Note that the JetPack firmware of a given version is incompatible with the kernel and rootfs of +the other. You cannot run the JetPack 5 firmware with the JetPack 6 kernel (and vice versa). Be +certain when upgrading that you are able to update both simulatenously. + +If not installing JetPack 6 firmware via flashing scripts, it is recommended to install the +JetPack 6 bootloader configuration (without live switch), then install the capsule update, +and finally reboot. The effect is that the device reboots, installs the JetPack 6 firmware +via a capsule update, and when finished, boots into a NixOS configuration for JetPack 6. + ### Graphical Output As of 2023-12-09, the status of graphical output on Jetsons is described below. If you have problems with configurations that are expected to work, try different ports (HDMI/DP/USB-C), different cables, and rebooting with the cables initially connected or disconnected. @@ -127,7 +144,7 @@ Set `hardware.nvidia-jetpack.modesetting.enable = true;` Weston and sway have been tested working on Orin devices, but do not work on Xavier devices. ### Updating firmware from device -Recent versions of Jetpack (>=5.1) support updating the device firmware from the device using the UEFI Capsule update mechanism. +Recent versions of JetPack (>=5.1) support updating the device firmware from the device using the UEFI Capsule update mechanism. This can be done as a more convenient alternative to physically attaching to the device and re-running the flash script. These updates can be performed automatically after a `nixos-rebuild switch` if the `hardware.nvidia-jetpack.bootloader.autoUpdate` setting is set to true. Otherwise, the instructions to apply the update manually are below.