Kev*_*ard 6 linux drivers kernel input
我正在尝试为嵌入式Linux系统构建自定义操纵杆/游戏手柄设备.我正在寻找一个库或系统API,允许我在用户空间代码的/ dev/input中创建一个节点.
我想这是因为:
自定义硬件可以使用现有的SPI或I2C驱动程序与系统通信(这是我的硬件设计,所以我可以做任何最具技术意义的事情)
内核模块不能使用其他驱动程序,只能从其他模块导出符号
我理解制作内核模块的唯一方法是使用内核代码并将其编译为内核模块.我不是要尝试使用用户空间代码来实现内核模块.
我正在寻找一个允许我创建文件的API,当读取或写入该文件时,函数被调用.这是字符驱动程序的一般概念.我不需要内核提供或强加的特权或限制.
必须有一些方法来模拟不涉及编写全新内核模块的文件I/O.
谢谢!
小智 5
您可以使用用户空间输入子系统执行所需操作,请参阅:
http://thiemonge.org/getting-started-with-uinput
并举例说明:
http://pingus.seul.org/~grumbel/xboxdrv/
老问题,但我想我会添加一个小窍门,所以看着这个的人不会得到错误的想法.大约在过去的3到4年里,出现了这个小框架,它被添加到扩展FUSE文件系统边缘,提供了一个沙盒解决方案,可以完全满足提问者的要求.
它被称为CUSE,它允许字符驱动程序由在内核中启用了FUSE和CUSE的系统上属于FUSE组的人实例化.所需要的只是一个合适的应用程序(您的发行版上的OSS适配守护程序只是一个这样的应用程序,FWIW ...)
那时候"你不能"之类的答案根本没有帮助,实际上并没有考虑到这个问题,而且......总是...... 总体上是错误的 ......即便如此.
CUSE没有像FUSE那样多的吸收,因此以简单易用的绑定形式做事情的帮助较少,但它仍然存在.让我参与这个主题的是我在寻找一个"更好"的答案,如果有一个关于这个主题.回答那里的结果是"是的,如果你可以做Python ..."(pycuse) - 如果你不能在那里做Python,你就是自己的.好吧......我从来没有接受过这样的事情......所以我将学习pycuse并制作一个C++/Go /等等.当我到达他们时需要一个新的语言,我需要的时候我正在使用它.
至于剩下的......嘿......下次你的鸭子连续多了.你当然没有这个.
geo*_*car -3
“字符设备”是指内核内面向字符的接口。
您可以按照 LIUB 的建议,创建一个类似熔断器的接口,将类似内核的 API 编组回用户空间,如果您绝对需要在/dev/input.
然而,如果您实际上不需要 HID 设备,并且由于它仅适用于您的硬件,并且您“不需要内核访问”,因为您实际上可以从用户空间与低级硬件进行通信,那么您可能会考虑其他一些选项:
read()您希望客户端执行的操作,则可以使用fifo。当您的程序write()的数据包可以均匀地分为a PIPE_BUF(512字节)时,您可以保证它们不会意外地交错在另一个数据包中。| 归档时间: |
|
| 查看次数: |
6770 次 |
| 最近记录: |