低级Linux图形


11

出于教育目的,我想在Linux环境下编写一个应用程序,该应用程序可以处理键盘事件并绘制图形而没有诸如X或SDL之类的巨大依赖。我认为这是必须可行的,因为X和SDL本身就是程序,因此它们必须依赖于环境固有的其他方法。这种理解正确吗?

如果是这样,我在哪里可以学习编写这样的程序?我有限的经验告诉我,这将涉及到调用内核和/或写入特殊文件。但是,我还没有找到有关此问题的任何教程(我什至不知道Google应该怎么做)。

另外,如果相关,我将在Virtualbox上运行Debian Squeeze。我使用的netinst cd没有联网功能,因此当前没有太多安装。我将安装gcc,但我希望仅此而已。


我不知道这是否是您要寻找的东西,但它能赋予颜色。ncurses

您可能需要看一下Linux Framebuffer
mouviciel 2012年

除了X和fbdev外,还有SVGALib,自2001
。– user16764 2012年

如果您真的想进行裸机编程(例如,调用中断以设置视频模式),我是否建议使用DOS?
user16764 2012年

Answers:


13

X(或X Window系统)实际上是Linux应用程序在现代Linux桌面上可能使用的最底层的图形API。大多数应用程序都不会花那么多钱,而是会使用GUI工具箱实现(例如GTK或Qt)。

在此之下,仅存在硬件驱动程序,并且可能还有一些X-内部API用于驱动程序。但是,这些并非旨在或不旨在由普通用户空间应用程序使用。

您可以使用内核帧缓冲设备(fbdev),但我不知道它对现代图形API的支持程度。

编辑: Wayland是X的替代方法,X直到最近才被主流采用。现在,可以完全在Wayland上运行Linux-Desktop,而根本不运行X-Windows系统。Wayland本身依赖于下面的EGL驱动程序(与OpenGL密切相关的API)。


2
X能够使用帧缓冲区。GTK和Qt通常以X为目标,但也可以以帧缓冲区为目标。
AProgrammer 2012年

@AProgrammer:是的,但这并没有真正改变我的答案。大多数 GTK / Qt应用程序都像在基础框架上一样(至少到目前为止)在X上运行,并且几乎没有应用程序直接使用原始X API。
约阿希姆·绍尔

帧缓冲区至少应支持在标准VESA模式下运行图形卡。它可能并不完美(例如,不同分辨率的数量有限,并且我不支持任何宽屏模式),但是它将为您提供在Linux系统上具有最少依赖关系的图形。
CVn 2012年

9

如果要在不使用X的情况下获取输入事件,则必须从设备节点中读取它们。Linux具有称为evdev的通用输入子系统,大多数驱动程序都可以利用该子系统。因此,要读取输入事件,您可以从/ dev / input中的任何设备节点读取。

找到鼠标设备节点的一个简单技巧是一次在设备节点上运行“ cat”,并在每个“ cat”期间移动鼠标。如果您看到数据从屏幕上流出,那就是您的鼠标设备节点。相关的头文件是linux / input.h。有关如何使用它的示例,请查看xevdev驱动程序的源代码。

对于低级图形操作,如果您真的有野心,通常可以对帧缓冲区进行内存映射并执行自己的blt。


3

此处提供有关Linux下低级图形的良好教程。

此处提供有关低水平输入的堆栈溢出的好文章。

无论如何,您可能要使用framebuffer或drm / kms(framebuffer是两者中的简单者)来进行图形处理,而evdev可以用于在Linux上直接输入。


为什么要下票?
Vreality '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.