From: n1tro
Newsgroups: http://www.n1tro.info
Date: Mon, 28 Jan 2005 14:31:37 +0000 (UTC)
Subject: Настройка работы DRI в Linux с новым ATI fglrx драйвером
Оригинал: http://www.n1tro.info/dri.txt
Итак, после 6 дней постоянных попыток заставить Direct Rendering (DRI)
зупуститься - я-таки это СДЕЛАЛ! :) Эта статья будет полезна, в
основном, обладателям видеокарты ATI Radeon 9000 Mobility и подобных...
на самом деле, достаточно много карт схожи с архитектурой M9, поэтому не
расстраивайтесь, возможно, решение вашей проблемы схоже с моим. Начнем с
того, что я опишу свою систему:
Часть I: моя система
OS: Slackware Linux 10
Железо: Ноутбук IBM ThinkPad T41
ядро: 2.4.29
X-server: xorg-6.8.0
Карта: ATI Radeon Mobility 9000 M9 (ATI Technologies Inc Radeon R250 Lf [Radeon Mobility 9000 M9])
Драйвер: от ATI - fglrx (для X.Org 6.8, версия 8.8.25 от 1.17.05)
В принципе, больше знать и не надо :) Сразу скажу, что я около 4 суток
пытался поставить этот драйвер на X.org 6.8.1, но там у меня так и не
вышло, хотя... сейчас уже можно попробовать, т.к. решение для 6.8.0
может подойти и для 6.8.1. Не буду утверждать, но МОЖЕТ БЫТЬ. В 6.8.1
проблема заключалась в том, что при загрузке Х-сервера fglrx[drm] не мог
найти /dev/dri/card0 - соответственно, не мог запустить Direct
Rendering. Вобщем, я решил поступить логично: раз на сайте АТИ драйвера
для 6.8.0, а не для 6.8.1 - то логично будет поставить X.org 6.8.0, что
я и сделал.
Часть II: симптомы
После установки атишных драйверов, правки xorg.conf и рестарта X-сервера
- атишное DRI так и не запустилось. В логах (/var/log/Xorg.0.log) было
вот что:
(II) fglrx(0): UMM area: 0xe0501000 (size=0x01aff000)
(II) fglrx(0): driver needs XFree86 version: 4.3.x
(WW) fglrx(0): could not detect XFree86 version (query_status=-3)
(II) Loading extension ATIFGLRXDRI
(II) fglrx(0): doing DRIScreenInit
drmOpenDevice: node name is /dev/dri/card0
drmOpenDevice: open result is -1, (No such device)
drmOpenDevice: open result is -1, (No such device)
drmOpenDevice: Open failed
drmOpenDevice: node name is /dev/dri/card0
drmOpenDevice: open result is -1, (No such device)
drmOpenDevice: open result is -1, (No such device)
drmOpenDevice: Open failed
[drm] failed to load kernel module "fglrx"
(II) fglrx(0): [drm] drmOpen failed
(EE) fglrx(0): DRIScreenInit failed!
(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): ********************************************* *
(II) fglrx(0): FBADPhys: 0xe0000000 FBMappedSize: 0x02000000
(**) fglrx(0): Write-combining range (0xe0000000,0x2000000)
(II) fglrx(0): FBMM initialized for area (0,0)-(1024,8191)
(II) fglrx(0): FBMM auto alloc for area (0,0)-(1024,768) (front color buffer - assumption)
После чего я начал думать - что fglrx-у не нравится... Особое внимание
обратил на "(II) fglrx(0): driver needs XFree86 version: 4.3.x (WW)
fglrx(0): could not detect XFree86 version (query_status=-3)". На
ATI.com написано, что дрова именно для X.org, тогда непонятно -- почему
он не может определить версию XFree86. Отсюда, собственно мысль --
видимо, криво встала динамическая библиотека: libGL.so.1.2, след-но надо
её поставить руками, чтобы убедиться, что он действительно АТИшная, а не
старая (из ядра).
Часть III: ваша система
Если у вас подобные проблемы и симптомы сходятся, то можете сразу
переходить к IV части. Если же вы не особо хорошо разбираетесь в своей
системе, то эта часть для вас.
Сначала вам надо определить саму ошибку, по которой не запускается
Direct Rendering. Для этого вам надо определить версию своего Х-сервера:
набираем в консоли "X -version". После чего система вам может вывести
два (как правило, варианта только 2) варианта:
1) # X -version
XFree86 Version 4.3.0.1 (Debian 4.3.0.dfsg.1-10 20041215174925 fabbione@fabbione.net)
Release Date: 15 August 2003
X Protocol Version 11, Revision 0, Release 6.6
[...]
Это означает, что у вас XFree86. и файл логов лежит в /var/log/XFree86.0.log
2) # X -version
X Window System Version 6.8.0
Release Date: 8 September 2004
X Protocol Version 11, Revision 0, Release 6.8
Если система выдала что-то вроде этого - значит у вас стоит X.org версии
6.8, отлично. Файл логов для этого Х-сервера: /var/log/Xorg.0.log
Вы должны проверить логи вашего Х-сервера и убедиться, что ошибка
похожая. Если ошибка другая - то советую почитать инструкции по
установке на сайте ATI.com, впрочем далее все подробно опишу - как
правильно установить драйвера.
Часть IV: Правильная сборка ядра системы
Как именно собирать ядро (linux-kernel), я расписывать не буду, благо об
этом написано бешеное количество трактатов, манов, доков и туторов.
Опишу лишь то, что надо сделать для правильной работы Direct Rendering-a
с ATI-шными драйверами. В данной статье все манипуляци проводятся с
ядром ветки 2.4, а конкретно - с 2.4.29, которое недавно вышло.
Итак. Чтобы Х-сервер запустил АТИшный DRI - нам надо отключить DRI в
ядре. Для этого в меню настройки ядра заходим в "Character devices --->",
затем (далеко внизу) в "Direct Rendering Manager (XFree86 DRI support) --->".
Там убираем галочку в самой верхней строчке "[ ] Direct Rendering Manager (XFree86 DRI support)".
Отлично, теперь после пересборки, ядро будет использовать DRI из атишных драйверов.
Теперь надо убедиться, что в ядре есть поддержка шины AGP, для этого мы выходим
из настроек DRI и в тех же "Character devices --->" ищем строчку "< >
/dev/agpgart (AGP Support)", жмем пробел, чтобы включить поддержку
agpgart в виде модуля, т.е. конечный вариант будет - "<M> /dev/agpgart
(AGP Support)", после этой строчки надо отметить ваш чипсет (если вы не
знаете, какой у вас чипсет, лучше поставьте звездочки везде - до строчки
"Direct Rendering Manager (XFree86 DRI support) --->"). Далее выходим
из конфигуратора ядра с сохранением конфига и пересобираем ядро: make
dep bzImage modules modules_install. Копируем ядро в /boot, настаиваем
загрузчик... ну вобщем, как всегда.
Теперь ваше ядро готово для работы с атишными драйверами.
Часть V: установка fglrx
Для начала надо убедиться в том, что у нас установлены kernel-headers
для нашего ядра. Скачать их можно на ftp вашего дистрибутива, у меня
это: kernel-headers-2.4.29-i386-1.tgz. Качаем и ставим.
Далее, т.к. версия нашего Х-сервера 6.8.0, то и драйвера мы будем качать
именно для этой версии иксов (логично, правда?).
По ссылке: http://www.ati.com/support/drivers/linux/radeon-linux.html
можно скачать драйвера для xorg 6.8 -
http://www2.ati.com/drivers/linux/fglrx_6_8_0-8.8.25-1.i386.rpm версии
8.8.25. Т.к. у меня система Slackware - то я из этой рпмки сделал
слаковский пакет:
$ rpm2tgz fglrx_6_8_0-8.8.25-1.i386.rpm
$ ls fglrx*
fglrx_6_8_0-8.8.25-1.i386.rpm fglrx_6_8_0-8.8.25-1.i386.tgz
Если ваша система "понимает" rpm-ки - вам не надо ничего преобразовывать.
После этого я ставлю сам пакет самым обычным образом:
installpkg fglrx_6_8_0-8.8.25-1.i386.tgz.
* Установка пакета в вашей системе может отличаться, т.к. я показываю
установку пакета именно для Слакваря.
После этого вам надо сконфигурировать ваш Х-сервер, чтобы он начал
использовать новый драйвер. Для этого под root набираем в командной
строке: "fglrxconfig", после чего вам будет задано много вопросов по
вашей системе. В конце будет вопрос - записать ли новый файл
конфигурации XFree86-4.conf в папке /etc/X11/, на что отвечает "yes".
Затем, в идеале, вам следует просто использовать этот новый файл
конфигурации иксов (если вы используете X.org) - то этот файл надо
переименовать в xorg.conf. Лично я не использую этот новый файл, а лишь
копирую все, что касается видеокарты в мой старый конфиг, т.е. только
следующие строчки:
Section "Device"
Identifier "ATI Graphics Adapter"
Driver "fglrx"
[... и так далее ...]
EndSection
Затем, как написано на атишном сайте, следует включить общую память для
работы драйвера, для чего делаем следующее как root:
1) В файл /etc/fstab добавляем строчку:
tmpfs /dev/shm tmpfs defaults 0 0
2) Монтируем эту штуковину:
mount /dev/shm
3) Теперь проверяем, примаунтилось или нет:
mount | grep "shm"
Если примаунтилось, то должна появиться строка:
tmpfs on /dev/shm type tmpfs (rw)
Теперь, самое главное -- т.к. в иксовых логах нам открыто говорится, что
мол драйвер не может определить версию иксов:
(II) fglrx(0): driver needs XFree86 version: 4.3.x
(WW) fglrx(0): could not detect XFree86 version (query_status=-3)
Мы берем и РУЧКАМИ ставим библиотеку, т.е. распаковываем tgz-файл: tar
zxvf fglrx_6_8_0-8.8.25-1.i386.tgz (распаковываем из под root в корень
системы /), затем делаем следущее:
# cd /lib/modules/fglrx/build_mod/
# sh make.sh
# cd ..
# sh make_install.sh
Объясняю: сначала переходим в папку, куда распаковалась библиотека
fglrx, затем вручную запускаем шелл-скрипт установки драйвера (сначала
make.sh, а затем - make_install.sh, который находится выше уровнем).
ВСЕ. Если скрипт выполнился без ошибок -- считайте, вы уже сидите на
новых атишных дровах.
После всех этих процедур просто перезагружаем Х-сервер (жмем
Alt+Ctrl+Backspace).
Часть VII: результат
После ребута иксов проверяем новые драйвера, которые должны работать уже
Direct Rendering: