Ответ 1
Вы можете посмотреть исходный код fbi, средство просмотра изображений, которое использует фреймбуфер linux. Вы можете получить его здесь: http://linux.bytesex.org/fbida/
Есть ли какая-либо документация о том, как писать программное обеспечение, использующее устройство framebuffer в Linux? Я видел несколько простых примеров, которые в основном говорят: "откройте его, mmap его, напишите пиксели в отображаемую область". Но нет исчерпывающей документации о том, как использовать разные IOCTLS для чего-либо. Я видел ссылки на "панорамирование" и другие возможности, но "googling it" дает слишком много хитов бесполезной информации.
Изменить: Является ли только документация с точки зрения программирования, а не "Пользователь, как настроить вашу систему на использование fb", документируйте код?
Вы можете посмотреть исходный код fbi, средство просмотра изображений, которое использует фреймбуфер linux. Вы можете получить его здесь: http://linux.bytesex.org/fbida/
- Похоже, что может быть не так много вариантов программирования с помощью fb из пользовательского пространства на рабочем столе, кроме того, что вы упомянули. Это может быть одной из причин, почему некоторые из документов настолько стары. Посмотрите на это руководство для драйверов драйверов устройств и на которые ссылаются некоторые официальные документы linux: www.linux-fbdev.org [slash] HOWTO [slash] index.html. Он не ссылается на слишком много интерфейсов. Хотя просмотр исходного дерева linux предлагает более сложные примеры кода.
- opentom.org [slash] Hardware_Framebuffer не предназначен для среды рабочего стола. Это подкрепляет основную методологию, но, похоже, не позволяет объяснить все ингредиенты, необходимые для выполнения "быстрого" двойного переключения буфера, о котором упоминается. Другой для другого устройства и который оставляет некоторые ключевые данные буферизации: wiki.gp2x.org [slash] wiki [slash] Writing_to_the_framebuffer_device, хотя он хотя бы предполагает, что вы можете использовать fb1 и fb0 для включения двойной буферизации (на этом устройство.. хотя для рабочего стола fb1 может оказаться невозможным или может иметь доступ к другому оборудованию), что использование ключевого слова volatile может быть подходящим и что мы должны обратить внимание на vsync.
- asm.sourceforge.net [slash] articles [slash] fb.html подпрограммы языка ассемблера, которые также появляются (?), чтобы просто выполнить основы запроса, открытия, установки нескольких основ, mmap, значений пикселов чертежа хранения и копирования в fb-память (убедитесь, что вы используете короткий цикл stosb, я полагаю, а не более длинный подход).
- Остерегайтесь 16 комментариев bpp при буфере поиска в буфере Linux: я использовал fbgrab и fb2png во время X-сессии безрезультатно. Каждый из них отображал изображение, которое предлагало снимок экрана моего рабочего стола, как если бы изображение рабочего стола было снято с использованием очень плохой камеры, под водой, а затем переэкспонировано в темной комнате. Изображение было полностью разбито по цвету, размеру и отсутствию большого количества деталей (пунктир по всему с пиксельными цветами, которые не принадлежали). Кажется, что /proc/sys на компьютере, который я использовал (новое ядро с незначительными модификациями.. от производной PCLOS) утверждают, что fb0 использует 16 бит/с, и большинство вещей, которые я искал Google, указывали что-то в этих строках, но эксперименты приводят меня к совсем другой вывод. Помимо результатов этих двух отказов от стандартных утилит захвата буфера (для версий, принадлежащих этому дистрибутиву), которые могли принять 16 бит, у меня был другой успешный результат теста, обрабатывающий данные пикселя буфера кадра как 32 бита. Я создал файл из данных, втянутых через cat/dev/fb0. Размер файла закончился 1920000. Затем я написал небольшую программу на C, чтобы попытаться манипулировать этими данными (в предположении, что это были пиксельные данные в некотором кодировании или другие). Я прибил его в конце концов, и формат пикселей соответствовал тому, что я получил от X при запросе (TrueColor RGB 8 бит, без альфа, но дополнен до 32 бит). Обратите внимание на другой ключ: мое разрешение экрана 800x600 раз 4 байта дает 1920000 точно. 16-битный подход, который я попробовал на начальном этапе, полностью создал аналогичное сломанное изображение для fbgrap, поэтому мне не нравится, если бы я не искал нужные данные. [Сообщите мне, хотите ли вы код, который я использовал для проверки данных. В основном, я просто читал весь дамп fb0, а затем выплевывал его обратно в файл после добавления заголовка "P6\n800 600\n255\n", который создает подходящий файл ppm, и в то же время перебирает все пиксели, манипулируя их порядком или расширяя их, с конечным успешным результатом для меня, чтобы сбросить каждый четвертый байт и переключить первый и третий на каждые 4 байта. Короче говоря, я превратил явный BGB fb0 в ppm файл RGB. ppm можно просмотреть со многими программами просмотра pic на Linux.]
- Возможно, вам захочется пересмотреть причины, по которым нужно программировать с помощью fb0 (это также может объяснить, почему существует несколько примеров). Вы не можете добиться каких-либо значительных успехов в производительности по сравнению с X (это был мой, если был ограничен опыт), отказавшись от преимуществ использования X. Эта причина также может объяснить, почему существует несколько примеров кода.
- Обратите внимание, что DirectFB не является fb. DirectFB в последнее время получил больше любви, чем старший fb, так как он больше ориентирован на более сексуальный 3D hw accel. Если вы хотите сделать рендеринг на рабочем столе как можно быстрее, не используя аппаратное ускорение 3D (или даже ускорение 2d hw), тогда fb может быть прекрасным, но не даст вам ничего, что X не дает вам. X, по-видимому, использует fb, и накладные расходы, вероятно, незначительны по сравнению с другими расходами, которые, вероятно, будут иметь ваши программы (не назовите X в любом жестком цикле, а вместо этого в конце, когда вы настроили все пиксели для фрейма). С другой стороны, он может быть аккуратным, чтобы поиграть с fb, как описано в этом комментарии: Покрасить пиксели на экран через Linux FrameBuffer
Проверьте источники MPlayer.
В каталоге /libvo имеется много плагинов Video Output, используемых Mplayer для отображения мультимедиа. Там вы можете найти плагин fbdev (vo_fbdev * sources), который использует буфер фрейма Linux.
Существует много вызовов ioctl со следующими кодами:
Это не похоже на хорошую документацию, но это, безусловно, хорошая реализация приложения.
Посмотрите исходный код любого из: fbxat, fbida, fbterm, fbtv, directFB library, libxineliboutput-fbe, ppmtofb, xserver-fbdev, все это приложения для пакетов debian. Просто apt-get источник из библиотек debian. есть много других...
hint: поиск фреймбуфера в описании пакета с помощью вашего любимого менеджера пакетов.
ok, даже если чтение кода иногда называется "Документация по Гуру", это может быть слишком много, чтобы на самом деле это сделать.
Источник любого заставки (т.е. во время загрузки) должен дать вам хорошее начало.