Problems with installing nvidia 340xx

It looks like it is possible to run Nvidia driver 340.108 with kernel 5.16.

Here’s what I did:

  1. Downloaded the Manjaro package nvidia-340xx-utils:
git clone https://gitlab.manjaro.org/packages/extra/nvidia-340xx-utils.git
  1. Created a text file 30-nvidia-ignoreabi.conf in the nvidia-340xx-utils folder:
Section "ServerFlags"
	Option "IgnoreABI" "true"
EndSection
  1. Patched PKGBUILD:
--- PKGBUILD	2022-01-04 13:27:57.211134866 +0100
+++ PKGBUILD	2022-01-03 19:40:08.142117341 +0100
@@ -10,12 +10,13 @@
 url="http://www.nvidia.com/"
 license=('custom')
 options=('!strip')
-source=('mhwd-nvidia' 'nvidia-drm-outputclass.conf' 'nvidia-utils.sysusers')
+source=('mhwd-nvidia' 'nvidia-drm-outputclass.conf' 'nvidia-utils.sysusers' '30-nvidia-ignoreabi.conf')
 source_i686=("https://us.download.nvidia.com/XFree86/Linux-x86/${pkgver}/NVIDIA-Linux-x86-${pkgver}.run")
 source_x86_64=("https://us.download.nvidia.com/XFree86/Linux-x86_64/${pkgver}/NVIDIA-Linux-x86_64-${pkgver}-no-compat32.run")
 md5sums=('2f767e7d0c63e6f943edcb82ef09a389'
          '768a64259f7e8d8a46a13b876d6c443c'
-         '3d2894e71d81570bd00bce416d3e547d')
+         '3d2894e71d81570bd00bce416d3e547d'
+         '24f8ffd217e5f6f939f9113ff454c7c5')
 md5sums_i686=('ffa278e613337e638fd10de41dae3630')
 md5sums_x86_64=('e783e383bd4344d590ad429eb0883717')
 
@@ -82,6 +83,9 @@
     replaces=('nvidia-340xx-libgl')
     install="${pkgname}.install"
 
+    # Exceedingly hacky workaround for Xorg 1.21 until Nvidia updates the driver
+    install -D -m644 30-nvidia-ignoreabi.conf "${pkgdir}/etc/X11/xorg.conf.d/30-nvidia-ignoreabi.conf"
+
     cd "${srcdir}/${_pkg}"
 
     # X driver
  1. Installed the package:
$ makepkg -si
  1. Then, I downloaded the Manjaro nvidia-340xx package:
git clone https://gitlab.manjaro.org/packages/extra/linux50-extramodules/nvidia-340xx.git
  1. Next, I downloaded the kernel patches from AUR:
cd nvidia-340xx
wget -O 0001-kernel-5.7.patch https://aur.archlinux.org/cgit/aur.git/plain/0001-kernel-5.7.patch?h=nvidia-340xx
wget -O 0002-kernel-5.8.patch https://aur.archlinux.org/cgit/aur.git/plain/0002-kernel-5.8.patch?h=nvidia-340xx
wget -O 0003-kernel-5.9.patch https://aur.archlinux.org/cgit/aur.git/plain/0003-kernel-5.9.patch?h=nvidia-340xx
wget -O 0004-kernel-5.10.patch https://aur.archlinux.org/cgit/aur.git/plain/0004-kernel-5.10.patch?h=nvidia-340xx
wget -O 0005-kernel-5.11.patch https://aur.archlinux.org/cgit/aur.git/plain/0005-kernel-5.11.patch?h=nvidia-340xx
wget -O 0006-kernel-5.14.patch https://aur.archlinux.org/cgit/aur.git/plain/0006-kernel-5.14.patch?h=nvidia-340xx
wget -O 0007-kernel-5.15.patch https://aur.archlinux.org/cgit/aur.git/plain/0007-kernel-5.15.patch?h=nvidia-340xx
  1. The 0007-kernel-5.15.patch from the AUR package might throw an error due to incorrect (DOS) linebreaks used.
    To rectify, use the following command:
sed -i.bak 's/\r$//' 0007-kernel-5.15.patch 
  1. Edit PKGBUILD for the Manjaro nvidia-340xx package to look like this (the corrected patch is already considered):
# Based on the file created for Arch Linux by:
# Maintainer : Thomas Baechler <thomas@archlinux.org>

# Maintainer: Philip Müller <philm@manjaro.org>
# Maintainer: Roland Singer <roland@manjaro.org>

_linuxprefix=linux516
_extramodules=extramodules-5.16-MANJARO
pkgname=$_linuxprefix-nvidia-340xx
_pkgname=nvidia
pkgver=340.108
pkgrel=29
provides=("$_pkgname=$pkgver")
groups=("$_linuxprefix-extramodules")
pkgdesc="NVIDIA drivers for linux."
arch=('i686' 'x86_64')
url="http://www.nvidia.com/"
depends=(
         "$_linuxprefix"
         "nvidia-340xx-utils=${pkgver}"
         )
makedepends=("$_linuxprefix-headers")
conflicts=('nvidia-96xx' 'nvidia-183xx' "$_linuxprefix-nvidia" "$_linuxprefix-nvidia-304xx")
license=('custom')
install=nvidia.install
options=(!strip !ccache)
source=(
        '0001-kernel-5.7.patch'
        '0002-kernel-5.8.patch'
        '0003-kernel-5.9.patch'
        '0004-kernel-5.10.patch'
        '0005-kernel-5.11.patch'
        '0006-kernel-5.14.patch'
        '0007-kernel-5.15.patch'
        '0008-kernel-5.16.patch'
        )
source_i686=("https://us.download.nvidia.com/XFree86/Linux-x86/${pkgver}/NVIDIA-Linux-x86-${pkgver}.run")
source_x86_64=("https://us.download.nvidia.com/XFree86/Linux-x86_64/${pkgver}/NVIDIA-Linux-x86_64-${pkgver}-no-compat32.run")
md5sums=('4be5a196c4a0b095771179e820f5cc88'
         'e868ff40e412fae26b6a01929debdf04'
         '400ad257dcc26c607eb8c8c273693a01'
         'e4893414b629caaa0b3a31317ab484f2'
         '4d1a74da2f65db16066c26c7a9f7b4ab'
         '17f59396f6989283c1bd75aad57e48fd'
         '816ce6cb7626afc5c5daeef75e446890'
         'e219234af48fe6e158250115c4ef6c20'
         )
md5sums_i686=('9a4b382ef545d836033630224735d5dd')
md5sums_x86_64=('e783e383bd4344d590ad429eb0883717')

[[ "$CARCH" = "i686" ]] && _pkg="NVIDIA-Linux-x86-${pkgver}"
[[ "$CARCH" = "x86_64" ]] && _pkg="NVIDIA-Linux-x86_64-${pkgver}-no-compat32"

prepare() {
    # Remove previous builds
    [ -d "$_pkg" ] && rm -rf "$_pkg"
    sh "${_pkg}.run" --extract-only
    cd "${_pkg}"
    # patches here

    # Fix compile problem with 5.7
    echo "Patching for 5.7"
    (patch -p1 --no-backup-if-mismatch -i "$srcdir"/0001-kernel-5.7.patch)

    # Fix compile problem with 5.8
    echo "Patching for 5.8"
    (patch -p1 --no-backup-if-mismatch -i "$srcdir"/0002-kernel-5.8.patch)

    # Fix compile problem with 5.9
    echo "Patching for 5.9"
    (patch -p1 --no-backup-if-mismatch -i "$srcdir"/0003-kernel-5.9.patch)

    # Fix compile problem with 5.10
    echo "Patching for 5.10"
    (patch -p1 --no-backup-if-mismatch -i "$srcdir"/0004-kernel-5.10.patch)

    # Fix compile problem with 5.11
    echo "Patching for 5.11"
    (patch -p1 --no-backup-if-mismatch -i "$srcdir"/0005-kernel-5.11.patch)

    # Fix compile problem with 5.14
    echo "Patching for 5.14"
    (patch -p1 --no-backup-if-mismatch -i "$srcdir"/0006-kernel-5.14.patch)

    # Fix compile problem with 5.15
    echo "Patching for 5.15"
    (patch -p1 --no-backup-if-mismatch -i "$srcdir"/0007-kernel-5.15.patch)

    # Fix compile problem with 5.16
    echo "Patching for 5.16"
    (patch -p1 --no-backup-if-mismatch -i "$srcdir"/0008-kernel-5.16.patch)


    export DISTCC_DISABLE=1
    export CCACHE_DISABLE=1
}

build() {
    _kernver="$(cat /usr/lib/modules/${_extramodules}/version)"

    cd "${_pkg}"/kernel
    make SYSSRC=/usr/lib/modules/"${_kernver}/build" module

    cd uvm
    make SYSSRC=/usr/lib/modules/"${_kernver}/build" module
}

package() {
    install -D -m644 "${srcdir}/${_pkg}/kernel/nvidia.ko" \
        "${pkgdir}/usr/lib/modules/${_extramodules}/nvidia.ko"
    install -D -m644 "${srcdir}/${_pkg}/kernel/uvm/nvidia-uvm.ko" \
        "${pkgdir}/usr/lib/modules/${_extramodules}/nvidia-uvm.ko"
    gzip "${pkgdir}/usr/lib/modules/${_extramodules}/"*.ko
    sed -i -e "s/EXTRAMODULES='.*'/EXTRAMODULES='${_extramodules}'/" "${startdir}/nvidia.install"
}
  1. Now, in the nvidia-340xx folder, execute
$ makepkg -si

a last time, and afterwards, reboot.
10. You are done - running the 340.108 legacy Nvidia driver on kernel 5.16!

3 Likes