Driver nVidia 390 su kernel 6.14 in Arch Linux
In questo post proseguo quanto scritto
in quello precedente, dove — ricorderete — non
riuscivo a far convivere i driver legacy per la mia vecchia scheda video nVidia
GeForce 605 con il nuovo kernel 6.14.4-arch1-2 o meglio, cosa che ho scoperto
dopo, gcc versione 15 non riusciva a compilare per il nuovo kernel. Ho monitorato
costantemente sia il forum
che la pagina dedicata su AUR
e ho visto che @bufferunderrun
ha pubblicato una patch da applicare al pacchetto
nvidia-390-dkms. Ho applicato la patch al pacchetto, fatto gli aggiornamenti e
tutto è filato liscio come l’olio. Vi spiego cosa ho fatto, così
rimane traccia anche per me e magari può servire a qualcuno.
Quello che faremo è creare una patch aggiuntiva — oltre a quelle già presenti
— per il pacchetto nvidia-390-dkms e applicarla, in attesa che questo venga
fatto nel pacchetto presente in AUR.
Creazione e applicazione della patch
Creazione del file .patch
Da terminale scarichiamo il pacchetto da AUR senza installarlo:
paru -G nvidia-390xx-dkms
Spostiamoci nella directory appena creata:
cd nvidia-390xx-utils
Creiamo il file per la patch dedicata a gcc 15:
nano gcc-15.patch
Incolliamo questo contenuto, vale a dire la patch che risolve il problema:1
diff --git a/kernel/Kbuild b/kernel/Kbuild
index 85aa267..baa6986 100644
--- a/kernel/Kbuild
+++ b/kernel/Kbuild
@@ -61,6 +61,7 @@ $(foreach _module, $(NV_KERNEL_MODULES), \
# $(EXTRA_CFLAGS) to ccflags-y for compatibility.
#
+EXTRA_CFLAGS += -std=gnu17
EXTRA_CFLAGS += -I$(src)/common/inc
EXTRA_CFLAGS += -I$(src)
EXTRA_CFLAGS += -Wall -MD $(DEFINES) $(INCLUDES) -Wsign-compare -Wno-cast-qual -Wno-error
diff --git a/kernel/conftest.sh b/kernel/conftest.sh
index 4da7588..1106ea5 100755
--- a/kernel/conftest.sh
+++ b/kernel/conftest.sh
@@ -151,7 +151,7 @@ test_headers() {
}
build_cflags() {
- BASE_CFLAGS="-O2 -D__KERNEL__ \
+ BASE_CFLAGS="-std=gnu17 -O2 -D__KERNEL__ \
-DKBUILD_BASENAME=\"#conftest$$\" -DKBUILD_MODNAME=\"#conftest$$\" \
-nostdinc -isystem $ISYSTEM \
-Wno-implicit-function-declaration -Wno-strict-prototypes -Wno-incompatible-pointer-types"
Salviamo e chiudiamo.
Modifica di PKGBUILD
Ora dobbiamo modificare il file PKGBUILD per far sì che
questo, durante la compilazione, consideri la patch appena creata. Anziché dirvi
cosa modificare a mano, creeremo un altro file .patch, così senza sforzo né
errori lo modificheremo. Creiamo questo file:
nano PKGBUILD.patch
e incolliamo queste righe:
--- nvidia-390xx-utils/PKGBUILD 2025-05-09 21:57:08.271353078 +0200
+++ PKGBUILD 2025-05-09 18:23:07.990867041 +0200
@@ -31,7 +31,8 @@
kernel-6.12.patch
kernel-6.13.patch
kernel-6.14.patch
- kernel-4.16+-memory-encryption.patch)
+ kernel-4.16+-memory-encryption.patch
+ gcc-15.patch)
b2sums=('8e24aea70b139185bd682b080d32aeda673e6e92b45a90e6f6e0d736674180400bc8bd1aa5c66b8d033fc9d5e0cfffed456a87298bd93a3afbbc30b8dc48c4e9'
'c1da4ce5784e43385465913a95053a3e54f800aac6f1b49f33e2a77504d76da5e6db6ec7074fbe7ba5f52dcef9e1ebaa620942c33ff825a56caba5c9c8b0d1be'
'67e32932eeddda8fef667d25c34faf7b3a02f01cf9c15a97e5613bd44a0e8dcf7396e25399a52701f55dd18054c689720f237bb07d5bd580394d8dc8c9d05534'
@@ -49,7 +50,8 @@
'aaa0597ab9d33be3c6e020fab0d54890d32f32c5ce70571e2bc989a788dbe2317e826475966bc1026bf7f7ff6672bd9a2f7f8e48dcebd2f91d33d9181eee1208'
'8e5502a6668bf3981d1e9cc6cdad428fcfdd221b51850b0fde74d631faa379d965b97a87e845eda2bc0e99a0aa9bf58642444bdea9f976cafcd12edf0e20f5db'
'21b87918e9b9b0475ab4fb548be6daadd6921566fb03a3f96cffff5296f9fa1bccdabe7c4671aba2a1dc455248b7a96e5a088c48ab922305213bc714e4a39d6c'
- 'a8234f542c2324ad698443e3decf7b6eacf3cb420b7aded787f102a8d32b64c2a8d45ea58e37a5e3b6f2f060f0cccd63d3a182065f57c606006d0ff8c7f6bb05')
+ 'a8234f542c2324ad698443e3decf7b6eacf3cb420b7aded787f102a8d32b64c2a8d45ea58e37a5e3b6f2f060f0cccd63d3a182065f57c606006d0ff8c7f6bb05'
+ '488c1381c371efaa18aa68424560d5a5145d25dea79ae44c30fa771bdd097b43125a7b6d553ac823a304d5a681ee5e958291a2334f4be8bba79754fdb5ff80a2')
create_links() {
# create soname links
@@ -105,6 +107,9 @@
# From Joan Bruguera (https://gist.github.com/joanbm/d0cb8790ca610fbd2c2e43f30707ce18)
patch -Np1 -i ../kernel-6.14.patch
+ # From bufferunderrun (https://aur.archlinux.org/packages/nvidia-390xx-dkms#comment-1022658)
+ patch -Np1 -i ../gcc-15.patch
+
cd kernel
sed -i "s/__VERSION_STRING/${pkgver}/" dkms.conf
Salviamo e chiudiamo. Ora applichiamo le modifiche al file PKGBUILD:2
patch PKGBUILD < PKGBUILD.patch
Compilazione e installazione del driver con la patch
Installiamo ora il driver contenente la patch per gcc:
makepkg -si
Il sistema ora compilerà il driver con tutte le patch presenti nel pacchetto,
compresa gcc-15.patch che abbiamo creato poco fa.
Una volta che avrà finito — si spera — senza errori, procederemo a
installare il nuovo kernel e gcc ultima versione. Se, come avevo fatto io,
avevate bloccato gli aggiornamenti del kernel e di gcc, sbloccateli. Quindi
aggiorniamo il sistema:
sudo pacman -Syu
Non dovremmo vedere alcun problema segnalato nei messaggi del terminale. A questo punto possiamo riavviare e goderci gli aggiornamenti appena installati.
Ringrazio infinitamente tutti coloro che hanno contribuito a questa risoluzione e che mi consentono di continuare ad usare questa vecchia macchina con Arch Linux.
-
Come detto, la patch è ripresa interamente da questo commento di bufferunderrun. ↩︎
-
Una volta applicata la patch, possiamo anche eliminare il file
PKGBUILD.patch, perché non ci serve più. Ad ogni modo questo file non sarà considerato da PKGBUILD stesso durante la compilazione perché non è presente nella lista delle patch da applicare agcc. ↩︎