Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #46, СЕНТЯБРЬ 2004 г.

Тюнинг в стиле X. Часть 2

Alexander S. Salieff

Спецвыпуск Xakep, номер #046, стр. 046-018-4


После загрузки ядра вкомпиленные драйвера будут уже готовы к использованию, LKM будут подгружены тем или иным образом (через зависимости, modules.conf или хотя бы insmod/modprobe) и управление ими ляжет на плечи утилиты fbset. Основная задача fbset - переключать видеорежимы framebuffer на лету. Описание режимов находится в файле /etc/fb.modes, работает fbset с устройством /dev/fb0, другой файл описания указывается ключом -db, другой девайс - ключом -fb:

fbset -db /usr/local/etc/my.fb.modes -fb /dev/fb1 -depth 16 "800x600-85"

Вышеприведенная команда устанавливает режим, описанный ключом "800x600-85" в файле /usr/local/etc/my.fb.modes для девайса /dev/fb1 с глубиной цвета 16 бит. Откуда же берутся описания режимов в fb.modes? В грамотно построенных дистрибутивах они попадают туда при установке соответствующих пакетов либо генерируются при сборке ядра. Помимо этого можно занести свой режим самостоятельно, если известно его описание в формате X11-ModeLine, для этого есть утилита modeline2fb. Допустим, у нас есть режим, полученный с помощью xvidtune либо из конфига X-сервера. Скармливаем его нашей утилите:

echo 'Modeline "1024x768" 75.00 1024 1048 1184 1328 768 771 777 806 -hsync -vsync' | modeline2fb > > /etc/fb.modes

Видим, что в конце fb.modes появилось следующее:

# modes.fb - video mode descriptions for fbset

#

# See fbset(8) and fb.modes(5) for more information

mode "1024x768"

geometry 1024 768 1024 16368 8

timings 13333 144 24 29 3 136 6

hsync low

vsync low

endmode

Изменяем имя режима на удобное (и заодно, чтобы не пересекалось со стандартными), а в конце строки geometry правим 8 (бит на пиксель) на 16 или другое удобное нам значение (чтобы не нужно было использовать ключ -depth). Ты создал свой режим, который можно использовать через fbset.

Если ты используешь стандартный vesafb и у тебя CRT-монитор, то глаза очень быстро начинают ломаться от частоты 60 Гц. Но большинство современных карточек поддерживают режим VESA 3.0, в котором нет ограничения на частоту вертикальной развертки. Включается поддержка VESA 3.0 путем пропатчивания vesafb. Владельцы ядер 2.6.х качают патч отсюда: http://dev.gentoo.org/~spock/projects/vesafb-rrc-0.1.6-2.6.x.tar.bz2, а обладатели 2.4.х - отсюда: http://www.spock.mga.com.pl/php/download.php?id=8&lang=eng. Далее вытаскиваем из тарболла зипованный патч в корень исходников ядра (обрати внимание: они должны лежать в /usr/src/linux, иначе этот патч будет бредить!) и накладываем:

bzip2 -dc patch-2.x.x-vesafb-rrc.bz2 | patch -p1

Теперь, помимо прочего, у нас появился скрипт vesa_modeline_gen.pl, он лежит в подкаталоге scripts. Запускаем его, он задает нам вопросы о метрике монитора и немного правит файлик arch/i386/boot/vesafb_modes.h. Осталось собрать ядро стандартным образом, и нам доступны видеорежимы с максимально возможными частотами обновления. Доступ к ним производится через тот же аргумент ядра "vga", просто появляется дополнительная таблица режимов.

Назад на стр. 046-018-3  Содержание  Вперед на стр. 046-018-5