# Kernel 4.9.0: nvidia-drivers-390.98 braucht einen Patch

## diabolusUmarov

Mahlzeit!

Beim letzten emerge -uDN @world kam nun der Kernel 4.9.0 bei mir an. Diesen habe ich auch gleich gebaut und wollte anschliessend die nvidia-drivers neu bauen. Da ich eine GeForce 9800 GT habe brauche ich die Version 340.98. Diese will aber mit diesem Kernel nicht zusammenarbeiten. Nun habe ich im Netz gesucht, Google ist ja mein Freund, dort wurde auch in Bezug auf openSUSE von einem Patch geredet. 

Nun bin ich zwar kein Anfänger mehr, was Gentoo anbelangt, aber ich habe bislang noch nie, zumindest bewusst, etwas gepatcht. Von daher brauche ich Hilfe. 

Kann mir jemand zur Hand gehen?

Ich benutze Gentoo mit 64 Bit.

----------

## Josef.95

Nimm für deinen brandaktuellen testing-linux-4.9.0-Kernel am besten die aktuelle nvidia-drivers-340.101 Version, die sollte vermutlich auch schon ohne weitere Patches mit dem neuen Kernel kompatibel sein.

----------

## diabolusUmarov

Habe ich mittlerweile. Der läuft auch unproblematisch durch. Allerdings, wenn ich den mit Kernel 4.9.0 benutzen will kommt folgende Meldung, bevor das System stehenbleibt

```

NVRM: failed to register procfs!

NVRM: request_mem_region falled for 16M @ 0xfd000000. This can

NVRM: occur when a such as rivatv is loaded and claims

NVRM: ownership of the device's registers.

nvidia: probe of 0000:01:00.0 failed with error -1

Error: Driver 'nvidia' is already registered, aborting...

NVRM: DRM init failed

```

Mit Kernel 4.8.12 läuft er einwandfrei.

----------

## uhai

zum Patchen habe ich hier eine Anleitung gefunden.

Bei mir hat es (fast) geklappt... 

uhai

----------

## diabolusUmarov

Patchen ist ja zum Glück nun doch nicht mehr notwendig. Nur leider verträgt sich der 340.101 Treiber trotzdem nicht mir dem 4.9.0 Kernel.

----------

## 3PO

Also bei mir läuft der aktuelle 375.26 ohne Probleme mit Kernel-4.9.0.

```
vdr01_64 ~ # uname -a

Linux vdr01_64 4.9.0-gentoo #1 SMP PREEMPT Sat Dec 17 16:05:57 CET 2016 x86_64 Intel(R) Core(TM) i7-4770K CPU @ 3.50GHz GenuineIntel GNU/Linux

vdr01_64 ~ #
```

```
vdr01_64 ~ # dmesg |grep NVRM

[    4.721776] NVRM: loading NVIDIA UNIX x86_64 Kernel Module  375.26  Thu Dec  8 18:36:43 PST 2016

vdr01_64 ~ #
```

```
vdr01_64 ~ # nvidia-smi

Sun Dec 18 16:46:35 2016

+-----------------------------------------------------------------------------+

| NVIDIA-SMI 375.26                 Driver Version: 375.26                    |

|-------------------------------+----------------------+----------------------+

| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |

| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |

|===============================+======================+======================|

|   0  GeForce GTX 950     Off  | 0000:01:00.0      On |                  N/A |

|  0%   51C    P8    12W /  99W |    198MiB /  1995MiB |     29%      Default |

+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+

| Processes:                                                       GPU Memory |

|  GPU       PID  Type  Process name                               Usage      |

|=============================================================================|

|    0      3723    G   X                                               60MiB |

|    0      5106    G   /usr/bin/vdr                                   135MiB |

+-----------------------------------------------------------------------------+

vdr01_64 ~ #
```

----------

## Josef.95

 *3PO wrote:*   

> Also bei mir läuft der aktuelle 375.26 ohne Probleme mit Kernel-4.9.0.
> 
> [...]

  Ja, aber sicherlich nicht mit ner GeForce 9800 GT (so wie vom Thread-Autor genannt).

Die braucht den 340er legacy Treiber.

Schau dazu zb auch im https://devtalk.nvidia.com/default/topic/533434/linux/current-graphics-driver-releases/

@diabolusUmarov

Magst mal die Kernel .config vom 4.9.0 via PastebinService bereitstellen?

----------

## diabolusUmarov

Insofern ich jetzt nichts falsch gemacht habe kommt hier die .config

http://pastebin.com/impCh1c1

Btw, bist du der Josef aus gentooforum?

----------

## Josef.95

Hm, schau mal ob deaktivieren von 

```
CONFIG_FB_VESA=y

CONFIG_FB_EFI=y

CONFIG_FB_NVIDIA=m

CONFIG_FB_NVIDIA_I2C=y

CONFIG_FB_NVIDIA_DEBUG=y

CONFIG_FB_NVIDIA_BACKLIGHT=y
```

 hilft.

----------

## diabolusUmarov

Nein. Daran hat es nicht gelegen. Hab nun auch den Kernel mal mit genkernel gebaut. Auch keine Chance. Hab zur Sicherheit auch mal den Kernel gebootet und dann den treiber neu gebaut. Auch nichts.

Lustigerweise läuft der Treiber mit 4.8, obwohl ich ihn mit 4.9 neugebaut habe.

----------

## ChrisJumper

 *diabolusUmarov wrote:*   

> Nein. Daran hat es nicht gelegen. Hab nun auch den Kernel mal mit genkernel gebaut. Auch keine Chance. Hab zur Sicherheit auch mal den Kernel gebootet und dann den treiber neu gebaut. Auch nichts.
> 
> Lustigerweise läuft der Treiber mit 4.8, obwohl ich ihn mit 4.9 neugebaut habe.

 

Lustig ist das nicht, sondern pure Absicht. Wenn du einen Kernel kompilierst oder eben ein Nvidia Modul, werden die Module a unter /lib/modules/$KERNELVERSION-gentoo/ gespeichert. Dort werden sie ja nur überschrieben wenn du zum Beispiel den Treiber wechselst aber nicht den Kernel. Dann wäre es ein anderes Verzeichnis.

Aktualisierst du allerdings den Kernel ohne den Treiber fehlt er dir einfach. Wobei es aber da auch egal ist ob der nicht da ist oder sich nicht laden lässt weil er für den Kernel nicht kompiliert wurde. ;) In ganz seltenen Fällen bei einem neu Bau und nur marginalen Änderungen am selben Kernel ist das manch mal auch kein Problem. Aber der Sicherheit halber baue ich immer beides neu.

Schau mal mit ls -la /lib/modules/4.9.0-gentoo/video/ nach welche Video-Module du da hast und ob die Zeit mit dem Build-Datum übereinstimmt.

 *Quote:*   

> Error: Driver 'nvidia' is already registered, aborting...
> 
> NVRM: DRM init failed 

 

Ich könnte mir fast vorstellen, aber würde es halt nicht hoffen, das du da noch die alten Dateien und Module liegen, weil an einen solchen Fall ein Programmierer normalerweise nicht denkt und das bei einem Downgrade, die halt nicht aufgeräumt wurden:

Hier zur Veranschaulichung, bei Verwendung eines modernen Kernels:

```
ls /lib/modules/4.4.26-gentoo/video/

nvidia-drm.ko  nvidia.ko  nvidia-modeset.ko  nvidia-uvm.ko
```

Auf meinem anderen System mit einer GT9400, die auch den alten Treiber verwendet:

```
ls /lib/modules/4.4.26-gentoo/video/

nvidia.ko
```

Stimmt das Build-Datum halt überein (also das die nvidia.ko aktueller ist als die vier anderen), sollte es wahrscheinlich ausreichen wenn du die einfach löschst.

Damit dir Portage nicht wieder einfach die aktuelleren Treiber installiert solltest du den natürlich auch noch in deine package Mask Datei Eintragen.

```
 #### Wenn package.mask ein Datei ist ####

# echo ">=x11-drivers/nvidia-drivers-341.0.0" > /etc/portage/package.mask

#### Wenn package.mask ein Ordner ist ####

# echo ">=x11-drivers/nvidia-drivers-341.0.0" > /etc/portage/package.mask/nvidia-legacy
```

----------

## diabolusUmarov

Das Build Datum stimmt überein. Im Verzeichnis ist nämlich komplett gar nichts! Wie kann das sein? 

Und danke für die Erklärung wie das mit dem Kernel wechsel und dem Treiber funktioniert. Das wusste ich bislang nicht!

----------

## ChrisJumper

Erkennt der emerge nvidia-drivers Vorgang zu Beginn auch den gesetzten Kernel richtig? Hier hab ich z.B. noch den 4.4.26er bei mir steht da:

```
# emerge -1 =x11-drivers/nvidia-drivers-340.101

Calculating dependencies... done!

>>> Verifying ebuild manifests

>>> Running pre-merge checks for x11-drivers/nvidia-drivers-340.101

 * Determining the location of the kernel source code

 * Found kernel source directory:

 *     /usr/src/linux

 * Found kernel object directory:

 *     /lib/modules/4.4.26-gentoo/build

 * Found sources for kernel version:

 *     4.4.26-gentoo

 * Checking for suitable kernel configuration options...                                                              [ ok ]

>>> Emerging (1 of 1) x11-drivers/nvidia-drivers-340.101::gentoo
```

Eventuell hast du den Kernel zwar von Hand kopiert, auch aus dm richtigen Verzeichnis aber vergessen den Symlink anzupassen. Vielleicht einfach noch  mal einen Blick in den Kernel Upgrade Wiki werfen ob du das manuell per ln oder per eselect machst.

Edit: Ich habe jetzt auch mal den 9er Kernel gebaut und der Nvidia Treiber lief bei mir auch ohne Probleme durch. Hier nur noch mal zur Ansicht der Auszug des Strip-Befehle der das fertig gebaute Modul dann in das Verzeichnis verschiebt was ich schon mehrmals erwähnt hatte.

 *Quote:*   

> >>> Source compiled.
> 
> >>> Test phase [not enabled]: x11-drivers/nvidia-drivers-340.101
> 
> >>> Install nvidia-drivers-340.101 into /var/tmp/portage/x11-drivers/nvidia-drivers-340.101/image/ category x11-drivers
> ...

 

Vielleicht hilft das ja weiter.

----------

## ChrisJumper

Edit:

Ich hab hier übrigens genau das selbe Problem. Jetzt aber auch keine Zeit mal in die Logs zu schauen. Vielleicht werde ich nach Weihnachten noch mal genauer rein schauen.

Grüße

----------

## diabolusUmarov

Alsmo mit emerge -1 hat er nun den Treiber auch bei 4.9.0/video rein gebaut. Der Effekt ist aber der Selbe. Der Bildschirm wird schwarz, dann geht nichts mehr. Ich komme auch mit Alt-F1 nicht mehr zur Kommandozeile.

Und ja, beim Bauen wird 4.9.0 erkannt.

----------

## ChrisJumper

Ja genau das hatte ich auch. Am besten wieder zum alten Kernel zurückkehren.

Der Nvidia-Treiber muss übrigens immer neu gebaut werden weil er wohl auch Daten auf die Festplatte schreibt mit denen dann das Modul zusammen arbeitet.

Also wenn du jetzt wieder einen alten Kernel baust musst du auch den nvida-treiber neu bauen und achten das der Symlink richtig ist.

Wie schon beschrieben ich glaube einfach nvidia hat den legacy Treiber noch nicht an den neuen Kernel angepasst.

----------

## commander-keen

Hallo,

ist inzwischen eine Lösung zum Thema legacy-driver (aka 340) in Verbindung mit dem 4.9er Kernel bekannt? (abgesehen von "den vorherigen 4.4er nehmen").

Ich habe exakt das gleiche Problem. Kann das Modul compilieren, aber nicht mit modprobe laden, mit den gleichen Fehlermeldungen wie bei  diabolusUmarov.

Keen

----------

## musv

Ja, ich hab dazu den 387-er Patch genommen und alles rausgeschmissen, was nicht im 340-er enthalten ist. Funktioniert bei mir bisher problemlos mit 4.9.x und 4.10.x. Hab auch schon einen Bug-Report erstellt.

Allerdings merk ich grad, es gibt eine neue Version des 387-er Patches. Werd heut mal sehen, ob und welche Unterschiede da bestehen.

----------

