我正在开发带触摸屏的嵌入式系统。触摸屏既可作为输入也可作为输出,而“虚拟”键盘则覆盖图形输出。
我有一个工作的设备驱动程序,该驱动程序可以从触摸传感器读取输入并将其正确转换为按键,这是在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处理,该IC通过CPU支持的I²C与CPU通信。本驱动程序使用该linux/input-polldev.h
接口。CPU是Broadcom BCM2835,屏幕是带有嵌入式Himax HX8357控制器的TFT ,触摸屏传感器解码器是ST STMPE610,HX8357和BCM2835之间有一个电压电平转换器(Nexperia 74LVCH245A)。可根据要求提供更多详细信息。