Ключевые слова:linux, framebuffer, xfree86, video, driver, console, (найти похожие документы)
From: alex k <kmxb@hotbox.ru>
Newsgroups: forum.opennet.ru
Date: Mon, 17 Jun 2003 13:01:37 +0000 (UTC)
Subject: Настройка фреймбуфера для видеокарты NVIDIA
Оригинал: http://kmxb.narod.ru/rivafb1.html
Настройка фреймбуфера для видеокарты NVIDIA
немного введения
Сразу оговорюсь, что не буду писать о всех плюсах и минусах
использования framebuffer. Только о нескольких. Просто при
редактировании программ, конфигов, отладке и т.п. для меня самый
главный плюс, который перевешивает все - это большой размер консоли
(например: 100x37). Но, к сожалению, за удобство приходится платить. В
принципе, минусов при использовании rivafb всего несколько.
1. Вывод на экран существенно замедляется, но нам ведь не в игрушки
играть :), кроме того видео смотреть можно безо всяких тормозов.
2. Пока невозможно использовать совместно rivafb и nvidia drivers для
X - либо наглухо виснет, либо пропадает изображение. Не знаю как
сейчас обстоят дела, уже год как не проверял, но, судя по крикам
из форумов - все без изменений. Так что приходится выбирать - либо
rivafb в консоли, либо nvidia в иксах.
3. В ядрах 2.4 все работает на ок. В ветке 2.5 не так давно
заработало тоже, однако есть небольшие проблемы с кириллицей.
Вот, кажется, и все.
теперь, собственно, настройка.
Использовать framebuffer можно либо встроенным в ядро, либо
подгружая как модуль. Если включаете в ядро, то для достижения
необходимого разрешения и частоты экрана достаточно добавить в
lilo.conf строчку типа append="video:rivafb:..." например вот так:
# Linux bootable partition config begins
image = /boot/vmlinuz
append="video=rivafb:xres:800,yres:600,pixclock:17761,
left_margin:152,right_margin:32,upper_margin:27,lower_margin:1,
hsync_len:64,vsync_len:3,bits_per_pixel:32"
root = /dev/hda2
label = Linux>
read-only
# Linux bootable partition config ends
Сразу оговорюсь, что вышеописанные значения расчитаны для режима
800x600, 85Гц и 32bit, проверены на видеокартах GeForce256, TNT2,
GeForce2 MX400 (GeForce4 - пока не поддерживается, во всяком случае -
у меня глючит). Рассчитать режимы каждый сам сможет под свои
разрешение и частоту, внимательно прочитав framebuffer.txt. Чтоб не
томить - вот выдержка из данного документа:
6. Converting XFree86 timing values info frame buffer device timings
--------------------------------------------------------------------
An XFree86 mode line consists of the following fields:
"800x600" 50 800 856 976 1040 600 637 643 666
< name > DCF HR SH1 SH2 HFL VR SV1 SV2 VFL
The frame buffer device uses the following fields:
- pixclock: pixel clock in ps (pico seconds)
- left_margin: time from sync to picture
- right_margin: time from picture to sync
- upper_margin: time from sync to picture
- lower_margin: time from picture to sync
- hsync_len: length of horizontal sync
- vsync_len: length of vertical sync
1) Pixelclock:
xfree: in MHz
fb: in picoseconds (ps)
pixclock = 1000000 / DCF
2) horizontal timings:
left_margin = HFL - SH2
right_margin = SH1 - HR
hsync_len = SH2 - SH1
3) vertical timings:
upper_margin = VFL - SV2
lower_margin = SV1 - VR
vsync_len = SV2 - SV1
Good examples for VESA timings can be found in the XFree86 source tree,
under "xc/programs/Xserver/hw/xfree86/doc/modeDB.txt".
Если файла modeDB.txt у вас под рукой не найдется, можно заглянуть
в /etc/fb.modes, но если и там нет нужного вам режима, можно еще
сделать так: временно подредактировать XF86Config, чтобы в X получить
нужный вам режим; потом запускаете xvidinfo, и записываете текущие
значения HFL, HR, SH1 и т.д.; потом вычисляете... потом подставляете.
Еще есть специальные программы-калькуляторы, но я ими не пользовался.
Выбор за вами.
Наконец, специально для тех, кто будет использовать rivafb как
модуль. Вышеуказанная строка append="..." в lilo.conf уже не работает,
приходится действовать в лоб, а именно - перед сборкой ядра и после
наложения необходимых патчей подредактировать один файл в исходниках
ядра (в случае kernel-2.5.xx два файла):
1. kernel-2.4.xx
/usr/src/linux-2.4.xx/drivers/video/riva/fbdev.c
ищем такие строки:
static struct fb_var_screeninfo rivafb_default_var = {
xres: 640,
yres: 480,
xres_virtual: 640,
yres_virtual: 480,
xoffset: 0,
yoffset: 0,
bits_per_pixel: 8,
grayscale: 0,
red: {0, 6, 0},
green: {0, 6, 0},
blue: {0, 6, 0},
transp: {0, 0, 0},
nonstd: 0,
activate: 0,
height: -1,
width: -1,
accel_flags: 0,
pixclock: 39721,
left_margin: 40,
right_margin: 24,
upper_margin: 32,
lower_margin: 11,
hsync_len: 96,
vsync_len: 2,
sync: 0,
vmode: FB_VMODE_NONINTERLACED
};
и меняем значения переменных на нужные:
static struct fb_var_screeninfo rivafb_default_var = {
xres: 800,
yres: 600,
xres_virtual: 800,
yres_virtual: 600,
xoffset: 0,
yoffset: 0,
bits_per_pixel: 32,
grayscale: 0,
red: {0, 6, 0},
green: {0, 6, 0},
blue: {0, 6, 0},
transp: {0, 0, 0},
nonstd: 0,
activate: 0,
height: -1,
width: -1,
accel_flags: 0,
pixclock: 17761,
left_margin: 152,
right_margin: 32,
upper_margin: 27,
lower_margin: 1,
hsync_len: 64,
vsync_len: 3,
sync: 0,
vmode: FB_VMODE_NONINTERLACED
};
2. в kernel 2.5.xx аналогично правим этот же и еще один файл:
/usr/src/linux-2.5.xx/drivers/video/vfb.c
static struct fb_var_screeninfo vfb_default __initdata = {
.xres = 800,
.yres = 600,
.xres_virtual = 800,
.yres_virtual = 600,
.bits_per_pixel = 32,
.red = { 0, 8, 0 },
.green = { 0, 8, 0 },
.blue = { 0, 8, 0 },
.activate = FB_ACTIVATE_TEST,
.height = -1,
.width = -1,
.pixclock = 17761,
.left_margin = 152,
.right_margin = 32,
.upper_margin = 27,
.lower_margin = 1,
.hsync_len = 64,
.vsync_len = 3,
.vmode = FB_VMODE_NONINTERLACED,
};
Осталось только откомпилировать ядро, не забыть записать в
/etc/rc.modules:
modprobe rivafb
modprobe fbcon
и перезагрузиться.
Успехов!
Еще забыл сказать, что в случае ядра 2.5 русские шрифты приходится
загружать на каждую консоль отдельно, т.е. говорить setfonts
Cyr_a8x16, например. Еще не разобрался, почему так. Если кто знает,
напишите пару строк, буду очень благодарен.
last update 2003.06.17
Началась подписка на журнал Linux Format на 2010 год.
Спешите оформить подписку на единственный в России ежемесячный журнал о Linux!
Все, оформившие подписку на печатную версию журнала, получают диск с архивом журнала Linux Format за
2005-2009г. в подарок. Также в подарок вы получаете именную электронную версию в формате PDF.
Теперь вы можете приступить к чтению журнала сразу в момент выхода свежего номера, не дожидаясь,
пока вам доставят бумажную версию.
Кроме того, все, оформившие подписку на первую половину или весь 2010 год в
интернет-магазине ГНУ/Линуксцентра, автоматически становятся участниками розыгрыша ценных призов: