Grafika Linuksa niskiego poziomu

11

W celach edukacyjnych chciałbym napisać aplikację w środowisku Linux, która może przetwarzać zdarzenia klawiatury i rysować grafikę bez ogromnych zależności, takich jak X lub SDL. Zakładam, że to musi być możliwe, ponieważ X i SDL to same programy, więc muszą polegać na innych metodach właściwych dla środowiska. Czy to zrozumienie jest prawidłowe?

Jeśli tak, to gdzie mogę nauczyć się pisać taki program? Moje ograniczone doświadczenie mówi mi, że wymagałoby to wywoływania jądra i / lub pisania specjalnych plików; jednak nie udało mi się znaleźć żadnych samouczków na ten temat (nie jestem nawet pewien, co Google).

Ponadto, jeśli jest to istotne, uruchamiam Debian Squeeze na Virtualbox. Użyłem płyty netinst bez sieci, więc obecnie nie ma na niej wiele zainstalowanych. Zainstaluję gcc, ale mam nadzieję, że dam sobie radę z niczym więcej.

math4tots
źródło
Nie wiem, czy tego właśnie szukasz, ale nadaje kolor. ncurses
Joe
Możesz zajrzeć do Linux Framebuffer .
mouviciel
Oprócz X i fbdev istnieje także SVGALib, który nie był aktualizowany od 2001 roku.
user16764
Jeśli naprawdę chcesz programować bez systemu operacyjnego (np. Wywołując przerwanie w celu ustawienia trybu wideo), czy mogę zasugerować DOS?
user16764
Wygląda to pomocne: tldp.org/HOWTO/Framebuffer-HOWTO
Chinasaur

Odpowiedzi:

13

X (lub X Window System ) to praktycznie najbardziej graficzny interfejs API niskiego poziomu, którego aplikacja Linux prawdopodobnie użyje na nowoczesnym pulpicie Linux. Większość aplikacji nawet nie zadaje sobie trudu, aby przejść tak głęboko i zamiast tego korzysta z implementacji zestawu narzędzi GUI, takich jak GTK lub Qt.

Poniżej znajdują się tylko sterowniki sprzętowe i prawdopodobnie niektóre X-wewnętrzne interfejsy API dla sterowników. Ale nie są one przeznaczone ani zaprojektowane do użytku przez zwykłe aplikacje w przestrzeni użytkownika.

Możesz użyć urządzenia bufora ramki jądra (fbdev), ale nie wiem, jak dobrze obsługuje nowoczesny interfejs graficzny API.

Edycja: Wayland jest alternatywą dla X, która dopiero niedawno znalazła zastosowanie w głównym nurcie. Możliwe jest teraz uruchamianie Linux-Desktop wyłącznie na Wayland, bez żadnego systemu X-Windows. Sam Wayland zależy od sterownika EGL (interfejs API silnie powiązany z OpenGL).

Joachim Sauer
źródło
2
X może używać bufora ramki. GTK i Qt, podczas gdy zwykle celują w X, mogą również celować w bufor ramki.
AProgrammer
@AProgrammer: to prawda, ale tak naprawdę nie zmienia mojej odpowiedzi. Większość aplikacji GTK / Qt działa na X w podstawowej strukturze (przynajmniej na razie) i prawie żadna aplikacja nie korzysta bezpośrednio z surowego X API.
Joachim Sauer
Bufor ramki powinien co najmniej obsługiwać uruchamianie karty graficznej w standardowych trybach VESA. Może to nie być idealne (na przykład liczba różnych rozdzielczości jest ograniczona i nie sądzę, aby obsługiwane były żadne tryby szerokoekranowe), ale da ci grafikę w systemie Linux z minimalną liczbą zależności.
CVn
9

Jeśli chcesz otrzymywać zdarzenia wejściowe bez użycia X, będziesz musiał odczytać je z węzłów urządzenia. Linux ma ogólny podsystem wejściowy o nazwie evdev, z którego korzysta większość sterowników. Aby odczytać zdarzenia wejściowe, możesz odczytać z dowolnego węzła urządzenia w / dev / input.

Łatwym sposobem na znalezienie węzła urządzenia myszy jest uruchomienie „kota” na węzłach urządzenia pojedynczo, przesuwając mysz podczas każdego „kota”. Jeśli widzisz dane wychodzące na ekran, oznacza to, że jest to twój węzeł urządzenia myszy. Odpowiednim plikiem nagłówkowym jest linux / input.h. Aby dowiedzieć się, jak go używać, zobacz źródło sterownika xevdev.

W przypadku manipulacji grafiką na niskim poziomie, jeśli naprawdę czujesz się ambitny, możesz generalnie zmapować pamięć bufora ramki i zrobić własne bity.

ssgriffonuser
źródło
3

Dobry samouczek dotyczący grafiki niskiego poziomu w systemie Linux jest dostępny tutaj .

Dobry wpis dotyczący przepełnienia stosu dla danych wejściowych niskiego poziomu jest dostępny tutaj .

Niezależnie od tego, prawdopodobnie chcesz użyć bufora ramki lub drm / kms (bufor ramki jest najprostszy z tych dwóch) do grafiki i evdev do bezpośredniego wprowadzania w Linuksie.

Rzeczywistość
źródło
Dlaczego głosowanie negatywne?
Vreality