Al Bogner wrote:
[...] Was passiert dann da genau (in Kürze)? Wofür ist version.h und autoconf.h?
II. SuSE Linux Desktop (SLD) SuSE Linux 8.2 with update kernel or self-compiled kernel -------------------------------------------------------------
1) Kernel sources must be installed and configured. Usually this means installing the 'kernel-source' RPM with YaST2 and configure it then with the following commands:
cp /boot/vmlinuz.config /usr/src/linux/.config cp /boot/vmlinuz.version.h /usr/src/linux/include/linux cp /boot/vmlinuz.autoconf.h /usr/src/linux/include/linux cd /usr/src/linux make cloneconfig dep
Um ehrlich zu sein, da halte ich die Anleitung einfach fuer ziemlich daneben... Wenn ich ein "make cloneconfig && make dep" ausfuehre, dann brauche ich vorher nicht extra die Da- teien vmlinuz.{config,version.h,autoconf.h} kopieren. Warum? Das "make cloneconfig" holt sich ja quasi genau die Konfigu- ration und schreibt die Dateien .config und autoconf.h. Ein anschliessendes "make dep" erzeugt die Datei version.h und evtl. modversions.h, falls die entsprechende Option "set version information on all module symbols" aktiviert ist. Wozu soll man dann extra noch vorher die Dateien kopieren? Unnoetig! Was hier angegeben ist in dem NVIDIA-Howto von SuSE ist nicht falsch, aber unnoetig. Was Du machen musst ist schlicht: Wechsle in das Verzeichnis mit Deinen zum Kernel passenden Quellen und fuehre dort ein "make cloneconfig && make dep" aus. Falls Du einen eigenen Kernel compiliert und instal- liert hast, kannst Du das auch sparen, denn dann hast Du bereits eine korrekte Konfiguration und insbesondere die Da- teien version.h und autoconf.h muessten korrekt sein. Wenn Du einen Vanilla-Kernel hast, musst Du etwas anders vorge- hen, steht alles in www.thomashertweck.de/kernel.html#klonen beschrieben. Die Datei version.h beinhaltet Infos zum Kernel-Release. Du kannst sie Dir einfach anschauen, sie ist ziemlich kurz: #define UTS_RELEASE "2.4.20-4GB-athlon" #define LINUX_VERSION_CODE 132116 #define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) Es stehen da also nur drei Define-Makros drin. Die Datei autoconf.h spiegelt Deine aktuelle Konfiguration wider. Um nicht alle Makros als Compiler-Option angeben zu muessen, wird stattdessen diese Datei ausgewertet. Sie be- ginnt z.B. wie folgt: /* * Automatically generated C config: don't edit */ #define AUTOCONF_INCLUDED #define CONFIG_X86 1 #undef CONFIG_SBUS #define CONFIG_UID16 1 /* * Code maturity level options */ #define CONFIG_EXPERIMENTAL 1 /* * Loadable module support */ #define CONFIG_MODULES 1 #define CONFIG_MODVERSIONS 1 #define CONFIG_KMOD 1 /* * Processor type and features */ #undef CONFIG_M386 #undef CONFIG_M486 [...] Du koenntest auch alle Makros per -D Anweisung beim Compiler- bzw. Preprocessor-Aufruf angeben, aber das gibt dann unendlich lange Kommandozeilen, die Du nicht wirklich willst. Beide Dateien werden ueblicherweise in vielen anderen Dateien des Kernels eingebunden, und eben auch im Quellcode von z.B. externen Kernel-Modulen.
2) Use the nvidia installer.
export IGNORE_CC_MISMATCH=yes sh NVIDIA-Linux-x86-1.0-4363.run
Ich verstehe nicht was man da bei einem selbst kompilierten Kernel von den SuSE-Sourcen (kernel-source-2.4.21-4.i586.rpm) ändert.
Wenn Du selbst compiliert hast, sind die Kernel-Quellen eigent- lich korrekt konfiguriert und Du musst hier nichts weiteres ma- chen.
Muß man für "export" bzw "sh" in /usr/src/linux sein?
Nein. Du exportierst ganz normal eine Variable an der Shell wie hier angegeben. Das kannst Du in einem beliebigen Verzeichnis machen. Danach wechselst Du dorthin, wo das NVIDIA-File liegt und fuehrst es aus. Es sollte dann das Kernel-Interface korrekt erstellt werden koennen. Ob das aber mit dem 2.4.21-SuSE-Kernel von H. Mantel ohne Probleme geht, wage ich zu bezweifeln. Aber die Problematik kennst Du ja schon. Das hat nichts mit den NVIDIA- Treibern zu tun, sondern mit Aenderungen am SuSE-Kernel 2.4.21. Mit Vanilla-Kerneln und mit SuSE-Kerneln bis einschliesslich 2.4.20 sollte es jedenfalls funktionieren. CU, Thomson