Колонка редактора
Как это работает
Профессионал
Новости
Вопросы и ответы
Литература


Начальная страница
E-mail


Framebuffer в Linux'e и как его использовать.

Что и зачем оно надо...
Коротко - это устройство позволяющее работать с видео адаптером, что-то типа /dev/cuaXX, только для видеоадаптера. Это нововидение появилось недавно в ядрах серии 2.1.x - 2.2.x, на мой взгляд, полезное новшество. Оно позволяет вам менять разрешение любимой текстовой консоли, так как вам нравиться, а также, к примеру, при загрузке вывести любимое животное на экран, ПИНГВИНА! :-) Со стороны пользователя...
Выглядит это все как обыкновенные char-device'ы с major'ом 28 и минором в зависимости от видюшки, в /dev. Всего ох создается 8 штук... 0 = /dev/fb0 1-ый framebuffer 32 = /dev/fb1 2-ой framebuffer ... 224 = /dev/fb7 8-ой framebuffer Вобщем-то framebuffer "нормальный" memory-device, это означает, что вы можете сделать, например, так: cp /dev/fb0 filename и получите screenshot с экрана. :-) (соответственно следите за правами доступа на этих device'ах). Но в тоже время, если ваш видеоадаптер имеет несколько функций то fb0...fb8 могут выполнять разные функции и работать независимо друг от друга. (правда, так и не удалось попробовать). Кроме прелестей в консоли framebuffer дает возможность запускать через себя разные приложения... например X-Server.. вы спросите: - а зачем оно и так работает? а ответ прост. Представьте себе ситуацию.. вы обладатель безымянной видиокарты... framebuffer на ура с ней, а X-ы ну никак толи сервер не тот толи еще что-то... вы легким нажатием клавиш ставите универсальный XF86_FBServer, и прекрасно себя чувствуете без лишних проблем. (ну где-то вот так) :-) По default X-server использует /dev/fb0 (старый /dev/fb0current - можете сделать симлик /dev/fb0 -> /dev/fb0current), имеется возможность указывать framebuffer через shell-environment'ы: export FRAMEBUFFER=/dev/fb1 или (csh клоны) setenv FRAMEBUFFER /dev/fb1 после определения этой переменной X-server будет использовать /dev/fb0. Про программирование с использованием framebuffer'а ничего не скажу - бог миловал заниматься этим. :-) Как рулить всем этим хозяйством...
Как можно догадаться, без соответствующего управляющего ПО, framebuffer вам вряд ли пригодится. Для управления существует замечательная программка - 'fbset'. В использование она проста и не требует сверхестественных умений или знаний. Пара примеров: 1. fbset 1024x768-100 - ставит разрешение в данной консоли 1024x768 100Hz но данное разрешение должно быть описано в db файле /etc/fb.modes. поставляется в комплекте с fbset, но желательно поработать над этим файликом "напильником". ;-) (он страшно default). 2. fbset -xres 800 -yres 600 -depth 8 - соответственно 800x600 и глубина цвета 8 bit. Частота развертки устанавливается параметрами -hsync, -vsync...и прочие. :-) Поддержка определенных видов видеоадаптеров...
По default'у система использует VESA драйвер, но есть и special-designed драйверочки. 1. Matrox - драйвер для Matrox'ов для Intel, PPC и Alpha платформ. Конкретного списка карт производимых Matrox`ом нет, но насколько известно мне поддерживаются все видеоадаптеры. Чтобы системе сказать, что у вас Matrox, надо в /etc/lilo.conf в строке append="...." добавить значение "video=matrox:options". Об опциях смотрите документацию к драйверу. (..../linux/Documentation/fb/matroxfb.txt) 2. Видео карты на чипе Perbedia2 (Diamond Multimedia). Списка также нет, я побывал на Diamond FireGL 1000 Pro и остался доволен. Включается аналогично "video=Permedia2:options", доки по опциям я так и не нашел и оставил default`ые. 3. VESA driver. - Соответственно все адаптеры знающие что такое VESA 2.0 :-) Для установки разрешения перед загрузкой в lilo.conf поставьте опцию "vga=ask". При загрузке ядра вы увидите приглашение либо установить video-mode (нажать Enter) либо продолжить (нажать пробел). Жмине пробел. Вам вывалиться табличка.(это будет не то что вам надо) Заранее посмотрите видеорежимы: VESA коды: | 640x480 800x600 1024x768 1280x1024 ----+------------------------------------- 256 | 0x101 0x103 0x105 0x107 32k | 0x110 0x113 0x116 0x119 64k | 0x111 0x114 0x117 0x11A 16M | 0x112 0x115 0x118 0x11B Kernel_code = Vesa_code + 0x200. Kernel коды: | 640x480 800x600 1024x768 1280x1024 ----+------------------------------------- 256 | 0x301 0x303 0x305 0x307 32k | 0x310 0x313 0x316 0x319 64k | 0x311 0x314 0x317 0x31A 16M | 0x312 0x315 0x318 0x31B в промте вводите номер моды, скажем если это 1024x768x64k, то вводите 317. для Matrox'ов свои таблицы. см. .../linux/Documentation/fb/matroxfb.txt для Permedia я пользовался стандартными VESA режимами. ... за более детальной информацией обращайтесь в документацию или к разработчикам. P.S. Не забудьте включить FrameBuffer в kernel`е :-) Где взять...
Все необходимое лежит по этому адресу: ftp://ftp.uni-erlangen.de/pub/Linux/LOCAL/680x0/ Идея создания принадлежит Martin Schaller. Данное info на 60% срисованно с родной доки :), Sergey Minakov (25.05.99)