Düşük seviye Linux grafikleri


12

Eğitim amaçlı olarak, Linux ortamlarında X veya SDL gibi büyük bağımlılıklar olmadan klavye olaylarını işleyebilen ve grafik çizebilen bir uygulama yazmak istiyorum. Bunun mümkün olması gerektiğini düşünüyorum, çünkü X ve SDL sadece programların kendisidir, bu yüzden çevreye özgü diğer yöntemlere güvenmelidirler. Bu anlayış doğru mu?

Öyleyse, böyle bir programı yazmayı nereden öğrenebilirim? Sınırlı tecrübem bana çekirdeğe çağrı yapmayı ve / veya özel dosyalara yazmayı içereceğini söylüyor; ancak, konuyla ilgili herhangi bir öğretici bulamadım (Google'a ne yapacağımdan bile emin değilim).

Ayrıca, ilgili olması durumunda, Virtualbox üzerinde Debian Squeeze kullanıyorum. Ağ olmadan bir netinst cd kullandım, bu yüzden şu anda yüklü bir şey yok. Yükleyeceğim gcc, ama daha fazla bir şey yapamayacağımı umuyorum.


Aradığın şey bu mu bilmiyorum ama renk veriyor. ncurses
Joe

Linux Framebuffer'a bir göz atmak isteyebilirsiniz .
mouviciel

X ve fbdev'e ek olarak, 2001'den beri güncellenmemiş SVGALib de var.
user16764

Gerçekten çıplak metal programlama yapmak istiyorsanız (örneğin, video modunu ayarlamak için bir kesinti çağırma), DOS'u önerebilir miyim?
user16764

Bu yararlı görünüyor: tldp.org/HOWTO/Framebuffer-HOWTO
Chinasaur

Yanıtlar:


13

X (veya X Pencere Sistemi ), bir Linux uygulamasının modern bir Linux Masaüstünde kullanacağı neredeyse en düşük seviyeli grafik API'sidir. Çoğu uygulama bu kadar derinlere gitmeye bile uğramaz ve bunun yerine GTK veya Qt gibi bir GUI araç seti uygulaması kullanır.

Aşağıda sadece donanım sürücüleri ve muhtemelen sürücüler için bazı X-dahili API'ler var. Ancak bunlar normal kullanıcı alanı uygulamaları tarafından kullanılmak üzere tasarlanmamış veya tasarlanmamıştır.

Çekirdek framebuffer aygıtını (fbdev) kullanabilirsiniz, ancak bunun modern grafik API'sini ne kadar iyi desteklediğini bilmiyorum.

Düzenleme: Wayland sadece son zamanlarda bazı ana akım benimseme bulmuştur X bir alternatiftir. Artık bir Linux-Masaüstünü tamamen Wayland üzerinde çalıştırmak ve hiçbir X-Windows sistemi çalışmaz. Wayland, altındaki bir EGL sürücüsüne (OpenGL ile güçlü bir şekilde ilişkili bir API) bağlıdır.


2
X çerçeve arabelleğini kullanabilir. GTK ve Qt, genellikle X'i hedeflerken, çerçeve arabelleğini de hedefleyebilir.
AProgrammer

@AProgrammer: bu doğru, ama cevabımı gerçekten değiştirmiyor. Çoğu GTK / Qt uygulaması, temel çerçevede olduğu gibi (en azından şimdilik) X üzerinde çalışır ve neredeyse hiçbir uygulama doğrudan ham X API'yi kullanmaz.
Joachim Sauer

Çerçeve arabelleği, en azından grafik kartının standart VESA modlarında çalışmasını desteklemelidir. Mükemmel olmayabilir (örneğin, farklı çözünürlüklerin sayısı sınırlıdır ve herhangi bir geniş ekran modunun desteklendiğini düşünmüyorum), ancak minimum sayıda bağımlılığa sahip bir Linux sisteminde grafik verecektir.
CVN

9

X kullanmadan girdi olayları almak istiyorsanız, bunları cihaz düğümlerinden okumalısınız. Linux, çoğu sürücünün yararlandığı evdev adında genel bir girdi alt sistemine sahiptir. Böylece giriş olaylarını okumak için / dev / input içindeki herhangi bir aygıt düğümünden okuyabilirsiniz.

Fare aygıtı düğümünü bulmak için kolay bir numara, her bir "kedi" sırasında fareyi hareket ettirerek aygıt düğümlerinde "kedi" yi tek tek çalıştırmaktır. Ekrana veri geliyorsa, o zaman bu fare cihazı düğümüdür. İlgili başlık dosyası linux / input.h'dir. Nasıl kullanılacağına dair bir örnek için xevdev sürücüsü kaynağına bakın.

Düşük seviyeli grafik manipülasyonu için, gerçekten iddialı hissediyorsanız, genellikle çerçeve arabelleğini hafızaya eşleyebilir ve kendi bit lekelerinizi yapabilirsiniz.


4

Linux'ta düşük seviyeli grafikler için iyi bir öğretici burada bulunabilir .

Düşük seviyeli giriş için yığın taşması üzerine iyi bir yazı burada bulunabilir .

Ne olursa olsun, grafikler için Linux'ta doğrudan giriş için framebuffer veya drm / kms (framebuffer ikisi daha basittir) ve evdev kullanmak istersiniz.


Neden inişli çıkışlı?
Vreality
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.