如何枚举 USB 设备 *和* read/write 给他们?
How to enumerate USB devices *and* read/write to them?
有一个自定义 USB 设备需要与之通信。它没有特定的驱动程序。设备未显示为 /dev/tty*
.
我 found out 如何使用 libudev
枚举 USB 设备,假设我设法获得相应的 struct udev_device
.
我想不通的是如何 open(2)
设备,以便我可以 write(2)
和 read(2)
从它。
是否可以与通用 USB 设备通信,设置波特率并仅 read/write?如果是,找到libudev
的设备后,应该打开什么"file"?如果没有,是否需要编写内核级驱动程序?
libusb
is an ideal choice. There are also several examples for such a case as you described.
对于你的情况,你只需要:
- 创建默认上下文。
- 请求设备列表。
- 搜索具有所需 vendor/product ID 的设备。
- 打开设备,然后通过synchronous or asynchronousI/O调用进行通信。
- 清理请求的设备列表。
- 完成后,关闭设备句柄并销毁上下文。
这使您可以相对轻松地编写用户空间 application/library。我已经将它与麦克风、相机和 DIY 硬件(我制作的迷你装配线设备)一起使用,并取得了相当大的成功。 The devs on the mailing list are also very helpful,虽然一两个研究员如果他们的帖子写得不完美,往往会对新成员有些刻薄。
有一个自定义 USB 设备需要与之通信。它没有特定的驱动程序。设备未显示为 /dev/tty*
.
我 found out 如何使用 libudev
枚举 USB 设备,假设我设法获得相应的 struct udev_device
.
我想不通的是如何 open(2)
设备,以便我可以 write(2)
和 read(2)
从它。
是否可以与通用 USB 设备通信,设置波特率并仅 read/write?如果是,找到libudev
的设备后,应该打开什么"file"?如果没有,是否需要编写内核级驱动程序?
libusb
is an ideal choice. There are also several examples for such a case as you described.
对于你的情况,你只需要:
- 创建默认上下文。
- 请求设备列表。
- 搜索具有所需 vendor/product ID 的设备。
- 打开设备,然后通过synchronous or asynchronousI/O调用进行通信。
- 清理请求的设备列表。
- 完成后,关闭设备句柄并销毁上下文。
这使您可以相对轻松地编写用户空间 application/library。我已经将它与麦克风、相机和 DIY 硬件(我制作的迷你装配线设备)一起使用,并取得了相当大的成功。 The devs on the mailing list are also very helpful,虽然一两个研究员如果他们的帖子写得不完美,往往会对新成员有些刻薄。