Низкоуровневая графика Linux

11

В образовательных целях я хотел бы написать приложение в среде Linux, которое может обрабатывать события клавиатуры и рисовать графику без огромных зависимостей, таких как X или SDL. Я предполагаю, что это должно быть возможно, потому что X и SDL являются просто программами, поэтому они должны полагаться на другие методы, присущие среде. Это понимание правильно?

Если да, где я могу научиться писать такую ​​программу? Мой ограниченный опыт говорит мне, что это будет включать в себя вызовы ядра и / или запись в специальные файлы; Тем не менее, я не смог найти какие-либо учебники по этому вопросу (я даже не уверен, что с Google).

Также, если это актуально, я запускаю Debian Squeeze на Virtualbox. Я использовал компакт-диск netinst без подключения к сети, поэтому в настоящее время на нем установлено не так много. Я установлю gcc, но я надеюсь, что смогу обойтись ни с чем больше.

math4tots
источник
Я не знаю, если это то, что вы ищете, но это дает цвет. ncurses
Джо
Возможно, вы захотите взглянуть на Linux Framebuffer .
Mouviciel
В дополнение к X и fbdev, есть также SVGALib, который не обновлялся с 2001 года.
user16764
Если вы действительно хотите заниматься программированием на голом железе (например, вызывать прерывание для установки режима видео), могу ли я предложить DOS?
user16764
Это выглядит полезным: tldp.org/HOWTO/Framebuffer-HOWTO
Chinasaur

Ответы:

13

X (или X Window System ) - практически самый низкоуровневый графический API, который приложение Linux, вероятно, будет использовать на современном рабочем столе Linux. Большинство приложений даже не будут углубляться в это и будут использовать реализацию инструментария GUI, такую ​​как GTK или Qt.

Ниже представлены только драйверы оборудования и, возможно, некоторые X-внутренние API для драйверов. Но они не предназначены и не предназначены для использования в обычных приложениях пользовательского пространства.

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

Редактировать: Wayland является альтернативой X, которая только недавно нашла широкое распространение. Теперь возможно запускать Linux-Desktop исключительно на Wayland без работающей системы X-Windows. Сам Wayland зависит от драйвера EGL (API, тесно связанный с OpenGL).

Йоахим Зауэр
источник
2
X может использовать кадровый буфер. GTK и Qt, хотя обычно нацелены на X, также могут нацеливаться на кадровый буфер.
AProgrammer
@AProgrammer: это правда, но это не меняет моего ответа. Большинство приложений GTK / Qt работают на X как на базовой платформе (по крайней мере, на данный момент), и почти ни одно приложение не использует непосредственный исходный интерфейс X API.
Иоахим Зауэр
Кадровый буфер должен, по крайней мере, поддерживать работу видеокарты в стандартных режимах VESA. Возможно, он не идеален (например, количество разных разрешений ограничено, и я не думаю, что поддерживаются какие-либо широкоэкранные режимы), но он даст вам графику в системе Linux с минимальным количеством зависимостей.
CVn
9

Если вы хотите получать входные события без использования X, вам придется считывать их с узлов устройства. В Linux есть общая подсистема ввода, называемая evdev, которой пользуется большинство драйверов. Таким образом, для чтения входных событий вы можете читать с любого из узлов устройства в / dev / input.

Простой способ найти узел устройства мыши - запустить «кошку» на узлах устройства по одному, перемещая мышь во время каждой «кошки». Если вы видите данные, поступающие на экран, то это ваш узел устройства мыши. Соответствующий заголовочный файл - linux / input.h. Для примера того, как его использовать, посмотрите на источник для драйвера xevdev.

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

ssgriffonuser
источник
3

Хорошее руководство для низкоуровневой графики в Linux доступно здесь .

Хороший пост о переполнении стека для низкоуровневого ввода доступен здесь .

Несмотря на это, вы, вероятно, захотите использовать framebuffer или drm / kms (framebuffer - самый простой из двух) для графики и evdev для прямого ввода в Linux.

Vreality
источник
Почему отрицательный голос?
Виртуальность