18 марта 2009 в 20:24

Открытая замена ati-drivers

Новость «AMD прекращает поддержку R300-R500 чипов» и политика ati-drivers заставили меня задуматься о переходе к свободному драйверу.
Поэтому я хочу рассказать как я это сделал в gentoo, поскольку на gentoo-wiki не нашел подобных how-to, а в разделе docs на gentoo.org, информация требует серьезных поправок.
После некоторых усилий, мне удалось получить рабочую систему на xf86-video-ati с 3D и композитингом.

Итак, что меня не устраивало?
1) fglrx заставляет отключить RCU preemption в ядре. А я хочу это использовать, поскольку RCU положительно сказывается на производительности и масштабируемости системы.
2) fglrx конфликтует с виртуализацией идущей с ядром, а я бы хотел поиграться с kvm.
3) fglrx закрыт, как следствие «runtime text relocations» в его библиотеках; а и вообще, на мой взгляд, он как-то выбивается из идеологии linux, потому что драйвер диктует какие-то свои условия.
4) также стоит отметить что fglrx «дружит» далеко не со всеми ядрами, например, он часто «отстает» от последних версий.

Что имеем?
Девайс: Radeon X850 PRO (R480) (PCIE)
Gentoo Linux ~amd64

Просто «в лоб» поменять поменять в xorg.conf fglrx на ati, дособрать необходимые модули и сделать eselect opengl set xorg-x11 не увенчались успехом. Нужны более тонкие настройки иксов + как оказалось, свежие версии библиотек x11.

Что нужно сделать, чтобы все заработало?
1) /etc/make.conf
USE="... dri xcomposite ... "
VIDEO_CARDS="radeon"

В ядре собираем (встроенно или модульно) agpgart и DRM -> Radeon (например)

2) далее через layman (если не установлен, то emerge layman) подлючаем x11 overlay:
layman -a x11

и демаскируем пакеты:
ln -s /usr/portage/layman/x11/profiles/package.mask /etc/portage/package.unmask/x11

после чего делаем:
emerge -uDN world

Однако, стоит отметить, что еbuild'ы из этого оверлея не совсем идеальны.
У меня, к примеру, не захотел собираться пакет pixman.
Поэтому такие некритичные пакеты можно исключить из
/etc/portage/package.unmask/x11
Хотя с помощью костыля я поставил именно pixman-9999 (кому интересно могу рассказать как, но вообще это не существенно, ибо все работает и со старой версией pixman).
Это, пожалуй, единственный негативный момент, который мне встретился, и я думаю,
это временные проблемы с ебилдами, которые будут устранены в ближайщем будущем.
Итак, система собрана, пора поднастроить xorg.

3) xorg.conf
Section "ServerFlags"
Option "AllowMouseOpenFail" "true"
Option "IgnoreABI" "on"
Option "AIGLX" "true"
EndSection

Section "Module"
Load "glx"
Load "extmod"
Load "dbe"
Load "freetype"
Load "dri"
Load "drm"
Load "ddc"
Load "vbe"
EndSection

Section "Device"
BoardName "Radeon X850 PRO (R480) (PCIE)"
Driver "ati"
Identifier "Device[0]"
Screen 0
VendorName "ATI"
Option "XAANoOffscreenPixmaps" "true"
Option "ColorTiling" "on"
Option "AccelMethod" "EXA"
Option "DMAForXv" "true"
Option "EnablePageFlip" "on"
#Option "AGPFastWrite" "yes"
Option "DynamicClocks" "on"
EndSection

Section "DRI"
Mode 0666
EndSection

Section "Extensions"
Option "Composite" "true"
Option "DAMAGE" "true"
Option "RENDER" "true"
EndSection


Если вы еще не удалили ati-drivers, то делаем
eselect opengl set xorg-x11


Запускаем иксы и наслаждаемся рабочим драйвером! :)
glxinfo:
name of display: :0.0
display: :0 screen: 0
direct rendering: Yes

/var/log/Xorg.0.log:
(**) AIGLX enabled
(II) AIGLX: enabled GLX_MESA_copy_sub_buffer
(II) AIGLX: enabled GLX_SGI_make_current_read
(II) AIGLX: enabled GLX_SGI_swap_control and GLX_MESA_swap_control
(II) AIGLX: enabled GLX_texture_from_pixmap with driver support
(II) AIGLX: Loaded and initialized /usr/lib64/dri/r300_dri.so
...
(II) Loading extension XFree86-DRI
(II) Loading extension DRI2
(II) RADEON(0): [dri] Found DRI library version 1.3.0 and kernel module version1.29.0
(II) RADEON(0): [DRI] installation complete

glxgears:
23590 frames in 5.0 seconds = 4717.968 FPS

В заключение отмечу, что да, количество fps немного хуже, чем в драйверах от amd, но с теми задачами, которые мне нужны, эта карточка + открытый драйвер справляются весьма неплохо.
Да, и xf86-video-ati будет развиваться дальше, а поддержка моей карты с ati-drivers прекращается.
Так что свой выбор в сторону полностью открытого ПО я уже сделал.
+34
2898
22
4ndrey 3,5

Комментарии (49)

+5
Psih, #
Между прочим не поленитесь и добавте доку на gentoo-wiki.com, особенно актуальную, т.е. свежую.
+3
4ndrey, #
ладно, попробую!
+1
Psih, #
Вам потом ещё долго будет искаться от добрых воспоминаний автора статьи :)
+4
4ndrey, #
готово! надеюсь, кому-нибудь это будет полезно :)
0
Psih, #
Ссылочку на мануал в топик запостите тоже :) Мало ли кто искать будет.
+1
iZENfire, #
На более новых чипсетах R600-RV770 с драйвером «radeon» (xf86-video-ati-6.12.0) ускорения 3D не наблюдается:
X.Org X Server 1.5.3
Release Date: 5 November 2008
X Protocol Version 11, Revision 0
Build Operating System: FreeBSD 7.1-STABLE amd64
...
(==) Log file: "/var/log/Xorg.0.log", Time: Wed Mar 18 22:20:10 2009
...
(--) RADEON(0): Chipset: "ATI Radeon HD 4550" (ChipID = 0x9540)
(WW) RADEON(0): R600 support is mostly incomplete and very experimental
...
(WW) RADEON(0): Option "XAANoOffscreenPixmaps" is not used
...
drmOpenDevice: node name is /dev/dri/card0
drmOpenDevice: open result is 10, (OK)
drmOpenByBusid: Searching for BusID pci:0000:02:00.0
drmOpenDevice: node name is /dev/dri/card0
drmOpenDevice: open result is 10, (OK)
drmOpenByBusid: drmOpenMinor returns 10
drmOpenByBusid: drmGetBusid reports pci:0000:02:00.0
(EE) AIGLX error: Calling driver entry point failed(EE) AIGLX: reverting to software rendering


Тест:
> glxgears
Xlib: extension «Generic Event Extension» missing on display ":0.0".
Xlib: extension «Generic Event Extension» missing on display ":0.0".
unknown chip id 0x9540, can't guess.
1773 frames in 5.0 seconds = 354.554 FPS
1781 frames in 5.0 seconds = 356.055 FPS
1727 frames in 5.0 seconds = 345.222 FPS
1589 frames in 5.0 seconds = 317.779 FPS
1577 frames in 5.0 seconds = 315.369 FPS
XIO: fatal IO error 35 (Resource temporarily unavailable) on X server ":0.0"
after 19023 requests (18994 known processed) with 0 events remaining.

Недавно в ядре FreeBSD перелопатили DRM-подсистему.
0
4ndrey, #
Да, поддержка чипсетов R600 еще пока в стадии разработки…
Кстати, я смотрю у вас Radeon HD, тогда лучше имеет смысл попробовать x11-drivers/xf86-video-radeonhd
0
iZENfire, #
Мне сказали на одном из форумов, что драйвер «radeonhd» больше не развивается и включен в Xorg ради совместимости, а весь новый код перенесён в драйвер «ati» и доразрабатывается там рамках суб-драйвера «radeon».
+1
4ndrey, #
Его вынесли из xorg из-за близости по смыслу к radeon. Но сам драйвер продолжает развиваться.
+1
non7top, #
там была война между разработчиками (вернее не столько война, сколько разрабов radeonhd притесняли). наверное это отголоски. radeonhd развивается.
+2
Swappp, #
cgit.freedesktop.org/xorg/driver/xf86-video-radeonhd/log/
Развивается, последний коммит 19 часов назад был.
0
iZENfire, #
Спасибо большое за опровержение мнения.

Переключился на «radeonhd».

В /var/log/Xorg.0.log:
X.Org X Server 1.5.3
Release Date: 5 November 2008
X Protocol Version 11, Revision 0
Build Operating System: FreeBSD 7.1-STABLE amd64

Build Date: 09 March 2009 07:00:25PM

(II) LoadModule: «dri»

(II) Loading /usr/local/lib/xorg/modules/extensions//libdri.so
(II) Module dri: vendor=«X.Org Foundation»
compiled for 1.5.3, module version = 1.0.0
ABI class: X.Org Server Extension, version 1.1
(II) Loading extension XFree86-DRI
(II) LoadModule: «glx»

(II) Loading /usr/local/lib/xorg/modules/extensions//libglx.so
(II) Module glx: vendor=«X.Org Foundation»
compiled for 1.5.3, module version = 1.0.0
ABI class: X.Org Server Extension, version 1.1
(**) AIGLX enabled
(**) Exporting typical set of GLX visuals
(II) Loading extension GLX
(II) LoadModule: «extmod»

(II) Loading /usr/local/lib/xorg/modules/extensions//libextmod.so
(II) Module extmod: vendor=«X.Org Foundation»
compiled for 1.5.3, module version = 1.0.0
Module class: X.Org Server Extension
ABI class: X.Org Server Extension, version 1.1
(II) Loading extension SHAPE

Но по-прежнему, 3D-ускорение чисто программное.

Вроде подключено:
> cat /var/log/Xorg.0.log | grep 'GLX'
(**) Option «AIGLX» «true»
(**) AIGLX enabled
(**) Exporting typical set of GLX visuals
(II) Loading extension GLX
(II) AIGLX: Screen 0 is not DRI capable
(II) AIGLX: Loaded and initialized /usr/local/lib/dri/swrast_dri.so
(II) GLX: Initialized DRISWRAST GL provider for screen 0

Варнинги:
> cat /var/log/Xorg.0.log | grep '(WW)'
(WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(WW) RADEONHD(0): rhdAtomAllocateFbScratch: FW FB scratch area not located at the end of VRAM. Scratch End: 0x84fec VRAM End: 0x10000000
(WW) RADEONHD(0): RHDCSInit: No CS for R600 and up yet.

Ошибки:
> cat /var/log/Xorg.0.log | grep '(EE)'
(WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(EE) RADEONHD(0): RHDHdmiInit: unknown HDMI output type
0
Swappp, #
radeonhd из git? Я где-то месяц назад тоже пытался заставить его работать, но под debian lenny. Особо в логах не ругался, но 3D так и не было. Я так понимаю, что и mesa должна быть из git, причем из ветки r6xx-r7xx-support.
0
Swappp, #
Точнее mesa/drm aka libdrm, но может и этого мало :)
0
iZENfire, #
Всё — из портов.

> pkg_info | grep radeonhd
xf86-video-radeonhd-1.2.4_1 X.Org ati RadeonHD display driver
0
Swappp, #
Поддержки 3д у r600-r700 нету в 1.2.4. Тут надо либо из git брать, либо ждать следующего релиза.
0
selenite, #
Прошло два года, поддержки всё нет.
А была ли она в git?
+1
Swappp, #
Вообще 3д в mesa, по тому да, в самом radeonhd реализации 3д нету :) Но поддержка есть. Сейчас 3д на свободных драйверах работает из коробки:
$ glxinfo
...
direct rendering: Yes
...
OpenGL vendor string: Advanced Micro Devices, Inc.
OpenGL renderer string: Mesa DRI R600 (RV770 9440) 20090101  TCL DRI2
OpenGL version string: 1.5 Mesa 7.7.1

wiki.x.org/wiki/RadeonFeature тут есть интересные таблички, показывающие что из возможностей реализовано.
0
selenite, #
ясно…
habrahabr.ru/qa/5852/ — тут осталось упоминание некоей ошибки («AIGLX..»), нет идей, в какую сторону можно копать дальше?
0
4ndrey, #
Действительно, а mesa и libdrm из git?
0
iZENfire, #
Это из портов.

А DRM-подсистему в ядре буквально неделю назад перелопатили.
+1
fkndfatum, #
Недавно несколько дней промучался с драйверами пытаясь заставить Radeon 9200 нормально через DVI работать. Купил geforce.
0
winkiller, #
R200 через DVI нормально работает из коробки под Ubuntu (с 6.04 точно) и Zenwalk (начиная с 4.5)
–5
Frosty, #
>и политика ati-drivers заставили меня задуматься о переходе к свободному драйверу.

А к переходу на адекватного вендора железа это вас не натолкнуло?
+3
leave, #
Уж не того ли, чей инсталлятор драйвера ничтоже сумняшеся перезаписывает системный glx.so?
0
leave, #
libglx.so, конечно же :)
–2
Frosty, #
А кроме иделогически-феншуйных вглядов… кому от этого становится хуже?

Я не стремлюсь разжечь холивары. Но когда из года в год наблюдаю такую картину: весь прогресс АТИшных драйверов заключается в их открытии, (да и то как то наотъебись сделали: открыли спеки, выложили какие то драйвера, мол ковыряйтесь, студенты, а сами продолжили разработку закрытого драйвера) при этом форумы продолжают попольняться ФАКами по тому, как же заставить все, или хотя бы часть заложеного в железе функционала работать.

С другой стороны барикад злая корпорация nVidia со своими злючими закрытыми драйверами, которые злючно перезатирают системные либы. Я конечно люблю открытый код и всячески стремлюсь к его использованию, но для меня базовая функциональность десктопного компа (да, работающая видеокарта — это в 2009 году есть базовая функциональность) выше идеологической упертости. В то же время
1)драйвер nVidia работает и работает всегда (у меня и всех моих знакомых) и полностью
2)активно разрабатывается поддержка аппаратного ускорения декодирования видео (привет VDPAU), которое уже сейчас можно использовать, работа идет в основном на увеличение поддерживаемых форматов и их вариаций
НЛО прилетело и опубликовало эту надпись здесь
0
Frosty, #
2 года меняю и меняю версии ядра, иксов и чего только еще не вспомнишь, да таки работает и есть не просит. Зато при использовании открытого драйвера ати вам почти всегда могут гарантировать, что все работать не будет, а если и будет, то далеко не из коробки. Был бы хоть какой прогресс в их разработке, но видно, что ранее ATI. а ныне AMD глубоко наплевать на пользователей отличных от вин систем и драйвера делаются для галочки, и это печально.
0
Swappp, #
Открытые спеки на железо, это как раз надежда на то, что это железо будет поддерживаться из коробки. Так происходит например с большинством чипсетов, ATA/SATA/SCSI контроллеров, сетевых чипов и т.п. Для них же в большинстве случаев не приходится ставить драйвера. ATI/AMD сейчас вроде полностью открыли спеки, но делали это порциями и не торопливо. Поддержка R500 уже достаточно не плохая. Информация по ней была открыта раньше. Для R600 и старше спеки по 3д открыли не очень давно, сейчас над ней работают. Хотя конечно проблемы испытывают, в частности из новела ушел один из ведущих разработчиков и прекратил участие в проекте. Вроде произошло это из-за сокращений, кризис…
+1
iZENfire, #
> драйвер nVidia работает и работает всегда (у меня и всех моих знакомых) и полностью

Я лично не совсем уверен в гарантии восстановления графической работы драйвера NVIDIA при переключении из графического режима в текстовую консоль и обратно. Частенько наблюдаются эффекты отказа возвращаться в графический режим и/или глюки оконных приложений при таких переключениях.

С софтовыми драйверами я могу без опаски переключаться из текстового режима в графический и обратно.
0
leave, #
>драйвер nVidia работает и работает всегда (у меня и всех моих знакомых) и полностью

аналогично, с изменением nvidia на amd/ati. в KB: ЛОР под вайном играю спокойно. x1950GT (RV570)

>активно разрабатывается поддержка аппаратного ускорения декодирования видео (привет VDPAU)

здесь да, amd сливает. но скажите, два видеопотока одновременно с аппаратным ускорением уже можно на >8xxx?
+1
4ndrey, #
Нет, я предпочитаю выбирать софт под железо, а не наоборот
0
Memph1s, #
квака летает?(% для меня это актуальнее композитинга ^___^
+1
Memph1s, #
кстати да, спасибо за статью, с ati-drivers у меня большая проблема: при рестарте иксов вешалась система, сегодня попробую(;
+1
4ndrey, #
Да, все прекрасно работает.
games-fps/quake3-1.34_rc3:
1260 frames, 8.8 seconds: 142.4 fps [1024x768]
p.s. Если будут вопросы — пиши, постараюсь помочь!
0
efoxxi, #
интересно, насчёт ноутбучного Radeon Xpress 200M (базируется на X300) всё также плохо?
0
4ndrey, #
в каком смысле плохо?
0
SaveTheRbtz, #
Насколько я знаю мой radeon 1250 хоть и RS690 но он же в новых версиях поддерживаться не будет, а соответственно ускорения в X Server 1.6 мне не увидеть. Спасибо ATi/AMD большое при большое
0
4ndrey, #
да, в линуксе еще остались проблемки с новым железом и ничего не поделаешь, пока вендоры будут ориентироваться на виндовс
0
Swappp, #
RS6xx относится к R500, вроде как у них не должно быть особых проблем с открытыми драйверами. Ускорение же должно быть.
0
reiser, #
Как там с хот-плагом мониторов?
Всвязи с выходом нового ядра придется видимо свой x200m на ноуте переводить на открытый драйвер =((
0
4ndrey, #
хорошо с хотплагом, насколько я знаю, за это отвечает не видео-драйвер, а xorg
0
reiser, #
ну не знаю, на проприетарных атишных драйверах мониторы начинали видеться только после включения их в настройках драйвера
0
4ndrey, #
и какие для этого были настройки?
0
reiser, #
Никакие, просто в настройках дисплеев выбирал подключенный монитор и нажимал «включить» (не уверен, что точно описал, но примерно так)
После сего действия монитор начинал видеться во всех прочих программах.
0
reiser, #
Ух, тормоза на этих опенсорсных драйверах =(
Хоть на старое ядро откатывайся(
0
4ndrey, #
да, мне тоже не понравилось, что fps в два раза падают :(
а зачем назад на старое? может просто пропатчить 2.6.29?
0
reiser, #
да, мне тоже не понравилось, что fps в два раза падают :(

какой там fps… 3D вообще нет, kwin в композит работать отказывается…
а зачем назад на старое?

проприетарных драйверов для моей карты под 29+ не будет =(

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.