Last active
May 3, 2026 20:55
-
-
Save sineemore/161e4051b2d03f9e3b0f3e16221463ce to your computer and use it in GitHub Desktop.
NVIDIA on musl
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| NVIDIA on Void Linux x86_64-musl | |
| ================================ | |
| Proprietray NVIDIA kernel modules + nvidia-modprobe binary for Void Linux x86_64-musl. | |
| - DMKS-only + nvidia-modprobe binary for device files creation | |
| - both drivers and binary from NVIDIA upstream | |
| How it works: kernel modules are libc-independent already, | |
| userspace nvidia libraries can live in glibc Flatpak/chroot/container. | |
| INSTALL | |
| cd ~/void-packages | |
| curl -sL 'https://gist.githubusercontent.com/sineemore/161e4051b2d03f9e3b0f3e16221463ce/raw/0932ae5fd55557b96b136cc2e6b143a4a05b1141/nvidia-dkms-standalone-580.126.18.patch' | git apply | |
| ./xbps-src pkg nvidia-dkms-standalone | |
| xi nvidia-dkms-standalone | |
| reboot | |
| VERIFY | |
| lsmod | grep nvidia | |
| ls -la /dev/nvidia* | |
| # should see: nvidia0, nvidiactl, nvidia-modeset, nvidia-uvm, nvidia-uvm-tools | |
| USAGE | |
| # Flatpak ships its own nvidia libs, driver version detection should works by checking kernel module version | |
| flatpak --gl-drivers | |
| flatpak install org.freedesktop.Platform.GL.nvidia-580-126-18 | |
| flatpak install org.freedesktop.Platform.GL32.nvidia-580-126-18 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| From bc7e85c563eb2c11ae16d5e943eda89e927dfd72 Mon Sep 17 00:00:00 2001 | |
| From: sineemore <sineemore@disroot.org> | |
| Date: Sun, 19 Apr 2026 15:55:04 +0000 | |
| Subject: [PATCH] New package: nvidia-dkms-standalone-580.126.18 | |
| --- | |
| .../files/99-nvidia.rules | 6 ++ | |
| .../nvidia-dkms-standalone/files/dkms.conf | 19 +++++ | |
| .../files/nvidia-modprobe.conf | 3 + | |
| .../files/nvidia-modules-load.conf | 2 + | |
| .../patches/nvidia-tegra-bpmp.patch | 13 +++ | |
| srcpkgs/nvidia-dkms-standalone/template | 81 +++++++++++++++++++ | |
| 6 files changed, 124 insertions(+) | |
| create mode 100644 srcpkgs/nvidia-dkms-standalone/files/99-nvidia.rules | |
| create mode 100644 srcpkgs/nvidia-dkms-standalone/files/dkms.conf | |
| create mode 100644 srcpkgs/nvidia-dkms-standalone/files/nvidia-modprobe.conf | |
| create mode 100644 srcpkgs/nvidia-dkms-standalone/files/nvidia-modules-load.conf | |
| create mode 100644 srcpkgs/nvidia-dkms-standalone/patches/nvidia-tegra-bpmp.patch | |
| create mode 100644 srcpkgs/nvidia-dkms-standalone/template | |
| diff --git a/srcpkgs/nvidia-dkms-standalone/files/99-nvidia.rules b/srcpkgs/nvidia-dkms-standalone/files/99-nvidia.rules | |
| new file mode 100644 | |
| index 00000000000..9bb7525b8c7 | |
| --- /dev/null | |
| +++ b/srcpkgs/nvidia-dkms-standalone/files/99-nvidia.rules | |
| @@ -0,0 +1,6 @@ | |
| +# Create NVIDIA device nodes when the kernel module loads | |
| +SUBSYSTEM=="module", KERNEL=="nvidia", ACTION=="add", RUN+="/usr/bin/nvidia-modprobe -c0 -c255 -m" | |
| +SUBSYSTEM=="module", KERNEL=="nvidia", ACTION=="add", RUN+="/usr/bin/nvidia-modprobe -u -c0" | |
| + | |
| +# Set permissions on NVIDIA device nodes | |
| +KERNEL=="nvidia[0-9]*|nvidiactl|nvidia-modeset|nvidia-uvm|nvidia-uvm-tools", MODE="0666" | |
| diff --git a/srcpkgs/nvidia-dkms-standalone/files/dkms.conf b/srcpkgs/nvidia-dkms-standalone/files/dkms.conf | |
| new file mode 100644 | |
| index 00000000000..6e4e30c927d | |
| --- /dev/null | |
| +++ b/srcpkgs/nvidia-dkms-standalone/files/dkms.conf | |
| @@ -0,0 +1,19 @@ | |
| +PACKAGE_NAME="nvidia" | |
| +PACKAGE_VERSION="__PKGVER" | |
| +AUTOINSTALL="yes" | |
| + | |
| +# By default, DKMS will add KERNELRELEASE to the make command line; however, | |
| +# this will cause the kernel module build to infer that it was invoked via | |
| +# Kbuild directly instead of DKMS. The dkms(8) manual page recommends quoting | |
| +# the 'make' command name to suppress this behavior. | |
| +MAKE[0]="'make' __MAKEJOBS NV_EXCLUDE_BUILD_MODULES='' KERNEL_UNAME=${kernelver} modules" | |
| + | |
| +# The list of kernel modules was generated by nvidia-installer at runtime. | |
| +BUILT_MODULE_NAME[0]="nvidia" | |
| +DEST_MODULE_LOCATION[0]="/kernel/drivers/video" | |
| +BUILT_MODULE_NAME[1]="nvidia-uvm" | |
| +DEST_MODULE_LOCATION[1]="/kernel/drivers/video" | |
| +BUILT_MODULE_NAME[2]="nvidia-modeset" | |
| +DEST_MODULE_LOCATION[2]="/kernel/drivers/video" | |
| +BUILT_MODULE_NAME[3]="nvidia-drm" | |
| +DEST_MODULE_LOCATION[3]="/kernel/drivers/video" | |
| diff --git a/srcpkgs/nvidia-dkms-standalone/files/nvidia-modprobe.conf b/srcpkgs/nvidia-dkms-standalone/files/nvidia-modprobe.conf | |
| new file mode 100644 | |
| index 00000000000..b7022d2a4ed | |
| --- /dev/null | |
| +++ b/srcpkgs/nvidia-dkms-standalone/files/nvidia-modprobe.conf | |
| @@ -0,0 +1,3 @@ | |
| +blacklist nouveau | |
| +blacklist nova_core | |
| +blacklist nova_drm | |
| diff --git a/srcpkgs/nvidia-dkms-standalone/files/nvidia-modules-load.conf b/srcpkgs/nvidia-dkms-standalone/files/nvidia-modules-load.conf | |
| new file mode 100644 | |
| index 00000000000..2097337fbb8 | |
| --- /dev/null | |
| +++ b/srcpkgs/nvidia-dkms-standalone/files/nvidia-modules-load.conf | |
| @@ -0,0 +1,2 @@ | |
| +nvidia | |
| +nvidia-drm | |
| diff --git a/srcpkgs/nvidia-dkms-standalone/patches/nvidia-tegra-bpmp.patch b/srcpkgs/nvidia-dkms-standalone/patches/nvidia-tegra-bpmp.patch | |
| new file mode 100644 | |
| index 00000000000..dcf8fa56ae2 | |
| --- /dev/null | |
| +++ b/srcpkgs/nvidia-dkms-standalone/patches/nvidia-tegra-bpmp.patch | |
| @@ -0,0 +1,13 @@ | |
| +--- a/kernel/nvidia/nv-clk.c | |
| ++++ b/kernel/nvidia/nv-clk.c | |
| +@@ -27,8 +27,10 @@ | |
| + #include "nv-linux.h" | |
| + #include "nv-platform.h" | |
| + | |
| ++#if IS_ENABLED(CONFIG_TEGRA_BPMP) | |
| + #include <soc/tegra/bpmp-abi.h> | |
| + #include <soc/tegra/bpmp.h> | |
| ++#endif // IS_ENABLED(CONFIG_TEGRA_BPMP) | |
| + | |
| + // Use the CCF APIs if enabled in Kernel config and RM build | |
| + // has Dual license define enabled. | |
| diff --git a/srcpkgs/nvidia-dkms-standalone/template b/srcpkgs/nvidia-dkms-standalone/template | |
| new file mode 100644 | |
| index 00000000000..3b28da05671 | |
| --- /dev/null | |
| +++ b/srcpkgs/nvidia-dkms-standalone/template | |
| @@ -0,0 +1,81 @@ | |
| +# Template file for 'nvidia-dkms-standalone' | |
| + | |
| +_desc="NVIDIA kernel modules (DKMS) - standalone package" | |
| + | |
| +pkgname=nvidia-dkms-standalone | |
| +version=580.126.18 | |
| +revision=1 | |
| +maintainer="sineemore <sineemore@disroot.org>" | |
| +license="custom:NVIDIA Proprietary" | |
| +homepage="https://www.nvidia.com/en-us/drivers/unix/" | |
| + | |
| +archs="x86_64 x86_64-musl" | |
| +nopie=yes | |
| +repository="nonfree" | |
| +create_wrksrc=yes | |
| +short_desc="${_desc}" | |
| +hostmakedepends="tar zstd m4" | |
| +makedepends="kernel-libc-headers" | |
| +depends="dkms xbps-triggers>=0.121_1 kmod" | |
| +conflicts="nvidia-dkms>=0 nvidia470-dkms>=0 nvidia390-dkms>=0" | |
| + | |
| +dkms_modules="nvidia ${version}" | |
| +# dkms must be before initramfs-regenerate to build modules before images | |
| +triggers="dkms initramfs-regenerate" | |
| + | |
| +_pkg="NVIDIA-Linux-x86_64-${version}" | |
| +_modprobe_src="nvidia-modprobe-${version}" | |
| +distfiles="http://uk.download.nvidia.com/XFree86/Linux-x86_64/${version}/${_pkg}.run | |
| + https://github.com/NVIDIA/nvidia-modprobe/archive/refs/tags/${version}.tar.gz>${_modprobe_src}.tar.gz" | |
| +checksum="a7781b2e1c2d65c6580914c76e79ed454d02945df84711c033070a092a9ab49d | |
| + 7addd647e12f37c662d818bd8be0547d880369b8464f280fa2b24eb382ba19e1" | |
| + | |
| +patch_args="-Np1 --directory=${XBPS_BUILDDIR}/${pkgname}-${version}/${_pkg}" | |
| + | |
| +do_extract() { | |
| + install -m755 ${XBPS_SRCDISTDIR}/${pkgname}-${version}/${_pkg}.run ${wrksrc} | |
| + cd ${wrksrc} | |
| + ./${_pkg}.run --extract-only --target ${_pkg} | |
| + rm -f ${_pkg}.run | |
| + | |
| + # Extract nvidia-modprobe source | |
| + tar xzf ${XBPS_SRCDISTDIR}/${pkgname}-${version}/${_modprobe_src}.tar.gz -C ${wrksrc} | |
| +} | |
| + | |
| +do_build() { | |
| + cd ${wrksrc}/${_modprobe_src} | |
| + make ${makejobs} PREFIX=/usr BIN_LDFLAGS="${LDFLAGS}" \ | |
| + DO_STRIP= STRIP_CMD=true | |
| +} | |
| + | |
| +do_install() { | |
| + cd ${_pkg} | |
| + | |
| + # DKMS kernel module source | |
| + vmkdir usr/src/nvidia-${version} | |
| + vcopy "kernel/*" usr/src/nvidia-${version} | |
| + vcopy ${FILESDIR}/dkms.conf usr/src/nvidia-${version} | |
| + sed -e "s/__PKGVER/${version}/g" \ | |
| + -e 's/__MAKEJOBS/-j$(nproc)/g' \ | |
| + -i ${DESTDIR}/usr/src/nvidia-${version}/dkms.conf | |
| + | |
| + # GSP firmware (needed for modern GPUs) | |
| + for fw in gsp_ga10x.bin gsp_tu10x.bin; do | |
| + vinstall "firmware/${fw}" 644 "usr/lib/firmware/nvidia/${version}" | |
| + done | |
| + | |
| + # Blacklist nouveau | |
| + vinstall ${FILESDIR}/nvidia-modprobe.conf 644 usr/lib/modprobe.d | |
| + | |
| + # nvidia-modprobe (built from source for musl compatibility) | |
| + vinstall ${wrksrc}/${_modprobe_src}/_out/Linux_x86_64/nvidia-modprobe 4755 usr/bin | |
| + | |
| + # udev rule - creates device nodes when modules load | |
| + vinstall ${FILESDIR}/99-nvidia.rules 644 usr/lib/udev/rules.d | |
| + | |
| + # Auto-load modules at boot | |
| + vinstall ${FILESDIR}/nvidia-modules-load.conf 644 usr/lib/modules-load.d | |
| + | |
| + # License | |
| + vlicense LICENSE | |
| +} | |
| -- | |
| 2.53.0 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment