Графіка низького рівня Linux


11

Для освітніх цілей я хотів би написати програму в середовищі Linux, яка може обробляти події на клавіатурі та малювати графіку без величезних залежностей, таких як X або SDL. Я припускаю, що це повинно бути можливим, оскільки X і SDL - це лише самі програми, тому вони повинні спиратися на інші методи, притаманні навколишньому середовищу. Чи правильно це розуміння?

Якщо так, то де я можу навчитися писати таку програму? Мій обмежений досвід говорить про те, що це передбачало б дзвінки до ядра та / або запис у спеціальні файли; проте мені не вдалося знайти жодних навчальних посібників з цього питання (я навіть не впевнений, що робити Google).

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


Я не знаю, чи саме це ви шукаєте, але це дає колір. ncurses
Joe

Ви можете поглянути на Linux Framebuffer .
mouviciel

Окрім X та fbdev, є також SVGALib, який не оновлювався з 2001 року
user16764

Якщо ви дійсно хочете зайнятись програмуванням голого металу (наприклад, викликати переривання для встановлення режиму відео), я можу запропонувати DOS?
user16764

Це виглядає корисно: tldp.org/HOWTO/Framebuffer-HOWTO
Chinasaur

Відповіді:


13

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

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

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

Редагувати: Wayland - це альтернатива X, яка лише нещодавно знайшла деяке основне прийняття. Тепер можна запустити Linux-робочий стіл виключно на 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.

Для графічного маніпулювання низьким рівнем, якщо ви дійсно почуваєте себе честолюбним, ви можете, як правило, пам'ятати карту фреймбуфера і робити власні бітові фрагменти.


3

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

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

Незалежно від того, ви, мабуть, хочете використовувати framebuffer або drm / kms (framebuffer є простішим з двох) для графіки та evdev для прямого введення в Linux.


Чому потік?
Vreality
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.