Nvidia-HOWTO

Заметки по настройке FrameBuffer и XFree86 для Nvidia видеокарт

[Andy Gorev (gorev@mail333.com)]

Nvidia-HOWTO

Оригинал: http://www.atmsk.ru/viewtopic.php?p=677

Я, абсолютно не претендуя на гуру в этом вопросе, просто предлагаю собрать в этом треде все те многочисленные вопросы и ответы, которые довольно часто возникают в рассылках community@ и sisyphus@. Итак, все что я здесь написал - AFAIK, поэтому дополнения-исправления-уточнения только приветствуются. Ссылки на pipermail я тоже думаю возможны. Начнем пожалуй с консоли. Существует два режима работы (SVGATextMode опустим) - это обычная консоль и фреймбуфер.

В обычной консоли можно использовать шрифты с глифами 8х8 и 8х16 (по умолчанию). Для смены шрифта надо править в файле /etc/sysconfig/i18n параметр SYSFONT, с последующим запуском #setsysfont. Посмотреть, какие вообще есть консольные шрифты можно в пакете console-tools. Установка глифа 8х8 реально увеличивает объем влезающей на экран информации без смены разрешения. И это самый простой способ, если отказаться от фреймбуфера. При этом пропадает лого, термометр и много проблем icon_smile.gif Но остается медленная развертка. И очень многих это не смущает.

При использовании фреймбуфера есть два варианта.

Первый вариант - vesafb. Этот фреймбуфер автоматически вызывается, если вы ставили Мастер. Там такой ползающий термометр при загрузке. А реальный прогресс при этом можно увидеть на 10-й консоли. Отключить этот сплэш, оставив при этом vesafb можно, если убрать параметр ядра fbprogress=/dev/ttyS10. Этот параметр задается в загрузчике. В Мастере, файл /boot/grub/menu.lst Этот файл надо просто исправить и все. LILO нужно переустанавливать при любых изменениях. Инициализация непосредственно vesafb производится опцией ядру vga=788 (в этом случае 800х600х16b). Разрешение изначально задается при инсталляции и прописывается в этот параметр в десятичном значении. Чтобы изменить разрешение, нужно прописать номер нужного режима в этом параметре (можно использовать значения hex). Значения режимов можно посмотреть в файле /usr/share/doc/kernel-doc/fb/vesafb.txt пакета kernel-doc.

Недостатком такого решения является то, что частота вертикальной развертки у вас ВСЕГДА в консоли будет 60 гц.

Дело в том, что vesafb писался еще в конце 90-х годов, когда стандарт VESA VBE 3.0 только зарождался. Описаны были только стандартные режимы VESA 2.0. Теоретически vesafb поддерживает VESA 3.0 и высокие частоты, но у автора небыло тогда железки, поддерживающей свежий стандарт чтобы это проверить. Практически-же этот самый "свежий" и до сих пор актуальный стандарт снял с себя всякую ответственность за резервирование новых режимов, и возложил это на производителей железа.

В нашем случае мы имеем Nvidia с поддержкой VESA 3.0, а значит высокочастотными режимами, которые описаны у платы в BIOS. Загвоздка в том, что этой информации нигде нет. Я боюсь даже что номера режимов могут менятся от чипсета к чипсету.

Поэтому, при использовании vesafb мы получим 60 гц. Это может довольно тяжело смотреться на 15" мониторе в 1024х768.

Второй вариант фреймбуфера - rivafb. Чтобы его использовать, надо убрать опцию ядра 'vga=', и редактировать файл /etc/sysconfig/framebuffer. Его приблизительное содержание может быть таким:

     ENABLE=yes
     MODULE=rivafb
     ARGS='noblink=1'
     MODE=1024x768-70
     TTYS='1 2 3 4 5 6 12'
При этом должен быть установлен пакет fbset.

Этот фреймбуфер поддерживает базу режимов, которые можно посмотреть в /etc/fb.modes и даже создавать самому. Опции модуля передаваемые в

переменной ARGS можно узнать набрав modinfo rivafb. Преимущество этого фреймбуфера в том, что он позволит вам выставить в консоли практически максимально-возможное разрешение и частоту разветки, которые вы захотите. Недостаток в том, что он написан каким-то кулхацкером (со слов Nvidia) с использованием кода XFree => крошит акселирированные драйвера от Nvidia и вносит потенциальную нестабильность в XFree вообще. Многие люди тем не менее продолжают использовать это решение без всяких проблем. Поэтому если вам нужен высокочастотный фреймбуфер, и вы не играете c glx - это то, что вам нужно.

Теперь переходим к иксам.

Тут тоже все двузначно. Существует два сервера для Nvidia-плат. Первый - nv. Поставляется вместе с XFree86 и, по многочисленным отзывам, наиболее стабилен. Так как этот сервер пишет команда XFree, оно и понятно. Если возникают проблемы с glx то надо пробовать этот сервер. Преимущества - стабилен, работает с любым фреймбуфером. Недостатки - не поддерживаются Nvidia фишки, поэтому например не работают OpenGL игры, и отсутствие поддержки GeForce 300 & 400. Конфигурируется просто и изящно:

Driver "nv" в секцию Device файла XF86Config ручками или мнгочисленными конфигураторами от xf86config до XFdrake. Об опциях этого драйвера можно посмотреть [27]тут. Этот вариант подходит тем, кто пользуется Nvidia только для работы. icon_wink.gif Второй сервер - акселирированный сервер от Nvidia с которым работает всё или почти всё. Его обычно стараются заточить на десктоп.

Преимущества очевидны. Недостатки - только недавно Nvidia заявила об "официальной" поддержке Линукса => драйвера вечно сырые и их стабильность меняется от версии к версии; в последних версиях оптимизируется код для самого свежего железа - история в точности как с Детонаторами под виндос; наконец эти драйвера не дружат с rivafb.

Достаточно переключиться в консоль, и обратно в Х-ы, чтобы начать судорожно давить SysRq. Но если не переключаться ... (я знаю таких), тоже вроде работает (но они особо и не играют, тогда зачем такой драйвер).

Теперь об установке. Если вы используете Mandrake или RH - вперед на http://www.nvidia.com там есть все для вас. Останется только разобраться. Если вы пользуетесть Альтом, то надо установить два пакета Nvidia-kernel и NVIDIA_GLX.

Первый должен совпадать по версии с вашим ядром. Содержит он ядерный модуль (предполагаю что-то типа DRI), который воткнется туда после depmod -a и запуска иксов (с соответствующим сервером). Второй - непосредственно сервер для XFree86 и OpenGL библиотеку от Nvidia. После установки надо убедиться что используемый Driver в XF86Config теперь "nvidia", в секции Module убрано Load "dri", а Load "glx" заменено на Load "/usr/X11R6/lib/modules/extensions/libglx.so".

Это минимальная конфигурация, при которой у вас уже будут работать простые вещи типа tuxracer. Для полной работоспособности не хватает симлинка в /usr/X11R6/lib (libGL.so -> libGL.so.1). Про проблему "unset" ядерного модуля читайте в этом форуме Михаила Шигорина. Сервер nvidia содержит множество параметров (среди них есть и полезные) которые можно узнать из /usr/share/doc/NVIDIA_GLX/README. Например как отключить сплэш Nvidia, сконфигурять twinview и TV-out, или переключиться на NVAGP.

Что я и сделал. Никакой особой разницы по сравнению с agpgart пока не почувствовал. Однако может кто-нибудь собрал какую-нибудь информацию на этот счет? Если будете эксперементировать с NVAGP, то надо выкинуть agpgart из /etc/modules. В зависимости от настроек сервера, он будет использовать NVAGP или загрузит модуль agpgart. У меня самого TNT2Pro 16M, так-что по всяким GeForce я могу ошибаться. Но есть место, где можно найти ответы и по таким железкам. Hint: там работает вполне грамотный поиск (http://www.nvnews.net/vbulletin/forumdisplay.php?s=&forumid=14)

Вот пока и все на сегодня, что я хотел сказать.

Оригинал статьи можно натйи по адресу: http://www.opennet.ru/base/X/nvidia_setup.txt.html.

[ опубликовано 28/11/2003 ]

Andy Gorev (gorev@mail333.com) - Nvidia-HOWTO   Версия для печати