Nvidia Drivers und 2.6.28-rc3
Heute wollte ich einmal die neuen Kernelsourcen an den Start bringen und einmal bisschen rumtesten. Meine Neugierde weckten vorallem die Fastboot Patches, welche nun schön Langsam Einzug in den Hauptzweig des neuen Kernels wandern (Stargazer hat’s entdeckt)
Nachdem im Kernel einige gröbere Änderungen vor sich gingen, sind natürlich die einzelnen Treibermodule nun dran, nachzuziehen – oder man bastelt einen entsprechenden Hack. Um nicht auf Nvidia warten zu müssen, hier eine Lösung zu den aktuellen x11-drivers/nvidia-drivers.
Aktuell verwendete Kernelsources: /usr/src/linux-2.6.28-rc3 mit Symlink nach /usr/src/linux
Das klassische Emergen der nvidia-drivers wird uns auf den ersten Blick einen Fehler präsentieren, der so aussieht, als hätten wir die Kernel-Sourcen nicht vollständig am System – Doch dem ist nicht so. Die Ursache des Fehlers liegt vielmehr in ein paar kleinen Änderungen der Verzeichnisstruktur im Kernel, welche man aber speziell für Nvidia mit ein paar Handgriffen wieder zurechtbiegen kann:
cd /usr/src/linux/include
mv asm-x86/asm-offsets.h ../arch/x86/include/asm
rmdir asm-x86
ln -s ../arch/x86/include/asm asm-x86
Doch damit ist es leider noch nicht ganz getan. Ein erneutes Emerge lässt zwar die Kernel-Sourcen wieder korrekt erscheinen, doch ein paar Änderungen an internen Funktionsaufrufen lassen die Sache scheitern. Die Lösung sieht meiner Meinung nach wie folgt aus (patch):
diff -uNr NVIDIA-Linux-x86_64-177.80-pkg2/usr/src/nv/nvacpi.c NVIDIA-Linux-x86_64-177.80-pkg2-patched/usr/src/nv/nvacpi.c
--- NVIDIA-Linux-x86_64-177.80-pkg2/usr/src/nv/nvacpi.c 2008-10-01 23:16:41.000000000 +0100
+++ NVIDIA-Linux-x86_64-177.80-pkg2-patched/usr/src/nv/nvacpi.c 2008-10-25 20:44:22.000000000 +0100
@@ -136,7 +136,7 @@
struct acpi_object_list control_argument_list = { 0, NULL };
nv_stack_t *sp = NULL;
struct list_head *node, *next;
- unsigned long device_id = 0;
+ unsigned long long device_id = 0;NV_KMEM_CACHE_ALLOC_STACK(sp);
if (sp == NULL)
@@ -158,7 +158,11 @@
os_mem_set((void *)pNvAcpiObject, 0, sizeof(nv_acpi_t));// assign driver data structure ptr to this device
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 28)
+ device->driver_data = pNvAcpiObject;
+#else
acpi_driver_data(device) = pNvAcpiObject;
+#endif// store a device reference in our object
pNvAcpiObject->device = device;
@@ -305,7 +309,7 @@
*/
nv_acpi_t *pNvAcpiObject = data;
u32 event_val = 0;
- unsigned long state;
+ unsigned long long state;
int status = 0;
Um das Ganze noch zum Abschluss zu bringen erweitere ich das bestehende Ebuild der x11-drivers/nvidia-drivers ein bisschen in der Funktion src_unpack() erweitert:
# 2.6.28 needs a small patch to make things working again
if kernel_is 2 6 28; then
epatch "${FILESDIR}"/nvidia-drivers-177.80_kernel_2_6_28.patch
fi
Der nvidia-drivers-177.80_kernel_2_6_28.patch ist dabei der oben gezeigte Patch. Das Ergebnis, ein funktionierendes X11 unter Verwendung der nvidia-drivers.
This entry was posted on Thursday, November 6th, 2008 at 11:51 and is filed under Computer. Tags: gentoo, kernel, linux, nvidia. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
Na du scheinst dich ja richtig in die Thematik reinzuknien. Aber hälst du es nicht für unklug, direkt im Kernel so rumzuwildern?
Hallo Stargazer. Die Symlinks und das Herumkopieren im Kernel ist in diesem Fall unkritisch, da es sich um ein Verzeichnis mit einer Datei handelt, welche wir zum Rest verschieben und durch Symlinken wieder an den Ursprung zurückholen.
Ist zwar nicht schön, aber es ist in diesem Fall unkritisch, bis die Jungs von Nvidia neue (Beta-) Treiber auf den Markt werfen. Wenn es dich beruhigt, ich konnte den Kernel nach dieser kleinen Aktion noch immer ganz normal compilieren.
Hi Toei Rei, leider hatte ich mit deinem patch kein erfolg. Aber der letzte eintrag von towo in diesem post enthält einen patch mit dem es mit dem 2.6.28-rc6 kernel klappte. Dafür hab ich mir einen neuen ebuild 177.82 erstellt.
http://www.nvnews.net/vbulletin/showthread.php?p=1841902
Nvidia bietet inzwischen neue Beta-drivers an (180.08), welche ohne Probleme mit dem neuen Kernel funktionieren.
Danke dir und GeE für den Tip. Mußte den Patch aus dem Forum zwar nochmal abändern, da er für 177.80 geschrieben war und nvidia nun offiziell 177.82 anbietet, aber das war trivial. (Die erwähnten 180.08 BetaTreiber konnte ich über die Treibersuche nicht finden. Vllt. wieder zurückgezogen?)
Bei usr/src/nv/nvacpi.c die beiden 136,7 in 136,8 unwandeln und
- unsigned long device_id = 0;
+ nv_acpi_integer_t device_id = 0;
in
- unsigned long device_id = 0;
- int device_counter = 0;
+ nv_acpi_integer_t device_id = 0;
+ int device_counter = 0;
umschreiben.
Kernel: 2.6.28
Karte: GeForceGo 6600
Distri: Debian Sid
Ich laufe derzeit auf 180.18 – und das ohne nennenswerte Probleme wie z.B. chronischem Koffeeinmangel.