ลินุกซ์กราฟิกระดับต่ำ


11

เพื่อจุดประสงค์ด้านการศึกษาฉันต้องการเขียนแอปพลิเคชันบนสภาพแวดล้อม Linux ที่สามารถประมวลผลเหตุการณ์แป้นพิมพ์และวาดภาพกราฟิกโดยไม่ต้องพึ่งพา X หรือ SDL ขนาดใหญ่ ฉันคิดว่าสิ่งนี้จะต้องเป็นไปได้เพราะ X และ SDL เป็นเพียงโปรแกรมตัวเองดังนั้นพวกเขาจึงต้องพึ่งพาวิธีการอื่น ๆ ที่มีอยู่ในสภาพแวดล้อม ความเข้าใจนี้ถูกต้องหรือไม่

ถ้าเป็นเช่นนั้นฉันจะเรียนรู้การเขียนโปรแกรมได้ที่ไหน? ประสบการณ์ที่ จำกัด ของฉันบอกฉันว่ามันจะเกี่ยวข้องกับการโทรไปยังเคอร์เนลและ / หรือการเขียนไปยังไฟล์พิเศษ อย่างไรก็ตามฉันไม่สามารถหาบทช่วยสอนใด ๆ ในเรื่องนี้ (ฉันไม่แน่ใจด้วยซ้ำว่าจะใช้ Google)

นอกจากนี้ในกรณีที่มีความเกี่ยวข้องฉันใช้ Debian Squeeze บน Virtualbox ฉันใช้แผ่นซีดี netinst โดยไม่ใช้ระบบเครือข่ายดังนั้นจึงยังไม่มีการติดตั้งในส่วนนี้มากนัก ฉันจะติดตั้งgccแต่ฉันหวังว่าฉันจะได้รับโดยไม่มีอะไรเพิ่มเติม


ฉันไม่รู้ว่านี่คือสิ่งที่คุณต้องการหรือเปล่า แต่มันให้สี ncurses
Joe

คุณอาจต้องการที่จะดูไปที่ลินุกซ์ Framebuffer
mouviciel

นอกจาก X และ fbdev แล้วยังมี SVGALib ซึ่งยังไม่ได้รับการอัปเดตตั้งแต่ปี 2544
user16764

หากคุณต้องการทำการเขียนโปรแกรมโลหะเปลือย (เช่นเรียกการขัดจังหวะเพื่อตั้งค่าโหมดวิดีโอ) ฉันขอแนะนำ DOS ได้ไหม
user16764

สิ่งนี้มีประโยชน์: tldp.org/HOWTO/Framebuffer-HOWTO
Chinasaur

คำตอบ:


13

X (หรือX Window System ) เป็นกราฟิก API ระดับต่ำที่สุดที่แอปพลิเคชั่นลีนุกซ์จะใช้กับ Linux Desktop ที่ทันสมัย แอปพลิเคชั่นส่วนใหญ่จะไม่สนใจว่าจะไปถึงที่ลึกและแทนที่จะใช้ชุดเครื่องมือ GUI เช่น GTK หรือ Qt

ด้านล่างมีเพียงไดรเวอร์ฮาร์ดแวร์และ X-internal APIs สำหรับไดรเวอร์ แต่สิ่งเหล่านั้นไม่ได้มีความหมายหรือออกแบบมาให้ใช้งานโดยแอปพลิเคชัน userspace ปกติ

คุณสามารถใช้อุปกรณ์เคอร์เนล framebuffer (fbdev) แต่ฉันไม่รู้ว่ารองรับ API กราฟิกที่ทันสมัยได้ดีเพียงใด

แก้ไข: Waylandเป็นอีกทางเลือกหนึ่งของ X ที่เพิ่งพบการใช้งานหลักบางอย่างเมื่อเร็ว ๆ นี้ ตอนนี้สามารถเรียกใช้ Linux-Desktop ได้อย่างหมดจดบน Wayland โดยที่ไม่มีระบบ X-Windows ทำงานเลย Wayland นั้นขึ้นอยู่กับไดรเวอร์EGL ที่อยู่ด้านล่าง (API ที่เกี่ยวข้องอย่างยิ่งกับ OpenGL)


2
X สามารถใช้ framebuffer GTK และ Qt โดยปกติแล้วจะกำหนดเป้าหมายที่ X ก็สามารถกำหนดเป้าหมายไปที่ framebuffer ได้เช่นกัน
AProgrammer

@AProgrammer: จริง แต่มันก็ไม่ได้เปลี่ยนคำตอบของฉัน แอพพลิเคชั่น GTK / Qt ส่วนใหญ่รันบน X ตามเฟรมเวิร์กพื้นฐาน (อย่างน้อยตอนนี้) และแทบจะไม่มีแอพพลิเคชั่นใดที่ใช้ raw X API โดยตรง
โจอาคิมซาวเออ

อย่างน้อยที่สุด framebuffer ควรรองรับการใช้งานกราฟิกการ์ดในโหมด VESA มาตรฐาน มันอาจจะไม่สมบูรณ์แบบ (จำนวนความละเอียดที่แตกต่างกันมี จำกัด เช่นกันและฉันไม่คิดว่าโหมดไวด์สกรีนใด ๆ ได้รับการรองรับ) แต่มันจะให้กราฟิกในระบบ Linux ที่มีจำนวนการพึ่งพาขั้นต่ำ
CVn

9

หากคุณต้องการรับเหตุการณ์การป้อนข้อมูลโดยไม่ใช้ X คุณจะต้องอ่านจากโหนดอุปกรณ์ Linux มีระบบย่อยอินพุตทั่วไปชื่อ evdev ซึ่งไดรเวอร์ส่วนใหญ่ใช้ประโยชน์จาก ดังนั้นเพื่ออ่านเหตุการณ์อินพุตคุณสามารถอ่านจากโหนดอุปกรณ์ใด ๆ ใน / dev / input

เคล็ดลับง่ายๆในการค้นหาโหนดอุปกรณ์เมาส์คือการเรียกใช้ "cat" บนโหนดอุปกรณ์ทีละตัวเลื่อนเมาส์ระหว่าง "cat" แต่ละตัว หากคุณเห็นข้อมูลออกมาที่หน้าจอแสดงว่าเป็นโหนดอุปกรณ์เมาส์ของคุณ ไฟล์ส่วนหัวที่เกี่ยวข้องคือ linux / input.h สำหรับตัวอย่างของวิธีการใช้ดูแหล่งที่มาของไดรเวอร์ xevdev

สำหรับการปรับแต่งกราฟิกระดับต่ำหากคุณรู้สึกทะเยอทะยานจริงๆคุณสามารถแมปหน่วยความจำ framebuffer และทำบิต blts ของคุณเอง


3

กวดวิชาที่ดีสำหรับกราฟิกระดับต่ำบน Linux สามารถใช้ได้ที่นี่

โพสต์ที่ดีในกองล้นสำหรับการป้อนข้อมูลในระดับต่ำสามารถใช้ได้ที่นี่

ไม่ว่าคุณอาจต้องการใช้ framebuffer หรือdrm / kms (framebuffer ที่ง่ายกว่าของทั้งสอง) สำหรับกราฟิกและ evdev สำหรับอินพุตโดยตรงบน Linux


ทำไมต้องลงคะแนน?
Vreality
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.