Последнее изменение файла: 2003.03.17
Скопировано с www.bog.pp.ru: 2003.03.17

Linux и NVIDIA: драйверы, TV-Out, датчики, TV-In, разгон.

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

NVIDIA versus ATI

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

Модели

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

  • GeForce2 (NV15/NV15A; сравнение; GeForce2 Ti быстрее GeForce2 Pro, а тот быстрее GTS, однако сильно зависит от установленных производителем видеоплаты частоты GPU и памяти; только 1 RAMDAC; есть аппаратное преобразование цветового пространства, но нет iDCT и MC; TV-Out делается с помощью дополнительных микросхем Conexant BT868/869, Chrontel 7007/7008 (800x600), Conexant CX25870/25871 и Philips SAA7102/7108 (на платах с VIVO))
  • GeForce4 MX (NV17S/NV17/NV18; сравнение; 420 модель имеет медленную память SDR; модели 440 SE, 440, 440/AGP 8x и 460 отличаются частотой GPU и памяти; 440 примерно соответствует GeForce2 Ti, однако за счет технологии экономии пропускной способности шины памяти гораздо быстрее в TrueColor (хотя и не все функции в нем реализованы); быстрый AA; 2 RAMDAC 10 bit 350 MHz; 2 независимых CRTC; встроенный DVI (наличие зависит от изготовителя платы) и TV-Out 1024x768 (платы с 2 выходами на монитор - CRTC/DVI, DVI/DVI - имеют дополнительную микросхему для вывода на TV-Out аналогично GeForce2; платы VIVO используют микросхему Philips SAA7102/7108); iDCT и MC; 2 контроллера LCD; отсутствует чересстрочный режим)
  • GeForce4 Ti (NV25/NV28; сравнение; модели 4200, 4400, 4600, 4800SE, 4800 отличаются частотой GPU и памяти; в несколько раз быстрее GeForce4 MX и вдвое дороже; 2 RAMDAC 10 bit 350 MHz; 2 независимых CRTC; встроенный DVI и TV-Out; iDCT отсутствует, MC - есть; отсутствует чересстрочный режим)
  • Quadro и FX пока слишком дороги

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

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

  • lspci -v -v
    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
    
  • /var/log/XFree86.0.log
        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)
    
  • cat /proc/driver/nvidia/agp/card
    Fast Writes:     Supported
    SBA:             Not Supported
    AGP Rates:       4x 2x 1x
    
  • cat /proc/driver/nvidia/agp/host-bridge
    Host Bridge:     Intel i845
    Fast Writes:     Supported
    SBA:             Supported
    AGP Rates:       4x 2x 1x (странно - я думал, что i845 поддерживает только 4x)
    
  • cat /proc/driver/nvidia/agp/status
    Status:          Enabled
    Driver:          NVIDIA (или AGPGART, в зависимости от настройки драйвера)
    AGP Rate:        4x
    Fast Writes:     Enabled
    SBA:             Disabled
    
  • cat /proc/driver/nvidia/cards/0
    Model:           GeForce2 GTS
    IRQ:             10 (pin A routed to IRQ 10, пересекается с Intel 82801DB USB (Hub #1) и 82801DB ICH4 IDE)
    Video BIOS:      03.15.00.12
    Card Type:       AGP
    
  • nvclock -i
    GPU speed:      199.656 MHz
    -- Memory info --
    Amount:         32 MB
    Type:           128 bit DDR
    Speed:          400.904 MHz
    

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

Входящий в состав XFree86 4.2.0 (Red Hat Linux 8.0, штатное ядро 2.4.18-14) драйвер nv работает с GeForce как с обычным SVGA, т.е. нет поддержки 3D и вывода видео. К тому же у него проблемы с разрешением 1600x1200 и выше.

Компания 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 (сразу выйти с сохранением)
  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

  • rpmbuild --rebuild NVIDIA_kernel-1.0-4191.src.rpm
    ругается по поводу отсутствия uid Buildmeister и ошибки в скрипте проверки версии rpm (RPMPATCH отсутствует); создается /usr/src/redhat/RPMS/i386/NVIDIA_kernel-1.0-4191.i386.rpm
  • rpm -e NVIDIA_kernel NVIDIA_GLX
  • выйти из X Windows
  • rpm -iv NVIDIA_kernel-1.0-4191.i386.rpm NVIDIA_GLX-1.0-4191.i386.rpm
  • добавить в /etc/modules.conf (обеспечить загрузку собранного модуля ядра для старого ядра)
    alias char-major-195 nvidia
    install nvidia insmod -f nvidia # параметры по вкусу
    
  • внести исправления в /etc/X11/XF86Config (/etc/X11/XF86Config-4 для старых дистрибутивов)
    • в секции Module закоментировать загрузку dri и убедиться в наличии glx
    • в секции Device заменить имя драйвера с nv (или vesa) на nvidia и добавить опций по вкусу
    • возможно, придется добавить новые Modeline в секцию Monitor и их использование в секцию Screen

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

В версии 1.0-3123 (release 25) добавлена поддержка GeForce4 MX, GeForce4 Ti 4800 SE и GeForce4 4200.

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

  • rpmbuild --rebuild NVIDIA_kernel-1.0-3123.src.rpm
    ругается по поводу отсутствия uid Buildmeister и ошибки в скрипте проверки версии rpm (RPMPATCH отсутствует); создается /usr/src/redhat/RPMS/i386/NVIDIA_kernel-1.0-3123.i386.rpm
  • rpm -e NVIDIA_kernel NVIDIA_GLX
  • выйти из X Windows
  • rpm -iv NVIDIA_kernel-1.0-3123.i386.rpm NVIDIA_GLX-1.0-3123.i386.rpm
    • /lib/modules/2.4.18-14/kernel/drivers/video/NVdriver
    • /usr/X11R6/lib/modules/drivers/nvidia_drv.o (драйвер nvidia для секции Device)
    • /usr/X11R6/lib/modules/extensions/libglx.so.1.0.3123 (старая версия от Mesa переименовывается в /usr/X11R6/lib/modules/extensions/xxx.libglx.a.RPMSAVE)
    • /usr/lib/libGL.so.1.0.3123 (старая версия от Mesa переименовывается в /usr/X11R6/lib/xxx.libGL.a.RPMSAVE и /usr/X11R6/lib/xxx.libGL.so.1.2.RPMSAVE)
    • /usr/lib/libGLcore.so.1.0.3123 (старая версия от Mesa переименовывается в /usr/X11R6/lib/modules/extensions/xxx.libGLcore.a.RPMSAVE)
    • /usr/X11R6/lib/libXvMCNVIDIA.a (аппаратная реализация MC для GF4)
    • /usr/X11R6/lib/libXvMCNVIDIA.so.1.0.3123
    • /usr/share/doc/NVIDIA_GLX-1.0/ (здесь же include/GL/*.h, которые надо поместить в /usr/include/GL/ перед сборкой OpenGL программ, если вы хотите использовать расширения OpenGL от NVIDIA; только что делать с остальными кусками от Mesa?)
    • /dev (crw-rw-rw- !)
      • nvidia0
      • nvidia1
      • nvidia2
      • nvidia3
      • nvidiactl
  • проверьте, что прикладные программы будут использовать только что установленную версию OpenGL (ldd /usr/X11R6/bin/glxgears)
  • добавить в /etc/modules.conf (обеспечить загрузку собранного модуля ядра для старого ядра)
    alias char-major-195 NVdriver
    install nvidia insmod -f NVdriver # параметры модуля по вкусу
    
  • внести исправления в /etc/X11/XF86Config (/etc/X11/XF86Config-4 для старых дистрибутивов)
    • в секции Module закоментировать загрузку dri и GLcore, убедиться в наличии glx
    • в секции Device заменить имя драйвера с nv (или vesa) на nvidia и добавить опций по вкусу
    • возможно, придется добавить новые Modeline в секцию Monitor и их использование в секцию Screen, но это уже другая история
  • запустить X Windows
  • проверить, что загрузился модуль ядра NVdriver, должны появиться следующие файлы в /proc/driver/nvidia/
    • /proc/driver/nvidia/agp/card
      Fast Writes:     Supported
      SBA:             Not Supported
      AGP Rates:       4x 2x 1x
      Registers:       0x1f000017:0x1f000114
      
    • /proc/driver/nvidia/agp/host-bridge
      Host Bridge:     Intel i845
      Fast Writes:     Supported
      SBA:             Supported
      AGP Rates:       4x 2x 1x
      Registers:       0x1f000217:0x00000114
      
    • /proc/driver/nvidia/agp/status
      Status:          Enabled
      Driver:          AGPGART
      AGP Rate:        4x
      Fast Writes:     Enabled
      SBA:             Disabled
      
    • /proc/driver/nvidia/cards/0
      Model:           GeForce2 GTS
      IRQ:             10
      Video BIOS:      03.15.00.12.00
      Card Type:       AGP
      
    • /proc/driver/nvidia/version
      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)
      
  • проверить работоспособность OpenGL, например с помощью glxgears
    ...
    6191 frames in 5.0 seconds = 1238.200 FPS
    ...
    434 frames in 5.0 seconds = 86.800 FPS (если растянуть окно на весь экран 1600x1200)
    ...
    7393 frames in 5.0 seconds = 1478.600 FPS (версия 41.91)
    ...
    452 frames in 5.0 seconds = 90.400 FPS (версия 41.91 на весь экран)
    
  • glxinfo -t позволяет посмотреть параметры реализации OpenGL
    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
    
  • проверить скорость работы 2D операций и устойчивость работы драйвера с помощью x11perf -all (занимает компьютер на 3 часа!)
  • посмотреть параметры расширения X-Video с помощью xvinfo
    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
    

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

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

  • NVreg_EnableAGPSBA (AGP Side Band Addressing, по умолчанию выключено, даже если всеми поддерживается)
  • NVreg_EnableAGPFW (AGP Fast Write, по умолчанию выключено, даже если всеми поддерживается)
  • NVreg_ReqAGPRate (позволяет насильственно понизить или повысить скорость AGP, битовая маска: 1x, 2x, 4x)
  • NVreg_UpdateKernelAGP (если 0, то вмешиваться в работу agpgart; попробуйте оба варианта, если имеются проблемы со стабильностью работы драйвера)
  • NVreg_EnableVia4x
  • NVreg_EnableALiAGP

Опции раздела Device XF86Config

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

  • NvAgp (при нестабильной работе драйвера можно запретить использование AGP или поэкспериментировать с различным типом поддержки; rivatv требует agpgart; при смене типа поддержки AGP - agpgart или драйвер nvidia - желательно перезагрузиться)
    • 0 (запретить использование AGP)
    • 1 (использовать поддержку AGP, встроенную в модуль nvidia; перед запуском выгрузите модуль ядра agpgart)
    • 2 (использовать поддержку AGP, встроенную в модуль ядра agpgart)
    • 3 (попробовать использовать agpgart, при неудаче использовать встроенную поддержку AGP)
  • Dac8bit ("off"; использовать 8-битные таблицы цветов даже при наличии 10-битных; введена в release 40)
  • OverlayDefaultVisual ("off"; корневое окно в оверлей; введена в release 40)
  • NoRenderExtension ("off"; полезно при работе с 256 цветами)
  • DigitalVibrance ("0"; позволяет увеличивать насыщенность цвета (saturation); от 0 до 25 (зависит от версии); не рекомендуется, если вы занимаетесь редактированием изображений; желателен для LCD)
  • PageFlip ("on"; позволяет отключить быструю смену буферов путем смены их адресов вместо копирования содержимого при __GL_SYNC_TO_VBLANK)
  • UseInt10Module (попробуйте включить, если не находится вторая видеокарта)
  • HWCursor ("on"; аппаратный курсор)
  • SWCursor ("off"; программный курсор)
  • CursorShadow ("off"; аппаратный курсор будет с тенью; CursorShadowAlpha, CursorShadowXOffset и CursorShadowYOffset позволяют задать параметры тени)
  • NoDDC ("off"; игнорировать информацию, сообщаемую монитором о своих возможностях по протоколу DDC; ее можно посмотреть с помощью программы ddcprobe; полезна при разгоне монитора)
  • IgnoreEDID (синоним NoDDC)
  • UseEdidFreqs ("off"; при включении информация, сообщаемая монитором о своих возможностях по протоколу DDC, используется вместо интервалов, задаваемых HorizSync и VertRefresh)
  • NoLogo ("off"; позволяет отключить вывод логотипа NVIDIA при загрузке; так вот почему размер модуля больше мегабайта - наверное, это логотип в формате BMP 1600x1200 :)
  • RenderAccel ("off"; введена в Release 40; ускорение 2D операций с использованием архитектуры NVIDIA; включать не рекомендую - зацикливается)
  • NoRenderAccel ("off"; убрана в Release 40; использовать XAA для ускорения 2D операций; можно отключить, если заметите ошибки)
  • опции вывода на ТВ
    • ConnectedMonitor (""; позволяет задать список (через запятую) устройств, подсоединенных к видеокарте, если драйверу не удалось сделать это правильно; элементы списка: CRT, TV, DFP; лучше использовать эту опцию в секции Screen, чтобы можно было переключать Layout)
    • TVOutFormat ("SVIDEO" или "COMPOSITE"; также лучше использовать в секции Screen)
    • TVStandard (для России - "PAL-B"; также лучше использовать в секции Screen)
  • опции TwinView
    • TwinView ("off"; позволяет включить режим TwinView)
    • SecondMonitorHorizSync (задает интервал допустимых частот горизонтальной синхронизации для второго монитора аналогично директиве HorizSync в секции Monitor)
    • SecondMonitorVertRefresh (задает интервал допустимых частот вертикальной синхронизации для второго монитора аналогично директиве VertRefresh в секции Monitor)
    • MetaModes (аналог директивы Modes в субсекции Display секции Screen; задает список режимов - через точку с запятой - для виртуального экрана, охватывающего оба монитора; каждый режим виртуального экрана содержит список - через запятую - разрешений каждого монитора; для отключения отдельного монитора в определенном режиме виртуального экрана необходимо использовать строку NULL; в дополнение к разрешению монитора можно использовать смещение начала относящейся к нему поверхности отображения относительно виртуального экрана в виде +X+Y, что позволяет гибко отображать части виртуального экрана на определенные мониторы: весь экран - на первый монитор, центральную часть в увеличенном масштабе - на второй и т.д.; имеется возможность задать панорамирование (возможно, в сочетании со смещением) для каждого монитора отдельно и виртуального экрана целиком, что позволяет избегжать "мертвых" зон на виртуальном экране
      Option "MetaModes" "1600x1200, 1024x768 @ 1024x1200"
    • TwinViewOrientation ("RightOf"; более простой способ задания смещения области второго монитора на виртуальном экране относительно первого: "RightOf", "LeftOf", "Above", "Below", "Clone")
    • ConnectedMonitor (""; позволяет задать список (через запятую) устройств, подсоединенных к видеокарте, если драйверу не удалось сделать это правильно; элементы списка: CRT, TV, DFP)
    • NoTwinViewXineramaInfo ("off"; позволяет запретить передачу информации о конфигурации TwinView для программ, использующих Xinerama)

Опции OpenGL

Опции OpenGL задаются установкой переменных окружения перед запуском прикладной приграммы

  • __GL_SYNC_TO_VBLANK=1 синхронизирует переключение между буферами кадров с сигналами вертикальной синхронизации, что позволяет избежать рывков изображения и разрывов изображения
  • __GL_DEFAULT_LOG_ANISO=x задает различные режимы анизотропной фильтрации текстур (0 - выключить; от 1 до 3 - различные уровни)
  • _GL_FSAA_MODE=x задает различные режимы Full Scene Anti-Aliasing (0 - выключить; от 1 до 5 - различные алгоритмы; для GeForce2 включать не рекомендую:
    _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 (если растянуть на весь экран)
    
  • __GL_SINGLE_THREADED
  • __GL_TEX_MEMORY_SPACE_ENABLES
  • __GL_SW_RENDERER (жуть ;)
  • __GL_NV20_EMULATE
  • __GL_NV25_EMULATE

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:

  • взять и распаковать исходные тексты
  • ./configure --with-gtk=gtk2
  • cd src
  • не знаю, что автор хотел сказать в файле pipe.h, но я заменил строчки с "##" на явные строковые константы
  • make
  • make nvdump (выдает набор бессмысленных для меня цифр)
  • cp nvtv nvtvd /usr/local/bin/
  • документация лежит в файлах doc/USAGE, FAQ, doc/man/nvtv.1x, doc/man/nvtvd.8

Для доступа к регистрам программе 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, используемый ТВ кодировщик может поддерживать не все параметры):

  • --set flicker:от0до100 (управление фильтром мерцания)
  • --set sharpness:от0до100
  • --set brightness#:от-50до50
  • --set contrast#:от-50до50
  • --set saturation#:от-50до50

Путем проб и ошибок можно подобрать режим, в котором и фильм будет прекрасно выглядеть на телевизионном экране (похоже, что некоторые фильмы специально кодируют так, чтобы их было невозможно смотреть на компьютерном мониторе - например, случайным образом меняют порядок полей) и меню плейера будет читаемо на мониторе.

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

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

DPMS не работает на втором мониторе (ТВ) - может это и правильно?.

nvclock

Утилита nvclock позволяет изменить частоту работы GPU и памяти.

Установка:

  • взять и развернуть исходные тексты
  • ./autogen.sh
  • ./configure (--enable-qt порождает чудовищный src/qt/Makefile)
  • src/gtk2/Makefile имеет странные CFLAGS и LIBS (устанавливаются до определения GTK), поправить
  • make
  • make install
    • /usr/local/bin/nvclock
    • /usr/local/bin/nvclock_gtk (зачем такой программе графический интерфейс?)
    • /usr/local/share/doc/nvclock/ (из них полезны README, FAQ)

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

  • -i (выдать информацию о текущих установках)
  • -n MHz (установить частоту GPU)
  • -m MHz (установить частоту памяти)

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

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

Сенсоры и TV-In

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

Установка:

  • взять исходные тексты
  • ./configure (неправильно определяет местоположение модулей ядра: поправить MODULES в Makefile)
  • make
  • вместо make install, который записывает в /lib/modules/2.4.18-14/kernel/drivers/media/video/ модули rivatv.o, saa7108e.o, saa7111a.o, saa7113h.o, tuner.o, tvaudio.o, tvmixer.o, tw98.o, vpx32xx.o (при этом он затирает стандартные tuner.o, tvaudio.o, tvmixer.o!), я скопировал только rivatv.o (и требуемый модуль декодера: saa7108e.o, saa7111a.o, saa7113h.o, tw98.o, vpx32xx.o)
  • драйвер nvidia должен использовать agpgart
  • в /etc/rc.d/rc.local вставить
    modprobe rivatv
    
  • чтобы подавить проверку совместимости версии модуля и ядра в /etc/modules.conf добавить строку
    install rivatv insmod -f rivatv autoload=0
    
  • убедиться, что загружены требуемые модули (i2c-core, i2c-algo-bit, videodev)
  • загрузить его вручную в первый раз
  • если на плате есть декодер, то загрузить один из модулей декодера (saa7108e.o, saa7111a.o, saa7113h.o, tw98.o, vpx32xx.o)
  • плата с тюнером требует загрузить нестандартные модули tuner.o, tvaudio.o, tvmixer.o
  • проверить содержимое файла /proc/driver/rivatv, чобы убедиться, что все загрузилось нормально
    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

  • debug
  • capbuffers (2; число буферов видеозахвата)
  • autoload (1; подгружать ли автоматически модуль декодера)
  • card (автомагически; модель видеокарты из CARDLIST)
  • tvbox (0; 0 - нет, 1 - PAL, 2 - NTSC)
  • dma (0; использовать ли DMA при захвате; неотлажено; работает только совместно с GPL драйвером nv; как можно захватывть видео без DMA я не понимаю ;)
  • agp (0; использовать ли AGP, используется agpgart!)
  • mtrr (1)

При запуске 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

Ссылки


Copyright © 1996-2003 Sergey E. Bogomolov; www.bog.pp.ru

Наш баннер
Вы можете установить наш баннер на своем сайте или блоге, скопировав этот код:
RSS новости