ATi's Radeon 8500 unter Linux

Zur Zeit gibt es keine offizielle Möglichkeit, ATi's Radeon 8500 vernünftig unter Linux zu betreiben. Erst XFree86 4.2.0 wird vernünftigen 2D Support bieten, jedoch nützt dies nichts, wenn man jetzt sofort eine funktionierende 2D-Karte haben möchte. 3D-Support steht leider noch in den Sternen. Jedoch will ATi im Februar/März 2002 Treiber für ihre FireGL 8700 / 8800 bereitstellen, welche unter Linux laufen und auf dem selben Chip (R200) basieren wie die Radeon 8500.
Die Firma XiGraphics stellt für $99 eine X-Server bereit, welcher bald 2D & 3D Support für die Radeon 8500 bieten soll. Bis dahin soll Euch diese Anleitung weiterhelfen.

Bitte als root einloggen!!!

1. Kernel vorbereiten

Wir benötigen einen Kernel ab Version 2.4.x, welche es hier gibt.
Im Kernel müssen folgende Schalter aktiviert werden: (Wer noch nie einen Kernel kompiliert hat, der sollte sich die Kernel-HOWTO ansehen)
  • CONFIG_AGP=Y - AGP-Support wird in den Kernel kompiliert, mit make xconfig über den Punkt "Character Devices" zu erreichen
  • bei der AGP-Konfiguration bitte noch den Chipsatz auswählen z.B. CONFIG_AGP_VIA=Y
  • CONFIG_DRM=Y - Direct Rendering Manager hinzufügen
  • zusätzlich noch die Radeon, als Modul, auswählen CONFIG_DRM_RADEON=m
  • so jetzt auf "Save and Exit" und die Konfiguration des Kernels ist beendet
  • nun den Kernel mit "make clean", "make dep", "make bzImage modules modules_install " kompilieren und mit "make install" installieren

2. XFree herunterladen

Da die Radeon 8500 in der aktuellen Version 4.1.0 nicht unterstütztwird, bleibt uns die Kompilierung des CVS nicht erspart. Dazu laden wir zuerst den Source Code runter (Achtung: ca. 250 MB ungepackt!!!)

  • einfach in einer Shell folgendes Kommando eingeben: cvs -d:pserver:anoncvs:anoncvs@anoncvs.xfree.org:/cvs co xc
  • nun wird automatisch das Verzeichnis namens "xc" heruntergeladen und in den aktuellen Ordner gespeichert, diese Aktion dauerte mit einem 33.6'er Modem ca. 11 Stunden
  • wärend der Download läuft, können wir eine Sicherungskopie unseres /usr/X11R6 Verzeichnises erstellen, dazu einfach in das Verzeichnis wechseln und folgendes Kommando eingeben: tar -cvzf xfree_backup.tar.gz

2. XFree konfigurieren


So, nach dem Download müssen wir XFree noch kurz konfigurieren.
  • Im Verzeichnis /xc/config/cf kopieren wir die Datei "xf86site.def" in die Datei "host.def", in der "host.def" können nun noch einige Optimierungen vorgenommen werden:
  • in der Zeile "#define DefaultGcc2i386Opt" können prozessorabhängige Optimierungen aktiviert werden z.B. für einen Athlon/Duron würde dies so aussehen: #define DefaultGcc2i386Opt -O2 -mcpu=i686 -march=athlon -fomit-frame-pointer, so jetzt noch die Zeile aus dem Kommentarbereich "/**/" verschieben
  • in der Datei /xc/config/cf /xfree86.cf sind noch folgende Schalter von "NO" auf "YES" zu ändern:
  • BuildXF86DRI
  • BuildXF86DRIDriverSupport
  • in der Datei /xc/config/cf /x11.tmpl sind noch folgende Schalter von "NO" auf "YES" zu ändern:
  • BuildXF86DRI
  • BuildXF86DGA
  • SharedLibXxf86dga
  • NormalLibXxf86dga
  • SharedLibXv
  • BuildXvExt
  • SharedLibXvMC
  • BuildXvMCExt
  • BuildGlxExt
  • BuildXF86MiscExt
  • BuildXF86BigFontExt
  • BuildXF86VidModeExt
  • BuildXF86RushExt
  • BuildScreenSaverExt

3. XFree kompilieren

Nun wechseln wir zurück in das /xc Verzeichnis. Dort starten wir die Kompilierung (benötigt ca. 280 MB Speicherplatz!) mit folgendem Befehl:
  • make World &>World.log
  • wenn die Kompilierung abgeschlossen ist, kontrollieren wir die Datei World.log auf Kompilierungsfehler
  • grep -e "] error" World.log
  • wenn keine Fehler vorhanden sind, beenden wir den aktuellen X-Server indem wir in den Einzelbenutzermodus wechseln, mit init 1, danach installieren wir das neue XFree mit folgenden Befehl:
  • make install , make install.man und ldconfig -v

4. fertig


So, nun noch schnell die Datei XF86Config-4 geändert und den Rechner neu starten. Die XF86Config-4 sollte nun ähnlich aussehen:


Section "ServerLayout"
Identifier "XFree86 Configured"
Screen0 "Screen0" 0 0
InputDevice "Mouse1" "CorePointer"
InputDevice "Keyboard0" "CoreKeyboard"
EndSection

Section "Files"
RgbPath"/usr/X11R6/lib/X11/rgb"
ModulePath"/usr/X11R6/lib/modules"
FontPath "unix:/-1"
EndSection

Section "Module"
Load "dbe"
Load "dri"
Load "extmod"
Load "glx"
Load "GLcore"
Load "pex5"
Load "record"
Load "xie"
EndSection

Section "InputDevice"
Identifier "Keyboard0"
Driver"keyboard"
EndSection

Section "InputDevice"
Identifier "Mouse1"
Driver"mouse"
Option"SendCoreEvents" "true"
Option"Protocol" "ImPS/2"
Option"ZAxisMapping" "4 5"
Option"Device" "/dev/input/mice"
Option"Emulate3Buttons" "false"
EndSection

Section "Monitor"
Identifier"Monitor0"
VendorName"SAM"
ModelName "S/M 753DF"
HorizSync 30.0 - 70.0
VertRefresh 50.0 - 160.0
EndSection

Section "Device"
### Available Driver options are:-
### Values: <i>: integer, <f>: float, <bool>: "True"/"False",
### <string>: "String", <freq>: "<f> Hz/kHz/MHz"
### [arg]: arg optional
#Option "NoAccel" # [<bool>]
#Option "SWcursor" # [<bool>]
#Option "Dac6Bit" # [<bool>]
#Option "Dac8Bit" # [<bool>]
#Option "ForcePCIMode" # [<bool>]
#Option "CPPIOMode" # [<bool>]
#Option "CPusecTimeout" # <i>
#Option "AGPMode" # <i>
#Option "AGPSize" # <i>
#Option "RingSize" # <i>
#Option "BufferSize" # <i>
#Option "EnableDepthMoves" # [<bool>]
#Option "UseFBDev" # [<bool>]
Identifier "Card0"
Driver"ati"
VendorName "ATI"
BoardName"Radeon QD"
BusID "PCI:1:0:0"
EndSection

Section "DRI
Mode 0666
Endsection

Section "Screen"
Identifier "Screen0"
Device "Card0"
Monitor "Monitor0"
DefaultDepth 24

SubSection "Display"
Depth 24
Modes "1280x1024" "1024x768"
EndSubSection

Endsection

Die Monitorparameter sollten noch angepasst werden, dann sollte es laufen. Hier ist mein XFree86.log, so ähnlich sollte es bei Euch auch aussehen. Bei Fragen, benutzt bitte mein Forum .


UPDATE (10.07.2002):

Die meisten aktuellen Linuxdistributionen werden nun mit XFree86 4.2.0 ausgeliefert. Daher ist funktionierender 2D Support, sowie Videobeschleunigung unter Linux mit der Radeon 8500 kein Problem mehr. 3D Support ist zwischenzeitlich durch ATi's FireGL 8700 / 8800 Treiber auch vorhanden. Somit wird der Großteil dieser Anleitung nur von Leuten benötigt, welche sich den den X-Server selber kompilieren möchten, was aus Gründen der Performance und Aktualität durchaus etwas bringen kann. Da ATi nun FireGL 8800 / 8700 Treiber für Linux bereitstellt, wollen wir kurz auf deren Installation und Konfiguration eingehen. Hier kann man die Treiber runterlanden.

1. Kernel vorbereiten

Wir benötigen einen Kernel ab Version 2.4.x, welche es hier gibt. Dieser ist mittlerweile bei allen Linuxdistributionen dabei, also kann man die Installation der Treiber erstmal ohne neuen Kernel probieren.
Im Kernel müssen folgende Schalter aktiviert werden: (Wer noch nie einen Kernel kompiliert hat, der sollte sich die Kernel-HOWTO ansehen)
  • CONFIG_AGP=Y - AGP-Support wird in den Kernel kompiliert, mit make xconfig über den Punkt "Character Devices" zu erreichen
  • bei der AGP-Konfiguration bitte noch den Chipsatz auswählen z.B. CONFIG_AGP_VIA=Y
  • CONFIG_DRM=Y - Direct Rendering Manager hinzufügen
  • zusätzlich noch die Radeon, als Modul, auswählen CONFIG_DRM_RADEON=m
  • so jetzt auf "Save and Exit" und die Konfiguration des Kernels ist beendet
  • nun den Kernel mit "make clean", "make dep", "make bzImage modules modules_install " kompilieren und mit "make install" installieren

2. Systemvorbereitung


Bevor wir die FireGL Treiber installieren, müssen wir alte libGL*.* Dateien entfernen. Dazu gehen wir per init 1 in den Einzelbenutzermodus. Dann schauen wir in den "/usr/lib", "/lib" und "/usr/X11R6/lib" Verzeichnissen nach und benennen die Dateien einfach um oder löschen sie. Nun noch ldconfig -v aufrufen, was den Cache der dynamisch linkbaren Bibliotheken aktualisiert und verweiste Links löscht.

3. Installation

Die Treiber werden einfach von Hand installiert. Die FireGL Treiber laufen angeblich nur auf "built by ATi" Karten, nicht auf "powered by ATi" Karten, ob dies stimmt kann ich nicht sagen, da meine Karte von ATi stammt. Hier könnte ein BIOS-Update helfen.

  • rpm -Uvh --force fglr200-glc22-4.2.0-x.x.x.i586.rpm
  • sollte jetzt eine Fehlermeldung erscheinen, z.B. libpng.so.2 wird benötigt, dann einfach ignorieren und den Befehl ändern
  • rpm -Uvh --force --nodeps fglr200-glc22-4.2.0-x.x.x.i586.rpm
  • im Laufe der Installation werden entweder vorgefertige Module installiert, oder entsprechend dem Kernel welche kompiliert
  • bitte lest euch auch die filenotes.txt durch, falls die Installation nicht funktioniert
4. Konfiguration

Die Treiber werden mit Hilfe eines kleinen Programmes konfiguriert. Hier ruft man einfach fglrxconfig auf. Nun müssen ein paar Fragen beantwortet werden. Bei den Monitorfrequenzen sollte man im Monitorhandbuch nachsehen, oder einfach einen großen Bereich angeben, so hab ich z.B bei beiden Werten 30-150 angegeben, weil ich grad keine Unterlagen zur Hand hatte. Wenn dieser Abschnitt fertig ist dann wurde die XF86Config Datei erstellt. Dort können wir nun noch ein paar Änderungen vornehmen:

  • folgende Zeilen werdem gelöscht
  • SubSection "extmod"
  • Option "omit xfree86-dga"
  • und durch Load "extmod" ersetzt, somit funktionieren auch Programme, welche per Overlay (z.B. xawtv) in den Grafikkartenspeicher schreiben
  • der Fontpath wird unter Mandrake schon länger als Port des Fontservers angegeben, sollte es also Probleme bei den Schriften geben, dann einfach den alten Fontpath ausmarkieren mittels z.B. # Fontpath "/fonts/local" und durch eine neue Zeile ersetzen Fontpath "unix/:-1"
  • wer keine automatische Monitorerkennung haben möchte, macht sich bei oft wechselnden Bildschirmgrößen recht nützlich, da die DPI Werte sich sonst immer ändern und XFree86 somit die Schriftgrößen anpasst, der fügt im Abschnitt Section "Device" die Zeile Option "NoDDC" ein
So, nach einem Neustart sollten die Treiber laufen. Falls nicht, kontrolliert bitte das XFree.log und macht auf jeden Fall das TV-Kabel, sowie alle anderen Zweitbildschirme ab. Wenn man sich bei KDE oder Gnome, oder irgendeiner Oberfläche anmelden konnte, dann sollte man den 3D-Support noch überprüfen. Dies geht mittels glxinfo, welches folgendes Ergebnis darstellen sollte:

name of display: :0.0
display: :0 screen: 0
direct rendering: Yes
server glx vendor string: SGI
server glx version string: 1.2
server glx extensions:
GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_EXT_import_context
client glx vendor string: SGI
client glx version string: 1.2
client glx extensions:
GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_EXT_import_context
GLX extensions:
GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_EXT_import_context
OpenGL vendor string: ATI Technologies Inc.
OpenGL renderer string: Radeon 8500 DDR Athlon (3DNow!)
OpenGL version string: 1.3.3037 (1.4.3)
OpenGL extensions:
GL_ARB_multitexture, GL_ARB_texture_border_clamp, GL_ARB_texture_cube_map,
GL_ARB_texture_env_add, GL_ARB_texture_env_combine,
GL_ARB_texture_env_crossbar, GL_ARB_texture_env_dot3,
GL_ARB_transpose_matrix, GL_ARB_vertex_blend, GL_ARB_window_pos,
GL_ATI_element_array, GL_ATI_envmap_bumpmap, GL_ATI_fragment_shader,
GL_ATI_pn_triangles, GL_ATI_texture_mirror_once,
GL_ATI_vertex_array_object, GL_ATI_vertex_streams,
GL_ATIX_texture_env_combine3, GL_ATIX_texture_env_route,
GL_ATIX_vertex_shader_output_point_size, GL_EXT_abgr, GL_EXT_bgra,
GL_EXT_blend_color, GL_EXT_blend_func_separate, GL_EXT_blend_minmax,
GL_EXT_blend_subtract, GL_EXT_clip_volume_hint,
GL_EXT_compiled_vertex_array, GL_EXT_draw_range_elements,
GL_EXT_fog_coord, GL_EXT_multi_draw_arrays, GL_EXT_packed_pixels,
GL_EXT_point_parameters, GL_ARB_point_parameters, GL_EXT_rescale_normal,
GL_EXT_polygon_offset, GL_EXT_secondary_color,
GL_EXT_separate_specular_color, GL_EXT_stencil_wrap,
GL_EXT_texgen_reflection, GL_EXT_texture_env_add, GL_EXT_texture3D,
GL_EXT_texture_cube_map, GL_EXT_texture_edge_clamp,
GL_EXT_texture_env_combine, GL_EXT_texture_env_dot3,
GL_EXT_texture_lod_bias, GL_EXT_texture_filter_anisotropic,
GL_EXT_texture_object, GL_EXT_vertex_array, GL_EXT_vertex_shader,
GL_NV_texgen_reflection, GL_NV_blend_square, GL_SGI_texture_edge_clamp,
GL_SGIS_texture_border_clamp, GL_SGIS_texture_lod,
GL_SGIS_generate_mipmap, GL_SGIS_multitexture, GL_SUN_multi_draw_arrays
glu version: 1.3
glu extensions:
GLU_EXT_nurbs_tessellator, GLU_EXT_object_space_tess

visual x bf lv rg d st colorbuffer ax dp st accumbuffer ms cav
id dep cl sp sz l ci b ro r g b a bf th cl r g b a ns b eat
----------------------------------------------------------------------
0x23 24 tc 0 24 0 r y . 8 8 8 8 0 24 8 16 16 16 16 0 0 Slow
0x24 24 tc 0 24 0 r . . 8 8 8 8 0 24 8 16 16 16 16 0 0 Slow
0x25 24 tc 0 24 0 r y . 8 8 8 8 0 24 0 16 16 16 16 0 0 Slow
0x26 24 tc 0 24 0 r . . 8 8 8 8 0 24 0 16 16 16 16 0 0 Slow
0x27 24 tc 0 24 0 r y . 8 8 8 8 0 24 8 0 0 0 0 0 0 None
0x28 24 tc 0 24 0 r . . 8 8 8 8 0 24 8 0 0 0 0 0 0 None
0x29 24 tc 0 24 0 r y . 8 8 8 8 0 24 0 0 0 0 0 0 0 None
0x2a 24 tc 0 24 0 r . . 8 8 8 8 0 24 0 0 0 0 0 0 0 None
0x2b 24 dc 0 24 0 r y . 8 8 8 8 0 24 8 16 16 16 16 0 0 Slow
0x2c 24 dc 0 24 0 r . . 8 8 8 8 0 24 8 16 16 16 16 0 0 Slow
0x2d 24 dc 0 24 0 r y . 8 8 8 8 0 24 0 16 16 16 16 0 0 Slow
0x2e 24 dc 0 24 0 r . . 8 8 8 8 0 24 0 16 16 16 16 0 0 Slow
0x2f 24 dc 0 24 0 r y . 8 8 8 8 0 24 8 0 0 0 0 0 0 None
0x30 24 dc 0 24 0 r . . 8 8 8 8 0 24 8 0 0 0 0 0 0 None
0x31 24 dc 0 24 0 r y . 8 8 8 8 0 24 0 0 0 0 0 0 0 None
0x32 24 dc 0 24 0 r . . 8 8 8 8 0 24 0 0 0 0 0 0 0 None

Sollte hier etwas von MESA stehen, dann befinden sich noch alte MESA Bibliotheken auf dem System, welche mal löschen sollte. Beim nächsten Update werde ich mir mal die Open Source Treiber ansehen.