在用户空间中实现Linux字符驱动程序

凯文·沃德(Kevin Ward):

我正在尝试为嵌入式Linux系统构建自定义操纵杆/游戏手柄设备。我正在寻找一个库或系统API,该库或系统API将允许我从用户空间代码在/ dev / input中创建一个节点。

我想要这样做是因为:

  • 定制硬件可以使用现有的SPI或I2C驱动程序与系统进行通信(这是我的硬件设计,因此我可以做最有意义的事情)

  • 内核模块不能利用其他驱动程序,只能利用其他模块导出的符号

我知道制作内核模块的唯一方法是使用内核代码并将其编译为内核模块。我不是在尝试用用户空间代码实现内核模块。

我正在寻找一个允许我创建文件的API,当该文件被读取或写入时,将调用函数。这是字符驱动程序的一般概念。我不需要内核提供或施加的特权或限制。

必须有某种方法可以模拟文件I / O,而无需编写全新的内核模块。

谢谢!

地质车:

你不能

“字符设备”是指内核中面向字符的界面。

您可以按照LIUB的建议进行操作,并创建一个类似于保险丝的接口,将类似内核的API编组回用户空间,如果绝对需要使用中产生的HID样式的设备,则需要执行类似的操作/dev/input

但是,如果您实际上不需要HID设备,并且因为它仅用于硬件,并且您“不需要内核访问”,因为您实际上可以从用户空间与低级硬件进行通信,则可以考虑其他一些选择:

  • 您可以使用XSendEventXTEST协议来综合本地事件。
  • 您可以构建允许客户端连接的网络服务器(或使用多播unix域套接字有效地分发数据的服务器)。
  • 如果真的只是read()您希望客户这样做,则可以使用fifo当您的程序write()的数据包被均等地分割为一个PIPE_BUF(512字节)时,您可以保证它们不会被意外地插入另一个数据包中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

可以在Linux的用户空间中实现本机代码的抢占式多任务处理吗?

在用户空间中使用DMA内存传输

如何在Linux用户空间中实现高度精确的计时器?

PCIe驱动程序-用户空间如何访问它?

如何实现鼠标驱动程序Linux USB鼠标驱动程序?

在用户程序中使用<linux / types.h>,或在驱动程序模块代码中使用<stdint.h>……有关系吗?

Linux内核设备驱动程序,将DMA从设备插入用户空间内存

Linux内核设备驱动程序需要访问用户空间中的共享对象

SPI Linux驱动程序

在Linux内核模块(驱动程序)关键部分等待用户空间输入

为macOS开发用户空间只读磁盘驱动程序

观察内核空间中的硬盘写入(带有驱动程序/模块)

Java线程是在用户空间还是内核空间中创建的?

linux vfs工具是否可以在用户空间中将目录绑定到其他位置(例如mount --bind)?

我可以在Linux用户空间中实现类似于中断的功能吗?

确定是否可以在OSX的用户空间中编写HID设备驱动程序的最佳方法是什么?

为什么在内核中而不是用户空间中实现Linux NFS服务器?

Linux中是否存在用于存储驱动程序文件的标准目录?

我的程序读取PDF并尝试在用户空间中找到每个字形的坐标

了解进程在用户/内核空间中花费的CPU时间

USB目标用户空间驱动程序的libusb

如何从内核访问在用户空间中创建的节点?

Linux字符设备驱动程序问题

在用户空间中挂载远程文件系统

linux字符驱动程序中的接口

用户空间中的串行驱动程序

如何在用户空间中实现像 `format_args!` 这样复杂的宏?

如何在内核空间中使用 i2c 驱动程序

Linux 中的字符设备驱动程序读/写