Bog BOS: Linux і NVIDIA: драйвери

www.bog.pp.ru

У статті для щасливих користувачів Linux і GPU NVIDIAнаводиться різниця між масовими моделями GPU від NVIDIA,описуються переваги закритих драйверів nvidia від входять до постачанняX Window System драйверів nv, наводяться процедури установки версій Release 40і Release 25, Описуються параметри модуля ядра,
опції драйвера nvidia для X, опції бібліотеки OpenGLNVIDIA, різні способи використання TV-Out (телевізор замість монітора;
запуск другого X сервера; програма nvtv; TwinView),розгін відеокарти за допомогою nvclock і як використовувати датчики на видеоплатеза допомогою rivatv.

NVIDIA versus ATI

Чому GPU від NVIDIA? Тому що залишилося всього 2 компанії, що виробляютьGPU споживчого рівня (тобто дешеві) з нормальною швидкістю 3D операцій.Від графконтроллеров ATI я відмовився після 2 років безплідних очікувань працездатногодрайвера OpenGL (після чого фірма мило заявила, що підтримувати такі старі чіпи вона небуде і скоро випустить драйвери для нових графконтроллеров, почекайте трохи ;).

Моделі

Різницю між серіями GPU від NVIDIA найлегше дізнатися на її
російському офіційному сайті

На описі і тестуванні конкретних моделей відеоплат спеціалізується сайт
IXBT.

У мене під рукою виявилася ASUS V7700PRO/T/32M/PAL/R,про яку можна розповісти наступне (MB на чіпсеті Intel 845E, P4):

Драйвери для NVIDIA GPU в Linux

Вхідний до складу XFree86 4.2.0 (Red Hat Linux 8.0, штатний ядро ​​2.4.18-14) драйвер nv працює з GeForce як із звичайним SVGA, тобто немає підтримки 3D і виведення відео.До того ж у нього проблеми з дозволом 1600×1200 і вище.

Компанія NVIDIA випускає власний драйвер nvidia (XFree86 4.0.1 і вище),підтримуючийапаратно OpenGL, XVideo та інші корисні можливості. На жаль, він поставляєтьсятільки в двійковому вигляді, що сильно ускладнює його використання.Драйвер підтримує будь-яку відеокарту (GPU) або інтегроване графічнеядро (IGP), що випускаються фірмою NVIDIA, і забезпечує прискорення 2D операційі OpenGL.

Драйвер складається з 2 частин: модуль ядра NVIDIA_kernel(NVdriver або nvidia.o в новій версії; більше 1 МБ закритого коду працює в режимі ядра!)і пакет NVIDIA_GLX (драйвер XFree86 і бібліотеки OpenGL). Версії пакетів повинні збігатися.Модуль ядра жорстко прив’язаний до версії ядра Linux і д.б. переустановлений (пересобран)при зміні чи складанні ядра. NVIDIA постачає пакети у формі. Rpm,. Srpm і. Tar.gz.Я рекомендую брати NVIDIA_kernel у вигляді. Srpm і збирати заново його самостійнобезпосередньо перед установкою, а NVIDIA_GLX брати у вигляді готового RPM(Все одно SRPM і. Tar.gz не містять жодного вихідного тексту).Передбачається, що завантаження системи відбувається в текстовому режимі(Id: 3: initdefault: в / etc / inittab), інакше у вас будуть великі проблеми при невдалій установці.Перед установкою нової версії (або при зміні ядра) треба самостійновидалити обидва пакети (-U може спрацювати неправильно).

Попередня підготовка для побудови свого ядра: мається пакет kernel-source-2.4.18-14,для якого було зроблено (може бути не всі ці дії є обов’язковими, але як говориться -кашу маслом не зіпсуєш 😉

  1. cd /usr/src/linux-2.4
  2. make distclean (може досить make mrproper?)
  3. make menuconfig (завантажити потрібний варіант з директорії config і вийти зі збереженням)
  4. make dep
  5. make bzImage (warning: kernel is too big for standalone boot from floppy,але я і не збираюся його встановлювати, але якщо ядро ​​не зібрати, то модуль потім не завантажується)
  6. make modules (не компілюється drivers / addon / cipe, прибрав її і поміняв drivers / addon / Makefile)

Установка версії 1.0-4191 (release 40)

Версія 1.0-4191 (release 40) має безліч поліпшень в порівнянніз попередньою версією: OpenGL 1.4 замість 1.3, GLX 1.3 замість 1.2, підтримка AGP 3.0 (8x),замість XFree86 XAA використовується власна архітектура акселератора 2D,підтримка декількох окремих екранів на GPU з TwinView (GeForce2 MX і будь GeForce4),перестав роняти додатки з плаваючою арифметикою. Однак відгуки на неї різко негативні.Одночасно з невеликим прискоренням 3D операцій (glxgears на 15%) різко сповільнилися2D операції. Їх можна дещо прискорити, якщо встановити одноколірний фон в Gnomeі відключити в Nautilus опцію “nautilus draw icons on the desktop option”, однак уповільненнящодо попередньої версії залишається двократним. Рекомендується також запуститинебудь додаток libGL (наприклад, glxinfo ;). При спробі включитиакселератор 2D (Option “RenderAccel” в / etc/X11/XF86Config) X сервер зациклюєтьсячерез декілька хвилин роботи.

Процедура установки аналогічна попередньої версії, тільки модуль ядраперейменований з NVdriver в nvidia.o

Установка 1.0-2960 та 1.0-3123 (release 25)

У версії 1.0-3123 (release 25) додана підтримка GeForce4 MX, GeForce4 Ti 4800 SE і GeForce4 4200.

Процедура установки

Параметри модуля ядра

modinfo NVdriver показує, що при завантаженні модуля можна задаватинаступні параметри (я привожу не весь список, опис в os-registry.c):

Параметри розділу Device XF86Config

Опції задаються в секції Device файлу / etc/X11/XF86Config (або / etc/X11/XF86Config-4для старих дистрибутивів), я наводжу тільки опції, специфічні для драйвера nvidia (і то не всі -наприклад, я не використовую лаптопов і нотебуков; див. також XF86Config (5x)):

Опції OpenGL

Опції OpenGL задаються установкою змінних оточення перед запускомприкладної пріграмми

TV-out. Спосіб перший – без монітора

Найпростіший спосіб вивести зображення на телевізор – відключити монітор!При завантаженні комп’ютера відеоплата виявивши, що телевізор є єдиним пристроєм,підключеним до неї, починає виводити зображення (прямо з першого, повідомлення BIOS) на TV-Out.

При підключенні телевізора до комп’ютера необхідно їх попередньо знеструмити(Висмикнути вилки з розеток!) І вийняти антенний кабель (і не встромляти його назад, поки не витягніть другийтелевізор і комп’ютер!).

Якщо вам достатньо для роботи а / ц режиму, то далі можете не читати,все вже зроблено. Для запуску X Window System на телевізорі необхідно доповнити файл / etc/X11/XF86Config(Обов’язково після стандартного Layout!)

Section "ServerLayout"
        Identifier      "LayoutTV"
        Screen          "ScreenTV"
        InputDevice     "Mouse0" "CorePointer"
        InputDevice     "Mouse1" "SendCoreEvents"
        InputDevice     "Keyboard0" "CoreKeyboard"
EndSection# VendorName і ModelName підставляйте свої (ні на що не впливають)
Section "Monitor"
        Identifier      "MonitorTV"
        VendorName      "Philips"
        ModelName       "21PT166B/60"
        HorizSync       30.0 - 50.0
        VertRefresh     50.0 - 60.0
EndSection# Device повинен відповідати Identifier в секції Device (опис див вище)
Section "Screen"
        Identifier "ScreenTV"
        Device     "NVIDIA GeForce 2 GTS (generic)"
        Monitor    "MonitorTV"
        DefaultDepth    24
        SubSection "Display"
                Depth   24# Для телевізійного кодувальника Bt871, Connexant 25871, GeForce4 (?)# (Тип кодувальника можна дізнатися з файлу / var/log/XFree86.0.log в рядку "Detected TV Encoder")# Можна задати режим "1024x768"
                Modes   "800x600" "640x480"
        EndSubSection# Для адаптованих під Росію телевізорів саме PAL-B,# Хоча на моїй платі задається джампером NTSC / PAL (на всяк випадок 😉
	Option  "TVStandard" "PAL-B"# "SVIDEO" або "COMPOSITE"
        Option  "TVOutFormat" "SVIDEO"
        Option  "ConnectedMonitor" "TV"
EndSection

Тепер можна запускати X і працювати як на звичайному моніторі,хоча і без задоволення (фільми виглядають набагато краще, ніж на моніторі):

startx -- -layout LayoutTv

TV-out. Спосіб другий – два X

Редагувати тексти, дивлячись на екран телевізора – неможливо, перезавантажуватисякожен раз, коли хочеться подивитися фільм – утомливо. Тому пропонуєтьсязапустити два X сервера – кожен для свого пристрою (нагадую, що мова йде проGeForce 2, який не вміє виводити 2 незалежних зображення).Конфігурація XF86Config збігається з описаної в попередньому розділі.Перший X сервер запускається як звичайно (я запускаю його командою startx).Другий X сервер запускається командою (використовується ключ-ac, тому що я не знаю іншого способузняти захист при такій формі запуску)

X -ac -layout LayoutTV :1

Тепер у нас “крутяться” відразу два X сервера із загальною клавіатурою і мишкою.Перемикання між ними виробляються по натисненню Ctrl-Alt-F7 і Ctrl-Alt-F8 (передбачаєтьсянаявність 6 віртуальних а / ц консолей, інакше клавіші будуть іншими). Закривається серверзвичайним поєднанням Ctrl-Alt-Backspace, головне не переплутати, якого сервера в моментнатискання належить клавіатура.

Відразу після запуску “поточним” є другою сервер – йому належить клавіатура,на його екран (телевізор) виводиться зображення. Перемикаємося назад на перший сервер (Ctrl-Alt-F7) ізапускаємо, наприклад, mplayer

DISPLAY=:1 mplayer -vo xv dvd://1

Поки він розкручує диск, перемикається на другий сервер (Ctrl-Alt-F8).По закінченню перегляду втрой сервер зупиняти необов’язково – він нікому не заважає.

TV-out. Спосіб третій – nvtv

Подолати залишився почуття незадоволення допоможе програма nvtv.Вона дозволяє гнучко налаштовувати параметри виводу (аж до прямого доступу до всіх регістрахтелевізійних кодувальників і CRTC NVIDIA!) і виводити одночасно на монітор і телевізордля відеоплат без TwinView (на жаль, однакове зображення). Не працює з GeForce3 і вище.Включено до складу xine.

Установка nvtv 0.4.3:

Для доступу до регістрів програмі nvtv потрібні або праваroot (їх можна забезпечити за допомогою механізму suid або допоміжного демона nvtvd),або працюючий драйвер NVIDIA (забезпечується сумісність з версіями не старше 3123).Є чутки, що nvtv працює з GeForce4, якщо той ініціалізованим першим фірмовим драйвером.Оригінальний текст програми доступу до внутрішніх структур драйвера NVIDIA(Через / dev / nvidia *) представляє самостійний інтерес. При використаннідрайвер NVIDIA програму nvtv необхідно запускати після запуску X з ключем-N.

При запуску в графічному режимі nvtv надає великі(Я б навіть сказав, що надмірно великі) можливості по налаштуванню формату виводу.Я рекомендую підглянути список режимів (закладка Mode, ключі-r і-s), доступних вашому ТВ кодіровщік,а в подальшому використовувати текстовий режим. Список режимів залежить від режиму кольоровості,наприклад, мій chrontel 7007 для SECAM видає порожній список режимів.Включення виведення на телевізор одновремено з виводом на монітор і перехід до дозволу 768×576:

nvtv -N -X -t -r 768,576 -s Large -S PAL -C SVHS

Після цього зображення виводитиметься одночасно на телевізор і монітор.Монітор може не підтримувати вбрання дозвіл і режим роботи.У цьому випадку спробуйте інший режим. Наприклад, мій монітор не любить режими800x600xLarge (обрізає картинку), 768x576xSmall (зривається кадр),640x480xLarge (рекомендований для NTSC DVD 4:3 – мельтешение на екрані, Small – нормально).Деякі режими неможливо дивитися ні на моніторі, ні на телевізорі(Для мене такий режим – 800×450). Для нестандартних дозволів рекомендуєтьсязавести відповідний Modeline в секції Monitor (основний монітор, не MonitorTV)і включити його в список Modes відповідної підсекції Display, наприклад(Nvtv поміняє частоти синхронізації при використанні ключа-t)

  Modeline  "pal"  50.00  768 832 856 1000  576 590 595 630  -hsync -vsync
...
  Modes "1600x1200" "pal"

Віртуальне дозвіл залишиться колишнім (у мене 1600×1200),так що вікно з фільмом доводиться шукати на цьому безкрайньому полі і центрувати,а також боротися із зайвою завзяттям деяких програм до масштабуванняі забезпеченню “правильного” співвідношення сторін (mplayer-noaspect).Сподіваюся, що це вміння прийде до вас з досвідом, описати це неможливо.Якщо ваш телевізор має можливістьдля перегляду широкоекранних фільмів, то краще використовувати її і виводитив режимі 4:3, ніж використовувати дискретне масштабирование плейєра і режимвиведення типу 800×450.

Вимкнення виведення на телевізор і повернення вихідного дозволу екрану:

nvtv -N -m -X -r 1600,1200

nvtv дозволяє задавати в текстовому режимі безліч параметрів за допомогоюключа – set (повний список і інтервал значень видається по nvtv-h, використовуваний ТВ кодіровщікможе підтримувати не всі параметри):

Шляхом проб і помилок можна підібрати режим, в якому і фільм буде чудововиглядати на телевізійному екрані (схоже, що деякі фільми спеціально кодуютьтак, щоб їх було неможливо дивитися на комп’ютерному моніторі – наприклад, випадковимчином змінюють порядок полів) і меню плеєра буде читаемо на моніторі.

TV-out. Спосіб четвертий – TwinView

GPU GeForce2 MX і GeForce4 мають два CRTC і можуть виводити 2 незалежнихзображення (з різним дозволом і частотою) на монітор і телевізор. Налаштуваннязадаються за допомогою TwinView і не повинні викликати труднощів у простому випадку(Один монітор і один телевізор).

DPMS не працює на другому моніторі (ТБ) – може це й правильно?.

nvclock

Утиліта nvclock дозволяє змінити частоту роботи GPU і пам’яті.

Установка:

Утиліта не зберігає змінені значення частот в NVRAM, так щоїї необхідно викликати кожного разу після запуску X Windows (наприклад, помістити в. xinitrc).Якщо запускати її до X Windows, то потрібні права root, а модуль nvidia може скинути зміни.Ключі запуску:

Не всі значення частоти пам’яті можливі, наприклад у мене вони встановлюються з кроком 7 МГц(Утиліта повідомляє реально встановлену частоту).Утиліта має свої уявлення про максимально можливих частотах.Їх можна подолати за допомогою ключа-f, але я не раджу.Рекомендується поступово підвищувати частоту GPU (поки комп’ютер не зависне ;),потім перезавантажитися і поступово підвищувати частоту пам’яті (поки знову независне ;). Не рекомендується працювати постійно на максимально можливій частоті -це сильно скорочує час життя відеоплати і може призвести до зависаньпри підвищенні температури за бортом в самий невідповідний момент.

У мене вийшло підняти частоти з 200/401 до 228/451 МГц(При цьому використовуються ключі-n 228-m 449). glxgears прискорилася з 1225 fps(87 fps при 1600×1200) до 1425 fps (101 fps при 1600×1200).x11perf (-all вимагає 3 годин роботи, запускати на тільки що завантаженому комп’ютері,необхідно вимкнути screensaver,відключити запуск updatedb та інших програм, звільнити лівий верхній кут 800×800)виразно показує які операції виконуються CPU (не прискорюються зовсім),GPU (прискорюються в 228/200 рази). Деякі операції поводяться дивно.Наприклад, putimagexy і getimagexy тимчасово блокують комп’ютер.

Сенсори і TV-In

Для відеокарт з апаратним контролем можливо витягтизначення температури і частоти обертання вентилятора за допомогою пакета rivatv.Основне призначення пакету – відеозахват, але в цій якості я його не пробував.(Про відео захопленні за допомогою AverMedia TVPhone98 або аналогічних карт на Bt848/878дивіться мою статтю).

Установка:

Параметри модуля rivatv

При запуску sensors-detect помилково посилається на пакет rivatv як i2c-riva(У вихідних текстах дійсно є i2c-riva.c, але при збірці він включається в rivatv.o)

  Use driver `i2c-riva' for device 01:00.0: GeForce2 GTS
  Load `i2c-riva' (say NO if built into your kernel)? (YES/no)

Далі прямуєте всім вказівкам, які видає sensors-detect.Приклад моєї боротьби (боротьби, тому що підтримка I2C реалізована в Linux огидно)з датчиками дивіться в описі установки Red Hat 8.0.

Якщо все зроблено правильно, то програма sensors серед іншої інформації видає(Пристрої з 1-50 по 1-57 – це нерозпізнані інформація: чи то настройка самої відеокарти,чи то настройка зовнішнього чіпа TV-Out Chrontel 7007)

eeprom-i2c-1-50
Adapter: NVIDIA display adapter bus 0
Algorithm: Bit-shift algorithm
...
eeprom-i2c-1-57
Adapter: NVIDIA display adapter bus 0
Algorithm: Bit-shift algorithm
w83781d-i2c-0-2d
Adapter: NVIDIA display adapter bus 1
Algorithm: Bit-shift algorithm
VCore 1:   +2.04 V  (min =  +0.00 V, max =  +0.00 V)       ALARM
VCore 2:   +1.52 V  (min =  +0.00 V, max =  +0.00 V)       ALARM
+3.3V:     +3.34 V  (min =  +2.97 V, max =  +3.63 V)
+5V:       +4.89 V  (min =  +4.50 V, max =  +5.48 V)
+12V:     +11.97 V  (min = +10.79 V, max = +13.11 V)
-12V:      -0.14 V  (min = -13.18 V, max = -10.78 V)       ALARM
-5V:       -0.06 V  (min =  -5.48 V, max =  -4.50 V)       ALARM
fan1:     7670 RPM  (min = 3000 RPM, div = 2)
fan2:        0 RPM  (min = 3000 RPM, div = 2)              ALARM
fan3:        0 RPM  (min = 3000 RPM, div = 2)              ALARM
temp1:       +53°C  (limit =  +60°C, hysteresis =  +50°C)
temp2:     +53.0°C  (limit =  +60°C, hysteresis =  +50°C)
temp3:     +42.5°C  (limit =  +60°C, hysteresis =  +50°C)
vid:      +0.000 V

Посилання

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*