什么 Linux 驱动程序 subsystem/API 用于简单的 screen/monitor 设备?
What Linux driver subsystem/API is used for a simple screen/monitor device?
我正在开发带有触摸屏的嵌入式系统。触摸屏作为输入和输出操作,"virtual" 键盘覆盖图形输出。
我有一个工作设备驱动程序,它从触摸传感器读取输入并将其正确转换为按键,是在 this guide on kernel.org 的帮助下创建的。我想扩展此驱动程序以处理屏幕上的图像输出。
我想同时支持 getty 和 X,尽可能减少重复。我是 运行 一个最小的 Debian 变体,带有精选的软件包,例如最小的 X。请注意,我不打算尝试将此驱动程序放入存储库管道,尽管我可能会将其转储到 public GitHub 存储库。
输出屏幕图像目前是通过一个糟糕的解决方法完成的:一个强制渲染到 CPU 的嵌入式图形硬件的启动选项,尽管它没有连接到显示器,以及一个连续屏幕的守护进程- 擦除缓冲区,修改少量预定义像素以创建键盘视觉效果,并将其推送到实际屏幕。
这可以作为概念证明,证明我确实正确理解了屏幕设备期望的语言,但显然不是最佳选择。
kernel.org
也有 "DRM" 设备驱动程序的指南,但对于我的硬件的能力来说,这似乎是严重的矫枉过正:
The Linux DRM layer contains code intended to support the needs of complex graphics devices, usually containing programmable pipelines well suited to 3D graphics acceleration.
None 我的硬件有类似 3D 加速的东西,所以我断定这可能不是我想要的。
我应该使用什么subsystem/API?我认为缺少一个术语是阻碍我搜索的原因,但如果能提供更多关于如何实现这一点的信息,我们将不胜感激。
硬件细节(可能不相关): CPU 和屏幕通过 8080-esque 并行协议通信,CPU 本身不支持,所以我用 GPIO 模拟它(通过 mmap 操作寄存器)。
发送完整的屏幕图像大约需要 20 毫秒,但从嵌入式图形缓冲区获取完整副本大约需要 180 毫秒,因此跳过该步骤是最重要的 objective。屏幕硬件包括足够的 SGRAM 内存来保存整个帧的数据,并支持写入矩形子区域,因此只更新屏幕发生变化的部分的挂钩是可取的。
屏幕对传入数据的时间并不讲究。触摸传感器输入由专用 IC 处理,该 IC 通过 I²C, which the CPU does support. The present driver uses the linux/input-polldev.h
interface. The CPU is a Broadcom BCM2835, the screen is a TFT with an embedded Himax HX8357 controller, the touchscreen sensor decoder is an ST STMPE610, and there is a voltage levelshifter (Nexperia 74LVCH245A 与 HX8357 和 BCM2835 之间的 CPU 进行通信。可应要求提供更多详细信息。
您缺少的术语是 framebuffer device. You can find the kernel.org documentation for it here。
我正在开发带有触摸屏的嵌入式系统。触摸屏作为输入和输出操作,"virtual" 键盘覆盖图形输出。
我有一个工作设备驱动程序,它从触摸传感器读取输入并将其正确转换为按键,是在 this guide on kernel.org 的帮助下创建的。我想扩展此驱动程序以处理屏幕上的图像输出。
我想同时支持 getty 和 X,尽可能减少重复。我是 运行 一个最小的 Debian 变体,带有精选的软件包,例如最小的 X。请注意,我不打算尝试将此驱动程序放入存储库管道,尽管我可能会将其转储到 public GitHub 存储库。
输出屏幕图像目前是通过一个糟糕的解决方法完成的:一个强制渲染到 CPU 的嵌入式图形硬件的启动选项,尽管它没有连接到显示器,以及一个连续屏幕的守护进程- 擦除缓冲区,修改少量预定义像素以创建键盘视觉效果,并将其推送到实际屏幕。
这可以作为概念证明,证明我确实正确理解了屏幕设备期望的语言,但显然不是最佳选择。
kernel.org
也有 "DRM" 设备驱动程序的指南,但对于我的硬件的能力来说,这似乎是严重的矫枉过正:
The Linux DRM layer contains code intended to support the needs of complex graphics devices, usually containing programmable pipelines well suited to 3D graphics acceleration.
None 我的硬件有类似 3D 加速的东西,所以我断定这可能不是我想要的。
我应该使用什么subsystem/API?我认为缺少一个术语是阻碍我搜索的原因,但如果能提供更多关于如何实现这一点的信息,我们将不胜感激。
硬件细节(可能不相关): CPU 和屏幕通过 8080-esque 并行协议通信,CPU 本身不支持,所以我用 GPIO 模拟它(通过 mmap 操作寄存器)。
发送完整的屏幕图像大约需要 20 毫秒,但从嵌入式图形缓冲区获取完整副本大约需要 180 毫秒,因此跳过该步骤是最重要的 objective。屏幕硬件包括足够的 SGRAM 内存来保存整个帧的数据,并支持写入矩形子区域,因此只更新屏幕发生变化的部分的挂钩是可取的。
屏幕对传入数据的时间并不讲究。触摸传感器输入由专用 IC 处理,该 IC 通过 I²C, which the CPU does support. The present driver uses the linux/input-polldev.h
interface. The CPU is a Broadcom BCM2835, the screen is a TFT with an embedded Himax HX8357 controller, the touchscreen sensor decoder is an ST STMPE610, and there is a voltage levelshifter (Nexperia 74LVCH245A 与 HX8357 和 BCM2835 之间的 CPU 进行通信。可应要求提供更多详细信息。
您缺少的术语是 framebuffer device. You can find the kernel.org documentation for it here。