一个简单的屏幕/监视器设备使用哪种Linux驱动程序子系统/API?

9
我正在开发一个嵌入式系统,具备触摸屏幕。触摸屏幕既能作为输入又能作为输出,具有图形化输出的“虚拟”键盘覆盖。
我已经有一个工作正常的设备驱动程序,可以从触摸传感器读取输入并正确地将其转换为按键输入,该驱动程序是在kernel.org上的指南的帮助下创建的。我想扩展这个驱动程序,使其还能处理向屏幕输出的图像。
我希望支持getty和X,同时尽量避免重复。我运行一个最小的Debian变体,并进行了精选软件包,例如最小的X。请注意,我没有打算将此驱动程序尝试放入存储库流程中,尽管我可能会将其发布在公共GitHub存储库上。
目前通过一种糟糕的解决方法来输出屏幕图像:引导选项强制将呈现到CPU的嵌入式图形硬件,尽管它未连接到显示器,并且一个守护进程不断地屏幕抓取该缓冲区,修改少量预定义像素以创建键盘视觉效果,并将其推送到真实屏幕上。
这起初只是一个概念的证明,证明我确实理解屏幕设备希望的语言,但显然并不是最佳解决方案。 kernel.org还有一个“DRM”设备驱动程序指南,但这似乎对我的硬件来说过于繁琐:

Linux DRM层包含旨在支持复杂图形设备需求的代码,通常包含适合于3D图形加速的可编程流水线。


我的任何硬件都没有类似于3D加速的东西,所以我得出结论,这可能不是我想要的。

我应该使用哪个子系统/API?我认为缺少的术语阻碍了我的搜索,但任何有关如何完成此操作的更多信息都将不胜感激。

硬件详细信息(可能不相关):CPU和屏幕通过类似8080的并行协议进行通信,CPU本身不支持该协议,因此我正在使用GPIO进行仿真(通过mmap操纵寄存器)。
发送完整屏幕图像需要约20毫秒,但从嵌入式图形缓冲区获取完整副本需要约180毫秒,因此跳过该步骤是最重要的目标。屏幕硬件包括足够的 SGRAM内存来保存整个帧的数据,并支持编写矩形子区域,因此希望添加钩子以仅更新已更改的屏幕部分。
屏幕对于输入数据的时间没有特别要求。触摸传感器输入由专门设计的IC处理,并通过I²C与CPU通信,而CPU支持此协议。目前的驱动程序使用linux/input-polldev.h接口。CPU是Broadcom BCM2835,屏幕是带有嵌入式Himax HX8357控制器的TFT,触摸屏传感器解码器是ST STMPE610,在HX8357和BCM2835之间还有一个电压级移器(Nexperia 74LVCH245A)。如需更多详细信息,请联系我们。

我相信你患上了“非我所创”综合症,基本上是在重新发明轮子——通常触摸屏使用HID协议,这种协议得到了相当多的支持。请注意,触摸屏只是一种输入设备。 - 0andriy
重新发明轮子是我的拿手好戏,但当我开始时,这个特定设备没有(真正的)驱动程序。我不知道是否有任何标准化的人机接口协议,但如果有的话,我相信我在这里使用的触摸叠加层没有使用它。我不同意“触摸屏只是输入设备”的说法,因为我的触摸屏绝对会输出图像。 - memtha
你只是没有意识到一个封装中有两个硬件模块。触摸屏,不要被它的名称所迷惑,它只是一个输入设备。输出设备则被称为面板或TFT显示器。 - 0andriy
是的,有两个不同的硬件部件:触摸敏感叠加层和TFT屏幕。这两个组件结合在一起形成了触摸屏。你不能告诉我通过告诉我“忽略名称”来告诉我我定义触摸屏错误。 - memtha
1个回答

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接