Установка проприетарных драйверов ATI в Linux

Перерабтанный вариант статьи про установку драйвера ATI в Linux. По просьбам пользователей некоторые моменты были объяснены подробнее. Ссылки обновлены. Добавлены некоторые способы решения возникающих проблем.

Качаем дрова с Внутреннего липецкого FTP:
Для видеокарт серии x2xxx - Скачать (Эти дрова дают очень ощутимый прирост в скорости, но часто глючат с более старыми видяхами)

Для видеокарт старее x2xxx - Скачать

ВНИМАНИЕ!!! Недавно ATI сравняла версии драйверов в Windows и Linux. Последний на текущий момент драйвер имеет версию 7.11. По ссылкам выше расположены более старые версии. Для установки на видеокарты с чипом меньше R600 ИМХО лучше ставить версию 8.39.4 или ниже (Хотя у меня более-менее стабильно работают 7.11 с чипом R350).

Примечание: Если в системе уже установлен проприетарный драйвер, то перекомпиляцию ядра можно попробовать пропустить.

Берем исходники ядра (есть в дистрибутиве, но можно поставить новее)

Как поставить ядро?
Для Mandriva, Fedora, RHEL: urpmi kernel-source
Для SuSe: zypper install linux-source
Для Debian, Ubuntu: apt-get install linux-source

Все команды должны выполнятся от имени пользователя root.

,перекомпилируем ядро (боле подробное описание процесса тут),

cd /usr/src/linux
make menuconfig 

отключаем в нем поддержку DRI (Переходим в Device Drivers -> Character Device -> Direct Rendering Manager), больше ничего желательно не трогать :)

make bzImage
make modules
make modules_install
make install

перезагружаем компьютер с этим ядром, переходим в каталог с драйвером

cd /path/to/driver

Естественно вместо /path/to/driver вам придется подставить Ваш путь к драйверу.
запускаем скачанный установщик:

# sh ati-driver-installer-8.39.4-x86.x86_64.run

Драйвер установлен, идем дальше.
В /etc/fstab добавляем строчку

tmpfs /dev/shm tmpfs size=256m 0 0

Теперь надо настроить /etc/X11/xorg.conf. Проще всего сделать это используя aticonfig

aticonfig --initial

Но иногда это не срабатывает, тогда лезем ручками и правим xorg.conf/
Должно получится примерно следующее:

Section "ServerLayout"
    Identifier "Monitor layout"
    InputDevice "Keyboard1" "CoreKeyboard"
    InputDevice "Mouse1" "CorePointer"
    Screen 0 "Screen 0"
EndSection

Section "Files"
    FontPath "unix/:-1"
    FontPath "/usr/share/fonts/misc:unscaled"
EndSection

Section "dri"
    Mode 0666
EndSection

Section "Extensions"
    Option "Composite" 
EndSection

Section "ServerFlags"
    Option "AIGLX" "off" # AIGLX не работает с видеокартами АТИ, если версия драйвера < 8.42.3
                         # соответственно его можно отключить.
    AllowMouseOpenFail # allows the server to start up even if the mouse does not work
EndSection

Section "Module"
    Load "dbe" # Double-Buffering Extension
    Load "v4l" # Video for Linux
    Load "extmod"
    Load "type1"
    Load "freetype"
    Load "glx" # 3D layer
    Load "dri" # direct rendering
EndSection

Section "InputDevice"
    Identifier "Keyboard1"
    Driver "kbd"
    Option "XkbModel" "pc104"
    Option "XkbLayout" "us,ru(winkeys)"
    Option "XkbOptions" "grp:rctrl_toggle,grp_led:scroll,compose:rwin"   
    # Переключение раскладки. Оставьте свое значение
EndSection

Section "InputDevice"
    Identifier "Mouse1"
    Driver "mouse"
    Option "Protocol" "ExplorerPS/2"
    Option "Device" "/dev/mouse"
EndSection

Section "Monitor"
    Identifier "monitor1"
    VendorName "Samsung"
    ModelName "SyncMaster 710n"
    HorizSync 30-81
    VertRefresh 50-60
    Option "DPMS"
EndSection

Section "Device"
    Identifier "Primary"
    VendorName "ATI Technologies Inc."
    BoardName "ATI Radeon (fglrx)"
    Driver "fglrx"
    BusID "PCI:01:00:00"   # Оставьте то, что есть. Если ничего нет, то ничего и не пишите.
# Данный параметр описывает нахождение карточки. Формат таков: "PCI:bus:device:function".То что
# написано в статье подходит только для карт AGP, для обладателей карт PCIE должно быть
# "PCI:5:0:0" или "PCI:5:0:1".Существует еще два варианта:
# 1. Опустить данный параметр для автоопределения.
# 2. Запустить Иксы с параметром -scanpci и посмотреть какой параметр для данной системы.
EndSection

Section "Screen"
    Identifier "Screen 0"
    Device "Primary"
    Monitor "monitor1"
    DefaultColorDepth 24
    Subsection "Display"
        Depth 24
        Modes "1280x1024"           # Измените разрешение на оптимальное для Вашего монитора
    EndSubsection
EndSection

Запускаем иксы командой

startx

Для теста запускаем: fgl_glxgears. Если все работает - радуемся :)
А если не работает, читаем дальше.

Возможные проблемы и их решения.

Во первых, если что-то работает не так, нужно узнать что это. Для этого даем такую команду

grep "EE" /var/log/Xorg.0.log

И видим что-то типа:

     (WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(II) Loading extension MIT-SCREEN-SAVER
(EE) fglrx(0): incompatible kernel module detected - HW accelerated OpenGL will not work

Строчка, начинающаяся с (EE) и есть искомая ошибка

1. (EE) AIGLX error: dlsym for __driCreateNewScreen_20050727 failed (/usr/lib64/dri/fglrx_dri.so: undefined symbol:
Не фатальная ошибка. Вылазит из-за отсутствия поддержки AIGLX в драйверах ATI до версии 8.42.3
Пути решения:
В секцию ServerFlags добавить Option "AIGLX" "off". Получится примерно следующее

Section "ServerFlags"
    Option "AIGLX" "off"
EndSection

2. (EE) AIGLX error: fglrx exports no extensions (/usr/lib64/dri/fglrx_dri.so: undefined symbol: __driDriverExtensions)
(EE) AIGLX: reverting to software rendering

В секцию ServerFlags добавить Option "AIGLX" "on".

3. (EE) fglrx(0): incompatible kernel module detected - HW accelerated OpenGL will not work
Причина: Новый модуль скомпилировался, но старый остался в памяти и используется.

Решение:
Закрыть иксы и выполнить от root

modprobe -r fglrx

Запустить иксы снова.

Причина: Новый модуль не скомпилировался, вместо него работает старый.

Решение:

rm -rf /lib/modules/fglrx/ 

И установка драйвера снова. Если снова драйвер не работает с такой-же ошибкой, закиньте файл /usr/share/ati/fglrx-install.log
на наш фтп и идите задавать вопрос на форум :)

Удачи.

Материал дополнили: BSD, smoomik, AleksK.