It looks like it is possible to run Nvidia driver 340.108 with kernel 5.16.
Here’s what I did:
- Downloaded the Manjaro package
nvidia-340xx-utils
:
git clone https://gitlab.manjaro.org/packages/extra/nvidia-340xx-utils.git
- Created a text file 30-nvidia-ignoreabi.conf in the
nvidia-340xx-utils
folder:
Section "ServerFlags"
Option "IgnoreABI" "true"
EndSection
- 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
- Installed the package:
$ makepkg -si
- Then, I downloaded the Manjaro
nvidia-340xx
package:
git clone https://gitlab.manjaro.org/packages/extra/linux50-extramodules/nvidia-340xx.git
- 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
- 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
- Edit
PKGBUILD
for the Manjaronvidia-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"
}
- 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!