Linux:如何从用户空间通过cdc-adm驱动的USB批量端点传输数据

ncgqoxb0  于 2023-06-05  发布在  Linux
关注(0)|答案(1)|浏览(258)

我是Linux驱动程序的初学者,我开始在Linux中为基于cdc-acm的USB设备编写应用程序。因此,我使用了cdc_acm驱动程序。我使用的USB设备有2个批量端点(读和写)和一个中断端点。
现在,我的问题是,是否所有这些端点都在同一个/dev/ttyACM 0文件上操作,以及如何将这个tty文件上的写调用转换为acm_write_bulk fops调用?
如果我将触发USB功能的数据写入ttyACM 0文件,数据会通过批量输出端点发送吗?或者我应该如何将数据直接从用户空间发送到批量端点。我应该在内核空间中编写任何支持驱动程序吗?类似地,我如何从用户空间中的中断端点读取数据?
我很感激你的帮助提前。

svgewumm

svgewumm1#

不需要编写内核空间驱动程序。您可以使用open系统调用打开/dev/ttyACM0,使用termios(可选)为其设置参数,然后使用readwrite系统调用从设备读取和写入批量数据。这些系统调用最容易从C和C++访问,但大多数语言都有一个库,可以用来访问串行端口。
我不知道在Linux中从中断端点读取数据的好方法,但如果你真的需要这样做,你至少可以看看TIOCMGET、TIOCGICOUNT和TIOCMIWAIT ioctl。
Linux串行端口接口抽象了有关USB、端点和批量传输的所有细节,因此您可以使用更简单、更抽象的API与串行端口通信。事实上,您可以在任何类型的串行端口上使用相同的代码,而不管哪个内核驱动程序实现了串行端口。它可能会帮助你在互联网上搜索像“linux串行端口编程”或“posix串行端口编程”这样的东西,以了解更多关于如何做到这一点。
如果您真的对Linux CDC ACM驱动程序的工作原理以及它如何将write系统调用转换为相应的USB传输感到好奇,您可以阅读source of the cdc-acm driver。然而,这是 * 方式 * 超出了你需要做的只是使用串行端口。

相关问题