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

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/


Sva*_*alf 5

老问题,但我想我会添加一个小窍门,所以看着这个的人不会得到错误的想法.大约在过去的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 设备,并且由于它仅适用于您的硬件,并且您“不需要内核访问”,因为您实际上可以从用户空间与低级硬件进行通信,那么您可能会考虑其他一些选项:

  • 请注意。你可以。在您评论之前,当前(这是在您提供此“见解”时)OSS 声音子系统适配器已转为使用 CUSE,并且是其使用的第一个示例。简而言之,我……有点震惊……人们在这件事上的做法是多么**错误**。顺便说一句,我发现了这个小convo,正在寻找一个与 CUSE 的 FUSE 开发绑定解决方案非常相似的库,伙计们,这应该是一个暗示,说明你们错得有多么严重。 (2认同)