|
Bog BOS: Linux и NVIDIA: драйверы, TV-Out, датчики, TV-In, разгон |
Последние изменения: |
Последнее изменение файла: 2008.05.28
Скопировано с www.bog.pp.ru: 2024.11.03
В статье для счастливых пользователей Linux и GPU NVIDIA
Почему GPU от NVIDIA? Потому что осталось всего 2 компании, производящих GPU потребительского уровня (т.е. дешевые) с нормальной скоростью 3D операций. От графконтроллеров ATI я отказался после 2 лет бесплодных ожиданий работоспособного драйвера OpenGL (после чего фирма мило заявила, что поддерживать такие старые чипы она не будет и скоро выпустит драйверы для новых графконтроллеров, подождите немного ;).
Разницу между сериями GPU от NVIDIA легче всего узнать на ее российском официальном сайте
Для вывода на TV-Out производители видеоплат могут использовать следующие чипы (БД, собранная пользователями, производители могут использовать на видеоплатах с одним названием различные чипы TV-Out!):
На описании и тестировании конкретных моделей видеоплат специализируется сайт IXBT.
У меня под рукой оказалась ASUS V7700PRO/T/32M/PAL/R (ASUS V9280/TD/P/64M/A), о которой можно рассказать следующее (MB на чипсете Intel 845E, P4):
01:00.0 VGA compatible controller: nVidia Corporation NV15 [GeForce2 GTS; PCI ID 0x0150] (rev a4) (prog-if 00 [VGA]) Subsystem: Asustek Computer, Inc.: Unknown device 4026 Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- Status: Cap+ 66Mhz+ UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- Latency: 248 (1250ns min, 250ns max) Interrupt: pin A routed to IRQ 10 Region 0: Memory at dc000000 (32-bit, non-prefetchable) [size=16M] Region 1: Memory at d0000000 (32-bit, prefetchable) [size=128M] Expansion ROM at <unassigned> [disabled] [size=64K] Capabilities: [60] Power Management version 1 Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-) Status: D0 PME-Enable- DSel=0 DScale=0 PME- Capabilities: [44] AGP version 2.0 Status: RQ=31 SBA- 64bit- FW+ Rate=x1,x2,x4 Command: RQ=31 SBA- AGP+ 64bit- FW+ Rate=x4и
01:00.0 VGA compatible controller: nVidia Corporation NV28 [GeForce4 Ti 4200 AGP 8x] (rev a1) (prog-if 00 [VGA]) Subsystem: Asustek Computer, Inc.: Unknown device 807b Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- Status: Cap+ 66Mhz+ UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- Latency: 248 (1250ns min, 250ns max) Interrupt: pin A routed to IRQ 10 Region 0: Memory at d8000000 (32-bit, non-prefetchable) [size=16M] Region 1: Memory at d4000000 (32-bit, prefetchable) [size=64M] Expansion ROM at <unassigned> [disabled] [size=128K] Capabilities: [60] Power Management version 2 Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-) Status: D0 PME-Enable- DSel=0 DScale=0 PME- Capabilities: [44] AGP version 3.0 Status: RQ=31 SBA+ 64bit- FW+ Rate=x1,x2,x4 Command: RQ=31 SBA- AGP+ 64bit- FW+ Rate=x4и (на самом деле карточка не GT! или всё же GT замаскировали?)
01:00.0 VGA compatible controller: nVidia Corporation NV43 [GeForce 6600 GT] (rev a2) (prog-if 00 [VGA]) Subsystem: LeadTek Research Inc.: Unknown device 2a28 Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- Status: Cap+ 66Mhz+ UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- Latency: 248 (1250ns min, 250ns max) Interrupt: pin A routed to IRQ 5 Region 0: Memory at e0000000 (32-bit, non-prefetchable) [size=16M] Region 1: Memory at d0000000 (32-bit, prefetchable) [size=256M] Region 2: Memory at e1000000 (32-bit, non-prefetchable) [size=16M] Capabilities: [60] Power Management version 2 Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-) Status: D0 PME-Enable- DSel=0 DScale=0 PME- Capabilities: [44] AGP version 3.0 Status: RQ=32 Iso- ArqSz=0 Cal=0 SBA+ ITACoh- GART64- HTrans- 64bit- FW+ AGP3- Rate=x1,x2,x4 Command: RQ=32 ArqSz=0 Cal=0 SBA+ AGP+ GART64- 64bit- FW+ Rate=x4
VideoRAM: 32768 kBytes Detected TV Encoder: Chrontel 7007 Display 0: maximum pixel clock at 32 bpp: 300 MHz Monitor0: Using hsync range of 30.00-97.00 kHz Monitor0: Using vrefresh range of 50.00-180.00 Hz Default mode "1600x1200": 202.5 MHz, 93.8 kHz, 75.0 Hz Virtual screen size determined to be 1600 x 1200 DPI set to (75, 75) AGP 4X successfully initialized Setting mode "1600x1200" Using XFree86 Acceleration Architecture (XAA)и
NVIDIA GPU detected as: GeForce4 Ti 4200 with AGP8X VideoBIOS: 04.28.20.10.00 Interlaced video modes are supported on this GPU Detected AGP rate: 4X VideoRAM: 65536 kBytes Detected TV Encoder: Uknown Philips (но мы то знаем, что это SAA7104) Display 0: maximum pixel clock at 32 bpp: 350 MHz Monitor0: Using hsync range of 30.00-97.00 kHz Monitor0: Using vrefresh range of 50.00-180.00 Hz Mode "1600x1200": 202.5 MHz, 96.6 kHz, 78.5 Hz Virtual screen size determined to be 1600 x 1200 DPI set to (75, 75) AGP 4X successfully initialized Setting mode "1600x1200" Using XFree86 Acceleration Architecture (XAA)и
NVIDIA dlloader X Driver 1.0-7167 Fri Feb 25 09:09:26 PST 2005 NVIDIA GPU detected as: GeForce FX 5200 VideoBIOS: 04.34.20.56.00 Interlaced video modes are supported on this GPU Detected AGP rate: 4X VideoRAM: 131072 kBytes Using ConnectedMonitor string "CRT-0" Display device CRT-0: maximum pixel clock at 8 bpp: 400 MHz Display device CRT-0: maximum pixel clock at 16 bpp: 400 MHz Display device CRT-0: maximum pixel clock at 32 bpp: 400 MHz MonitorSamsung: Using hsync range of 30.00-121.00 kHz MonitorSamsung: Using vrefresh range of 50.00-185.00 Hz Clock range: 12.00 to 400.00 MHz Mode "2048x1536": 340.5 MHz, 120.2 kHz, 75.0 Hz Virtual screen size determined to be 2048 x 1536 DPI set to (75, 75) Setting mode "2048x1536" NVIDIA 3D Acceleration Architecture Initialized Using the NVIDIA 2D acceleration architectureи
NVIDIA dlloader X Driver 1.0-7174 Tue Mar 22 06:46:47 PST 2005 NVIDIA GPU detected as: GeForce 6600 VideoBIOS: 05.43.02.57.00 Interlaced video modes are supported on this GPU Detected AGP rate: 4X VideoRAM: 131072 kBytes Using ConnectedMonitor string "CRT-1" Display device CRT-1: maximum pixel clock at 8 bpp: 400 MHz Display device CRT-1: maximum pixel clock at 16 bpp: 400 MHz Display device CRT-1: maximum pixel clock at 32 bpp: 400 MHz MonitorSamsung: Using hsync range of 30.00-121.00 kHz MonitorSamsung: Using vrefresh range of 50.00-185.00 Hz Clock range: 12.00 to 400.00 MHz Mode "2048x1536": 340.5 MHz, 120.2 kHz, 75.0 Hz Virtual screen size determined to be 2048 x 1536 Display dimensions: (400, 300) mm DPI set to (130, 130) Setting mode "2048x1536" Using ConnectedMonitor string "DFP-0" The user specified HorizSync "30.000-97.000" has been adjusted to "31.000-64.000" (the intersection with EDID-specified HorizSync "31.000-64.000") MonitorProjector: Using hsync range of 31.00-64.00 kHz MonitorProjector: Using vrefresh range of 50.00-100.00 Hz Clock range: 12.00 to 400.00 MHz Mode "ATSC-720-60p": 74.2 MHz, 45.1 kHz, 60.0 Hz Virtual screen size determined to be 1280 x 720 DPI set to (75, 75) Setting mode "ATSC-720-60p"
Fast Writes: Supported SBA: Not Supported (ASUS V9280 TD - Supported) AGP Rates: 4x 2x 1x
Host Bridge: Intel i845 Fast Writes: Supported SBA: Supported AGP Rates: 4x 2x 1x (странно - я думал, что i845 поддерживает только 4x)
Status: Enabled Driver: NVIDIA (или AGPGART, в зависимости от настройки драйвера) AGP Rate: 4x Fast Writes: Enabled SBA: Disabled (ASUS V9280 TD - Enabled, разницы не заметил)
Model: GeForce2 GTS (ASUS V9280 TD - NV28, GeForce4 Ti 4200 with AGP8X) IRQ: 10 (pin A routed to IRQ 10, пересекается с Intel 82801DB USB (Hub #1) и 82801DB ICH4 IDE) Video BIOS: 03.15.00.12 (ASUS V9280 TD - 04.28.20.10.00) Card Type: AGP
GPU speed: 199.656 MHz -- Memory info -- Amount: 32 MB Type: 128 bit DDR Speed: 400.904 MHzи
GPU speed: 251.999 MHz -- Memory info -- Amount: 64 MB Type: 128 bit DDR Speed: 405.000 MHz (на самом деле 512 МГц)
Входящий в состав XFree86/X.org драйвер nv работает с GeForce как с обычным SVGA, т.е. нет поддержки 3D и вывода видео. К тому же у него проблемы с разрешением 1600x1200 и выше.
Компания NVIDIA выпускает собственный драйвер nvidia (XFree86 4.0.1 и выше, X.org 6.7 и выше), поддерживающий аппаратно OpenGL 2.0.0, GLX 1.3, XVideo, X-Video Motion Compensation и прочие полезные возможности. К сожалению, он поставляется только в двоичном виде, что сильно осложняет его использование (в исходном виде поставляется переходник между ядром и драйвером; откомпилированные версии переходника для некоторых дистрибутивов входят в поставку, иначе его необходимо откомпилировать во время установки; в любом случае модуль ядра линкуется "на месте" так что необходимые инструменты и заголовки должны быть установлены). Драйвер поддерживает любую видеокарту (GPU) или интегрированное графическое ядро (IGP), выпускаемые фирмой NVIDIA, и обеспечивает ускорение 2D операций и OpenGL.
Поддержки ACPI нет (прощай STR, aka ACPI S3), а в новых Linux системах APM отключён.
Начиная с версии 1.0-4349 драйвер поставляется с собственной программой установки (nvidia-installer) в виде самораспаковывающегося sh-архива (atrpms предлагает в виде rpm, но я не пробовал). Для FC5 необходимо иметь работающее обновлённое ядро (ядро из поставки не загружает не-GPL модули), пакеты kernel-[smp-]devel, xorg-x11-server-sdk, pkgconfig и отключить SELinux (или настроить его). Перед установкой драйверов необходимо перевести систему с уровня 5 (с использованием X Window System) на уровень 3 (без использования X Window System):
init 3
Запустить процедуру установки (имеет ключи --help и --advanced-options; в примере я привожу ключи, пригодившиеся мне):
sh NVIDIA-Linux-x86-1.0-7667-pkg1.run --expert
Использование ключа --expert приводит к тому, что установщик предупредительно спрашивает что куда поставить и создаёт отчёт в файле /var/log/nvidia-installer.log. Если вкратце, то он сохраняет старые версии библиотек libGL, libGLcore и libglx, компилирует интерфейс модуля ядра, собирает и устанавливает модуль ядра (/lib/modules/2.6.12-1.1372_FC3/kernel/drivers/video/nvidia.ko - 5MB!), устанавливает библиотеки libGL, libGLcore, libnvidia-tls, libXvMCNVIDIA и libglx, устанавливает X модуль nvidia_drv, /usr/include/GL/, nvidia-settings-user-guide.txt, /usr/share/doc/NVIDIA_GLX-1.0/README, /usr/bin/nvidia-settings, /usr/bin/nvidia-installer, создаёт устройства nvidiactl и пр. (с учётом наличия devfs или udev), запускает /sbin/ldconfig и "/sbin/depmod -aq".
Теперь необходимо отредактировать /etc/X11/xorg.conf: заменить драйвер nv на nvidia; убрать загрузку модулей dri и GLcore, добавить загрузку модуля glx.
Возвращаем систему на уровень 5:
init 5
Если всё хорошо (при загрузке модуля появляется каталог /proc/driver/nvidia/, X Window System запускается, glxgears показывает разумные числа, в tuxracer можно играть, glxinfo, xvinfo, /var/log/Xorg.0.log), то переходим к настройке (рекомендую начать с gtf и только потом переходить к xvidtune).
Драйвер не прописывает карту в /proc/mtrr, а восход солнца вручную не приносит обещанного счастья (адрес из журнала X):
reg00: base=0x00000000 ( 0MB), size= 512MB: write-back, count=1 echo "base=0xd0000000 size=0x8000000 type=write-combining" >| /proc/mtrr reg00: base=0x00000000 ( 0MB), size= 512MB: write-back, count=1 reg01: base=0xd0000000 (3328MB), size= 128MB: write-combining, count=1
Установщик позволяет удалять установленные файлы (с восстановлением предыдущих библиотек) и обновлять драйвер (необходим доступ в Интернет).
После каждого обновления ядра драйвер необходимо переустановить (установщик имеет ключ для сборки модуля под новое неработающее пока ядро).
Драйвер состоит из 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.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
alias char-major-195 nvidia install nvidia insmod -f nvidia # параметры по вкусу
В версии 4349 скорость 2Д операций вернулась почти к уровню 3123 (но не совсем). К сожалению, при этом скорость 3Д также вернулась к уровню драйвера 3123. RenderAccel включать нельзя по-прежнему. Вместо RPM используется собственная программа установки (полная справка выдается при запуске с ключем -А), которая молча "сносит" предыдущие библиотеки libGL*. Если у вас GeForce FX, нужен OpenGL 1.4 или вы поставили Red Hat Linux 9 с новой библиотекой работы с нитями, то без драйвера 4349 вам не обойтись. Остальным можно подождать следующей версии и оставить версию 3123.
В версии 1.0-3123 (release 25) добавлена поддержка GeForce4 MX, GeForce4 Ti 4800 SE и GeForce4 4200.
Процедура установки
alias char-major-195 NVdriver install nvidia insmod -f NVdriver # параметры модуля по вкусу
Fast Writes: Supported SBA: Not Supported AGP Rates: 4x 2x 1x Registers: 0x1f000017:0x1f000114
Host Bridge: Intel i845 Fast Writes: Supported SBA: Supported AGP Rates: 4x 2x 1x Registers: 0x1f000217:0x00000114
Status: Enabled Driver: AGPGART AGP Rate: 4x Fast Writes: Enabled SBA: Disabled
Model: GeForce2 GTS IRQ: 10 Video BIOS: 03.15.00.12.00 Card Type: AGP
NVRM version: NVIDIA Linux x86 NVdriver Kernel Module 1.0-3123 Tue Aug 27 15:56:48 PDT 2002 GCC version: gcc version 3.2 20020903 (Red Hat Linux 8.0 3.2-7)
... 6191 frames in 5.0 seconds = 1238.200 FPS 13637 frames in 5.0 seconds = 2727.400 FPS (ASUS V9280 TD) ... 434 frames in 5.0 seconds = 86.800 FPS (если растянуть окно на весь экран 1600x1200) 712 frames in 5.0 seconds = 142.400 FPS (ASUS V9280 TD, на весь экран) ... 7393 frames in 5.0 seconds = 1478.600 FPS (версия 41.91) ... 452 frames in 5.0 seconds = 90.400 FPS (версия 41.91 на весь экран)
name of display: :0.0 display: :0 screen: 0 direct rendering: Yes server glx vendor string: NVIDIA Corporation server glx version string: 1.2 server glx extensions: GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer client glx vendor string: NVIDIA Corporation client glx version string: 1.2 client glx extensions: GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_EXT_import_context, GLX_SGI_video_sync, GLX_SGIX_swap_group, GLX_SGIX_swap_barrier, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer GLX extensions: GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, GLX_ARB_get_proc_address OpenGL vendor string: NVIDIA Corporation OpenGL renderer string: GeForce2 GTS/AGP/SSE2 OpenGL version string: 1.3.1 NVIDIA 29.60 OpenGL extensions: ... glu version: 1.3 glu extensions: GLU_EXT_nurbs_tessellator, GLU_EXT_object_space_tess Vis Vis Visual Trans buff lev render DB ste r g b a aux dep ste accum buffers MS MS ID Depth Type parent size el type reo sz sz sz sz buf th ncl r g b a num bufs ---------------------------------------------------------------------------------------------------- 0x21 24 TrueColor 0 32 0 rgba 1 0 8 8 8 0 0 24 8 16 16 16 16 0 0 0x22 24 DirectColor 0 32 0 rgba 1 0 8 8 8 0 0 24 8 16 16 16 16 0 0 0x23 24 TrueColor 0 32 0 rgba 1 0 8 8 8 8 0 24 8 16 16 16 16 0 0 0x24 24 TrueColor 0 32 0 rgba 0 0 8 8 8 0 0 24 8 16 16 16 16 0 0 0x25 24 TrueColor 0 32 0 rgba 0 0 8 8 8 8 0 24 8 16 16 16 16 0 0 0x26 24 DirectColor 0 32 0 rgba 1 0 8 8 8 8 0 24 8 16 16 16 16 0 0 0x27 24 DirectColor 0 32 0 rgba 0 0 8 8 8 0 0 24 8 16 16 16 16 0 0 0x28 24 DirectColor 0 32 0 rgba 0 0 8 8 8 8 0 24 8 16 16 16 16 0 0 NV28 имеет их значительно больше, в т.ч. глубины 16 и stencil 8
X-Video Extension version 2.2 screen #0 Adaptor #0: "video4linux" ... Adaptor #1: "NV10 Video Overlay" number of ports: 1 port base: 70 operations supported: PutImage supported visuals: depth 24, visualID 0x21 depth 24, visualID 0x23 depth 24, visualID 0x24 depth 24, visualID 0x25 depth 24, visualID 0x22 depth 24, visualID 0x26 depth 24, visualID 0x27 depth 24, visualID 0x28 number of attributes: 9 "XV_DOUBLE_BUFFER" (range 0 to 1) client settable attribute client gettable attribute (current value is 1) "XV_COLORKEY" (range 0 to 16777215) client settable attribute client gettable attribute (current value is 66046) "XV_AUTOPAINT_COLORKEY" (range 0 to 1) client settable attribute client gettable attribute (current value is 1) "XV_SET_DEFAULTS" (range 0 to 0) client settable attribute "XV_BRIGHTNESS" (range -512 to 511) client settable attribute client gettable attribute (current value is 0) "XV_CONTRAST" (range 0 to 8191) client settable attribute client gettable attribute (current value is 4096) "XV_SATURATION" (range 0 to 8191) client settable attribute client gettable attribute (current value is 4096) "XV_HUE" (range 0 to 360) client settable attribute client gettable attribute (current value is 0) "XV_ITURBT_709" (range 0 to 1) client settable attribute client gettable attribute (current value is 0) maximum XvImage size: 2046 x 2046 Number of image formats: 4 id: 0x32595559 (YUY2) guid: 59555932-0000-0010-8000-00aa00389b71 bits per pixel: 16 number of planes: 1 type: YUV (packed) id: 0x32315659 (YV12) guid: 59563132-0000-0010-8000-00aa00389b71 bits per pixel: 12 number of planes: 3 type: YUV (planar) id: 0x59565955 (UYVY) guid: 55595659-0000-0010-8000-00aa00389b71 bits per pixel: 16 number of planes: 1 type: YUV (packed) id: 0x30323449 (I420) guid: 49343230-0000-0010-8000-00aa00389b71 bits per pixel: 12 number of planes: 3 type: YUV (planar) Adaptor #2: "NV05 Video Blitter" number of ports: 32 port base: 71 operations supported: PutImage supported visuals: depth 24, visualID 0x21 depth 24, visualID 0x23 depth 24, visualID 0x24 depth 24, visualID 0x25 depth 24, visualID 0x22 depth 24, visualID 0x26 depth 24, visualID 0x27 depth 24, visualID 0x28 no port attributes defined maximum XvImage size: 2046 x 2046 Number of image formats: 5 id: 0x32595559 (YUY2) guid: 59555932-0000-0010-8000-00aa00389b71 bits per pixel: 16 number of planes: 1 type: YUV (packed) id: 0x32315659 (YV12) guid: 59563132-0000-0010-8000-00aa00389b71 bits per pixel: 12 number of planes: 3 type: YUV (planar) id: 0x59565955 (UYVY) guid: 55595659-0000-0010-8000-00aa00389b71 bits per pixel: 16 number of planes: 1 type: YUV (packed) id: 0x30323449 (I420) guid: 49343230-0000-0010-8000-00aa00389b71 bits per pixel: 12 number of planes: 3 type: YUV (planar) id: 0x3 guid: 03000000-0000-0010-8000-00aa00389b71 bits per pixel: 32 number of planes: 1 type: RGB (packed) depth: 0 red, green, blue masks: 0xff0000, 0xff00, 0xff
GeForce 4 Ti 4200-8x не возвращается в а/ц режим. Помогает следующий танец с бубнами (пункты 1-3 надо выполнять только один раз за сеанс):
modinfo NVdriver показывает, что при загрузке модуля можно задавать следующие параметры (я привожу не весь список, описание в os-registry.c):
modinfo nvidia в FC3 (ядро 2.6.10) не показывает наличия параметров, но они есть! Параметры остались те же самые и достаточно внести в /etc/modprobe.conf
alias char-major-195 nvidia options nvidia NVreg_EnableAGPFW=1 NVreg_EnableAGPSBA=1
После этого перезагрузить модуль
init 3 rmmod nvidia modprobe nvidia init 5
И убедиться, что режимы Fast Write и SBA теперь включены (agpgart в последнее время стало модно включать непосредственно в ядро):
cat /proc/driver/nvidia/agp/status Status: Enabled Driver: AGPGART AGP Rate: 4x Fast Writes: Enabled SBA: Enabled
Опции задаются в секции Device файла /etc/X11/xorg.conf (XF86Config или XF86Config-4 для старых дистрибутивов), я привожу только опции, специфические для драйвера nvidia (и то не все - например, я не использую QUADRO и ноутбуков с NVIDIA; см. также xorg.conf(5x) или XF86Config(5x)):
Опции OpenGL задаются установкой переменных окружения перед запуском прикладной программы:
__GL_FSAA_MODE=0 glxgears ... 6191 frames in 5.0 seconds = 1238.200 FPS 434 frames in 5.0 seconds = 86.800 FPS (если растянуть окно на весь экран 1600x1200) __GL_FSAA_MODE=4 glxgears ... 1965 frames in 5.0 seconds = 393.000 FPS 4 frames in 6.0 seconds = 0.667 FPS (если растянуть на весь экран) __GL_FSAA_MODE=3 glxgears ... 2920 frames in 5.0 seconds = 584.000 FPS 4 frames in 6.0 seconds = 0.667 FPS (если растянуть на весь экран)GeForce4 Ti 4200-8x (в сочетании с __GL_DEFAULT_LOG_ANISO скорость падает значительно):
__GL_FSAA_MODE=0 glxgears 13638 frames in 5.0 seconds = 2727.600 FPS 698 frames in 5.0 seconds = 139.600 FPS (если растянуть на весь экран) __GL_FSAA_MODE=1 glxgears # 2x Bilinear Multisampling 5624 frames in 5.0 seconds = 1124.800 FPS 308 frames in 5.0 seconds = 61.600 FPS (если растянуть на весь экран) __GL_FSAA_MODE=2 glxgears # 2x Quincunx Multisampling 5221 frames in 5.0 seconds = 1044.200 FPS 282 frames in 5.0 seconds = 56.400 FPS (если растянуть на весь экран) __GL_FSAA_MODE=4 glxgears # 4x Bilinear Multisampling 3603 frames in 5.0 seconds = 720.600 FPS 308 frames in 5.0 seconds = 61.600 FPS (если растянуть на весь экран) __GL_FSAA_MODE=5 glxgears # 4x Gaussian Multisampling 3223 frames in 5.0 seconds = 644.600 FPS 282 frames in 5.0 seconds = 56.400 FPS
nvidia-setting: графический и командный интерфейс управления |
Графическая утилита nvidia-setting позволяет в легкоусвояемой форме управлять различными параметрами драйвера, отдельно для каждого экрана и устройства (подробный help прилагается):
Конфигурационный файл - ~/.nvidia-settings-rc (кстати, позволяет узнать, наконец, на каком из экранов разместился видеооверлей с возможностью аппаратного управления яркостью и т.д., а какой довольствуется XVideoBlitter).
Имеется режим командной строки:
Постановка задачи. Имеется видеоплата на NVIDIA GeForce4, к первому (DFP-0) каналу (DVI-I) по интерфейсу DVI-D подключён ЖК проектор, ко второму (CRT-1) каналу (VGA) подключён CRT монитор. Один из каналов (не помню какой, TV-0?, а телевизора у меня сейчас нет) можно переключать для вывода по интерфейсу S-Video, но это извращение описано ниже. Требуется обеспечить работу в обычном режиме на мониторе с возможностью запуска программ (tuxracer ;) с выводом на экран проектора, не мешая основной деятельности.
Итак, добавляем в /etc/X11/xorg.conf секции для описания монитора и проектора (Modeline, естественно, по вкусу):
Section "Monitor" Identifier "MonitorSamsung" VendorName "Samsung" ModelName "SyncMaster 1200NF" HorizSync 30.0 - 121.0 VertRefresh 50.0 - 185.0 Option "dpms" # 92 Hz Modeline "1600x1200" 239 1600 1616 1808 2080 1200 1204 1207 1244 +HSync +VSync # "2048x1536": 340.5 MHz, 120.2 kHz, 75.0 Hz Modeline "2048x1536" 340.48 2048 2216 2440 2832 1536 1537 1540 1603 -HSync +VSync EndSection Section "Monitor" Identifier "MonitorProjector" VendorName "Hitachi" ModelName "PJ-TX100" HorizSync 30.0 - 97.0 VertRefresh 50.0 - 100.0 ModeLine "ATSC-720-60p" 74.25 1280 1320 1376 1648 720 722 728 751 Modeline "1280x720_60" 74.25 1280 1352 1432 1648 720 725 730 750 Modeline "1280x720_50" 74.25 1280 1680 1720 1976 720 725 730 750 Modeline "1280x720_30" 74.25 1280 3000 3080 3304 720 725 730 750 Modeline "1280x720_25" 74.25 1280 3660 3740 3960 720 725 730 750 Modeline "1280x720_24" 74.25 1280 3824 3904 4128 720 725 730 750 EndSection
Теперь добавляем секции с описанием устройств (на самом деле это одно устройство, совмещение обеспечивается BusId, но номера экранов разные, значение BusId можно подсмотреть из старого X.0.log, может потребоваться NoDDC - иногда бывают проблемы с DDC (EDID) в двухканальном режиме):
Section "Device" Identifier "NVIDIA GeForce 4 Ti 4200-8x Projector 0" Driver "nvidia" BusId "PCI:1:0:0" Screen 0 # Option "NoDDC" "on" Option "NoLogo" "on" VendorName "ASUS" BoardName "V9280 TD" Option "ConnectedMonitor" "CRT-1" EndSection Section "Device" Identifier "NVIDIA GeForce 4 Ti 4200-8x Projector" Driver "nvidia" BusId "PCI:1:0:0" Screen 1 # Option "NoDDC" "on" Option "NoLogo" "on" # Option "ExectModeTimingsDVI" "on" VendorName "ASUS" BoardName "V9280 TD" Option "ConnectedMonitor" "DFP-0" EndSection
Описания экранов 0 и 1 для нашего будущего layout (имена устройств и мониторов должны соответствовать описанным выше):
Section "Screen" Identifier "Screen0Projector" Device "NVIDIA GeForce 4 Ti 4200-8x Projector 0" Monitor "MonitorSamsung" DefaultDepth 24 SubSection "Display" Depth 24 Modes "2048x1536" "ATSC-720-60p" "1920x1440" "1600x1200" "1400x1050" "1280x1024" "1280x960" "1152x864" "1024x768" "800x600" "640x480" EndSubSection EndSection Section "Screen" Identifier "ScreenProjector" Device "NVIDIA GeForce 4 Ti 4200-8x Projector" Monitor "MonitorProjector" DefaultDepth 24 SubSection "Display" Depth 24 Modes "ATSC-720-60p" "1280x720_60" "1280x720_50" "1280x720_30" "1280x720_25" "1280x720_24" EndSubSection EndSection
И, наконец, объединяем всё вместе в нашей секции ServerLayout (пока не ставить её первой!):
Section "ServerLayout" Identifier "LayoutCRTProjector" Screen 0 "Screen0Projector" Screen 1 "ScreenProjector" leftOf "Screen0Projector" InputDevice "Mouse0" "CorePointer" InputDevice "Keyboard0" "CoreKeyboard" EndSection
Для экспериментов желательно перевести систему в режим текстовой загрузки и запускать X Window System вручную:
startx -- -logverbose 5 -layout LayoutCRTProjector
После успешной отладки переместить LayoutCRTProjector в начало файла, удалить (переименовать) ~/.xinitrc, перейти в графический режим: init 5.
Недостаток: видеоверлей работает только на первом экране, поэтому аппаратной регулировки яркости и контрастности не будет (а мой проектор отказывается регулировать яркость при подключении по DVI :(). Можно сделать его первым экраном, но могут быть проблемы с запуском программ по умолчанию на втором экране (до какого-то момента на втором экране даже WM не запускался самостоятельно). Мышка и клавиатура делятся между экранами - для игры это неудобно, а для просмотра фильмов можно использовать пульт ДУ.
Можно наделать много layout-ов для разных ситуаций: монитор и проектор, проектор и монитор (видеоверлей на проекторе), только монитор, только проектор, монитор и проектор в режиме TwinView, то же в сочетании с телевизором (см. ниже).
Простейший способ вывести изображение на телевизор - отключить монитор! При загрузке компьютера видеоплата обнаружив, что телевизор является единственным устройством, подключенным к ней, начинает выводить изображение (прямо с первого собщения 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
Редактировать тексты, глядя на экран телевизора - невозможно, перезагружаться каждый раз, когда хочется посмотреть фильм - утомительно. Поэтому предлагается запустить два 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). По окончанию просмотра втрой сервер останавливать необязательно - он никому не мешает.
Преодолеть оставшееся чувство неудовлетворения поможет программа 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 выдает пустой список режимов. Включение вывода на телевизор одновремено с выводом на монитор и переход к разрешению 768x576:
nvtv -N -X -t -r 768,576 -s Large -S PAL -C SVHS
После этого изображение будет выводиться одновременно на телевизор и монитор. Монитор может не поддерживать выбранное разрешение и режим работы. В этом случае попробуйте другой режим. Например, мой монитор не любит режимы 800x600xLarge (обрезает картинку), 768x576xSmall (срывается кадр), 640x480xLarge (рекомендуемый для NTSC DVD 4:3 - мельтешение на экране, Small - нормально). Некоторые режимы невозможно смотреть ни на мониторе, ни на телевизоре (для меня такой режим - 800x450). Для нестандартных разрешений рекомендуется завести соответствующий Modeline в секции Monitor (основной монитор, не MonitorTV) и включить его в список Modes соответствующей подсекции Display, например (nvtv поменяет частоты синхронизации при использовании ключа -t)
Modeline "pal" 50.00 768 832 856 1000 576 590 595 630 -hsync -vsync ... Modes "1600x1200" "pal"
Виртуальное разрешение останется прежним (у меня 1600x1200), так что окно с фильмом приходится искать на этом бескрайнем поле и центрировать, а также бороться с излишним рвением некоторых программ к масштабированию и обеспечению "правильного" соотношения сторон (mplayer -noaspect). Надеюсь, что это умение придет к вам с опытом, описать это невозможно. Если ваш телевизор имеет возможность для просмотра широкоэкранных фильмов, то лучше использовать ее и выводить в режиме 4:3, чем использовать дискретное масштабирование плейера и режим вывода типа 800x450.
Выключение вывода на телевизор и возвращение исходного разрешения экрана:
nvtv -N -m -X -r 1600,1200
nvtv позволяет задавать в текстовом режиме множество параметров с помощью ключа --set (полный список и интервал значений выдается по nvtv -h, используемый ТВ кодировщик может поддерживать не все параметры):
Путем проб и ошибок можно подобрать режим, в котором и фильм будет прекрасно выглядеть на телевизионном экране (похоже, что некоторые фильмы специально кодируют так, чтобы их было невозможно смотреть на компьютерном мониторе - например, случайным образом меняют порядок полей) и меню плейера будет читаемо на мониторе.
GPU GeForce2 MX и GeForce4 имеют два CRTC и могут выводить 2 независимых изображения (с различным разрешением и частотой) на монитор и телевизор. Настройки задаются с помощью TwinView и не должны вызвать затруднений в простом случае (один монитор и один телевизор).
DPMS не работает на втором мониторе (ТВ) - может это и правильно?.
Утилита nvclock позволяет изменить частоту работы GPU и памяти. Версия 0.6.2 неправильно показывает частоту памяти и "подвешивает" компьютер при попытке изменить что-либо на Ti 4200-8x.
Установка:
Утилита не сохраняет измененные значения частот в NVRAM, так что ее необходимо вызывать каждый раз после запуска X Windows (например, поместить в .xinitrc). Если запускать ее до X Windows, то требуются права root, а модуль nvidia может сбросить изменения. Ключи запуска:
Не все значения частоты памяти возможны, например у меня они устанавливаются с шагом 7 МГц (утилита сообщает реально установленную частоту). Утилита имеет свои представления о максимально возможных частотах. Их можно преодолеть с помощью ключа -f, но я не советую. Рекомендуется постепенно повышать частоту GPU (пока компьютер не зависнет ;), затем перезагрузиться и постепенно повышать частоту памяти (пока опять не зависнет ;). Не рекомендуется работать постоянно на максимально возможной частоте - это сильно сокращает время жизни видеоплаты и может привести к зависаниям при повышении температуры за бортом в самый неподходящий момент.
У меня получилось поднять частоты с 200/401 до 228/451 МГц (при этом используются ключи -n 228 -m 449). glxgears ускорилась с 1225 fps (87 fps при 1600x1200) до 1425 fps (101 fps при 1600x1200). Правда, через некоторое время я заметил зелёные точки на серых полях и понизил частоту памяти до 415 MHz. x11perf (-all требует 3 часов работы, запускать на только что загруженном компьютере, необходимо убить процесс xscreensaver, отключить запуск updatedb и прочих программ, освободить левый верхний угол 800x800) отчетливо показывает какие операции выполняются CPU (не ускоряются совсем), GPU (ускоряются в 228/200 раза). Некоторые операции ведут себя странно. Например, putimagexy и getimagexy временно блокируют компьютер (5 секунд на квадрат 500x500).
Для видеокарт с аппаратным контролем возможно извлечь значения температуры и частоты вращения вентилятора с помощью пакета rivatv. Основное назначение пакета - видеозахват, но в этом качестве я его не пробовал. (о видео захвате с помощью AverMedia TVPhone98 или аналогичных карт на Bt848/878 смотрите мою статью).
Установка:
modprobe rivatv
install rivatv insmod -f rivatv autoload=0
GeForce2-GTS Model: Asus V7700 Deluxe # (на самом деле - Asus V7700Pro T) Architecture: NV10 (NV15) Access: Control [0xdc000000-0xdcffffff] FB [0xd0000000-0xd7ffffff] Interrupts: 0 out of 14876276 (DMA: 0, Overlay: 0, Missing: 14876276) Device: available VideoDecoder: unavailable Tuner: unavailable AudioDecoder: unavailable AudioProcessor: unavailable
Параметры модуля 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
|
Bog BOS: Linux и NVIDIA: драйверы, TV-Out, датчики, TV-In, разгон |
Последние изменения: |