Для этого вам понадобиться:
- обновиться до 7.2, 7-stable или 8-current
- удалить x11/nvidia-driver
- применить libdrm.diff и обновить порт graphics/libdrm
- применить xf86-video-nouveau.diff и обновить порт x11-drivers/xf86-video-nouveau
- применить drm-nouveau-062309.patch и пересобрать ядерные модули drm.ko и nouveau.ko
Код: Выделить всё
# pkg_delete -x nvidia-driver
# cd /usr/ports/graphics/libdrm
# fetch -qo- ftp://ftp.lissyara.su/users/Guest/libdrm.diff | patch -sp2
# make all deinstall install clean
# cd /usr/ports/x11-drivers/xf86-video-nouveau
# fetch -qo- ftp://ftp.lissyara.su/users/Guest/xf86-video-nouveau.diff | patch -sp2
# make all deinstall install clean
# cd /usr/src/sys
# fetch -qo- http://people.freebsd.org/~rnoland/drm-nouveau-032109.patch | patch -sp0
# cd modules/drm
# make depend all install
Примечания для тех, кто использует DRM:
- перезапуск Xserver'а не работает
- если у вас приложения медленно отрисовываются и/или не работает Xvideo, то попробуйте включить композитный менеджер, такой как x11-wm/xcompmgr
- если включение композитного менеджера приводит к зависанию Xserver'а и не работает переключение на консоль по Ctrl+Alt+F1, то попробуйте отключить MSI (Message Signaled Interrupts) добавив в загрузчике hw.drm.msi=0 или перед загрузкой модуля сделайте
Код: Выделить всё
# kenv hw.drm.msi=0
- отсутствие модуля приведет к автоматическому включение опций в xorg.conf: NoAccel и ShadowFB
- EXAPixmaps использует DRI2, но из-за отсутствия TTM рендериг картинки происходит намного медленнее
После тестирования не забывайте сообщать о своих удачах/неудачах в рассылку freebsd-x11@ ответом на тему [PREVIEW] Nouveau on FreeBSD (Take 2).
Отладка:
Увеличить "словесность" DRM можно сборкой/загрузкой модулей собранных с DRM_DEBUG, т.е.
Код: Выделить всё
# cd /usr/src/sys/modules/drm
# echo "CFLAGS+= -DDRM_DEBUG" >>Makefile.inc
# make depend all install
Код: Выделить всё
[drm:pid1357:nouveau_gpuobj_new] ch1 size=24 align=16 flags=0x00000006
[drm:pid1357:nouveau_gpuobj_new] gpuobj 0xffffff0005bf2100
[drm:pid1357:nouveau_gpuobj_new] private heap
[drm:pid1357:nouveau_gpuobj_ref_add] ch1 h=0x8003d001 gpuobj=0xffffff0005bf2100
[drm:pid1357:nouveau_ramht_hash_handle] ch1 handle=0x8003d001
[drm:pid1357:nouveau_ramht_hash_handle] hash=0x00000fc8
[drm:pid1357:nouveau_ramht_insert] insert ch1 0x00000fc8: h=0x8003d001, c=0x00000e00
[drm:pid1357:nouveau_gpuobj_ref_add] ch1 h=0x8003d002 gpuobj=0xffffff0005bf2100
[drm:pid1357:nouveau_ramht_hash_handle] ch1 handle=0x8003d002
[drm:pid1357:nouveau_ramht_hash_handle] hash=0x00000fd0
[drm:pid1357:nouveau_ramht_insert] insert ch1 0x00000fd0: h=0x8003d002, c=0x00000e00