将 Linux /dev/USB 作为标准文件访问以与 USB 设备通信

Posted

技术标签:

【中文标题】将 Linux /dev/USB 作为标准文件访问以与 USB 设备通信【英文标题】:Accessing Linux /dev/USB as standard files to communicate with USB device 【发布时间】:2012-03-21 08:49:30 【问题描述】:

我正在研究在 Linux 中与 USB 设备通信的方法,并且不希望编写 Linux 内核驱动程序。我知道 libusb 存在并且是一个可以工作的用户级库,但是我们的嵌入式设备不支持 usbfs(并且更改内核以添加支持真的很痛苦)。

所以我的问题基本上是这样的:是否可以/建议通过直接读写 /dev/USB 或 USB 设备对应的 udev 文件与 USB 设备通信,从而绕过对自定义 Linux 驱动程序的需要和usbfs?

我希望一旦打开 /dev/USB 或 udev 设备文件,只需通过文件类型的读/写命令直接读/写协议数据包就可以使用 USB 设备协议进行通信。

请给点意见和建议。

跟进:

由于我需要与之通信的 USB 设备是 USB HID 类设备,因此我能够通过直接读取/写入 /dev/hidraw0(或相应的 /dev/)来使用 libudev 和标准 Linux USB HID RAW 驱动程序hidraw 设备)。无需为简单的 USB HID 设备编写自定义驱动程序。

【问题讨论】:

【参考方案1】:

Jim,我认为您无法摆脱编写驱动程序的需要,而只是设法读取/dev 中的 USB 文件。因为谁定义了当您在 USB 设备文件上执行 read() 时应该发生什么?当您调用sysioctl() 时,谁定义了应该启动的操作? 您的驱动程序! 换句话说,设备文件本身在得到底层驱动程序支持之前无能为力。事实上,您可以将设备文件视为底层驱动程序的抽象!所以,没有驱动程序,没有使用设备文件:(

我建议您阅读以下有关如何编写驱动程序并了解USB内部原理的文章-

    http://www.linux-usb.org/USB-guide/c15.html

    http://www.linuxjournal.com/article/4786(略过时)

【讨论】:

谢谢帕万。这就是我想的答案。继续使用 libusb 应该不会太难。 USB 驱动程序是一个有趣的部分!我一直很想在这上面写点东西。很想知道你在这方面的进展,吉姆! Pavan,我设法获得了一个概念验证工具,可以使用 libusb 库与我的 USB 设备进行通信。适用于 HID 类设备。再次感谢您。

以上是关于将 Linux /dev/USB 作为标准文件访问以与 USB 设备通信的主要内容,如果未能解决你的问题,请参考以下文章

Linux笔记(续)

Linux主机规划与磁盘分区

鸟哥的linux私房菜——第3章 主机规划与磁盘分区

Linux系统基础

linux中常见设备对照表

Linux常见设备及相应/dev/xxx文件名Mount Point挂载点Mount命令fstab挂载分区