Am Dienstag, 2. März 2004 22:53 schrieb zunft@tiscali.de:
Hallo,
bei mir gibt es ein Problem meine neue ATI 9600SE Karte mit 3D-Unterstützung unter SUSE 9.0 zum laufen zu bewegen. Mein erster Versuch bestand darin das vorkompilierte Modul des Kernels k_athlon 2.4.21-144-athlon zu verwenden. Konfiguriert habe ich das Ganze mit fglrxconfig (aus package fglrx 3.7.0-25).
das Resultat ist dann folgendes in XFree86.0.log:
(II) fglrx(0): [drm] created "fglrx" driver at busid "PCI:1:0:0" (II) fglrx(0): [drm] added 8192 byte SAREA at 0xf4980000 (II) fglrx(0): [drm] mapped SAREA 0xf4980000 to 0x4001e000 (II) fglrx(0): [drm] framebuffer handle = 0xc0000000 (II) fglrx(0): [drm] added 1 reserved context for kernel (II) fglrx(0): DRIScreenInit done (II) fglrx(0): Kernel Module Version Information: (II) fglrx(0): Name: fglrx (II) fglrx(0): Version: 3.2.7 (II) fglrx(0): Date: Sep 4 2003 (II) fglrx(0): Desc: ATI Fire GL DRM kernel module (WW) fglrx(0): Kernel Module version does *not* match driver. (EE) fglrx(0): incompatible kernel module detected - HW accelerated OpenGL will not work (II) fglrx(0): [drm] removed 1 reserved context for kernel (II) fglrx(0): [drm] unmapping 8192 bytes of SAREA 0xf4980000 at 0x4001e000 (WW) fglrx(0): *********************************************** (WW) fglrx(0): * DRI initialization failed! * (WW) fglrx(0): * (maybe driver kernel module missing or bad) * (WW) fglrx(0): * 2D acceleraton available (MMIO) * (WW) fglrx(0): * no 3D acceleration available * (WW) fglrx(0): ********************************************* *
daneben bekomme ich noch folgende Kernelmeldung mit 'dmesg | grep fglrx': [fglrx] Maximum main memory to use for locked dma buffers: 678 MBytes. [fglrx] module loaded - fglrx 3.2.7 [Sep 4 2003] on minor 0 [fglrx:firegl_addmap] *ERROR* mtrr allocation failed (-22) [fglrx:firegl_unlock] *ERROR* Process 2030 using kernel context 0
der zweite Schritt war dann das Kernelmodul km_fglrx zu kompilieren. Das wurde dann auch soweit nach Anleitung durchgeführt und war auch erfolgreich: ATI module generator V 2.0 ========================== initializing... cleaning... patching 'highmem.h'... skipping patch for 'drmP.h', not needed probing for VMA API version... doing script based build for kernel 2.4.x and similar ./make.sh: line 1009: [: -ge: unary operator expected compiling './agpgart_be.c'... compiling './agp3.c'... compiling './i7505-agp.c'... compiling './nvidia-agp.c'... compiling './firegl_public.c'... linking of fglrx kernel module... duplication skipped - generator was not called from regular lib tree done. ==============================
doch beim Laden des Moduls kam folgendes: modprobe -v fglrx /sbin/insmod /lib/modules/2.4.21-144-athlon/kernel/drivers/char/drm/fglrx.o Using /lib/modules/2.4.21-144-athlon/kernel/drivers/char/drm/fglrx.o Symbol version prefix '' /lib/modules/2.4.21-144-athlon/kernel/drivers/char/drm/fglrx.o: couldn't find the kernel version the module was compiled for /lib/modules/2.4.21-144-athlon/kernel/drivers/char/drm/fglrx.o: insmod /lib/modules/2.4.21-144-athlon/kernel/drivers/char/drm/fglrx.o failed /lib/modules/2.4.21-144-athlon/kernel/drivers/char/drm/fglrx.o: insmod fglrx failed das gleiche passierte auch mit den orginal ATI-Treiberrn.
und dann wird natürlich auch der 3D-Treiber wieder nicht geladen.
Was kann ich noch probieren?
Gruß Steffen
das obige Problem hat mich einiges an Zeit gekostet, da ich kein eingefleischter Linux-Programmierer bin. Aber ich hab doch noch eine Lösung gefunden: Beim Kompilieren des neuen Kernel-Modules (fglrx.o) schreibt er keine Kernelinformationen in das Objektfile und mit modprobe meldet er deswegen den oben gezeigten Fehler. Prüfen kann man dies folgendermassen: modinfo -f %{kernel_version} fglrx führt zu (none) die Behebung dieses Problems ist versteckt in der Datei module.h in /lib/modules/(aktueller Kernel)/build/include/linux/ darin befinden sich folgende Zeilen: static const char __module_kernel_version[] __attribute__((unused, __section__(".modinfo"))) = "kernel_version=" UTS_RELEASE; Der Gag ist nun aus dem 'unused' ein 'used' zu machen, und schon wird die Kernelvinformation mit in das Module kompiliert. Damit lässt sich dann auch das Modul richtig laden. Ich kann nur nicht verstehen, warum das ursprünglich so deklariert war. Mich hat das einige Stunden an Zeit gekostet, und eine sinnvolle Lösung habe ich im Internet nicht dazu gefunden. Gruß Steffen