我试图将Pololu的迷你大师USB伺服控制器驱动程序移植到Linux内核模块(这是我第一次尝试编写kenel模块)。Pololu的Linux驱动程序实际上使用的是mono运行时环境,很多我认为是兼容层,它是用C#编写的(我不知道),所以将它移植到C中编译成内核模块很重要,因为我希望其他程序使用管道与USB通信。
所以,这是交易,我用lsusb -vvv来列出器件特性
但最后一个接口是:
Interface Descriptor:
bInterfaceNumber 4
bNumEndpoints 0
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 4
bInterfaceProtocol 1
iInterface 2 Pololu Mini Maestro 18-Channel USB Servo Controller我不知道的是:
从复合装置本身:
诚挚的问候!
发布于 2013-11-26 07:13:59
以下是你的一些问题的答案:
是否有未列出的控制端点可用于配置设备模式?我能处理好吗?我能怎么做?
控制端点始终是端点0,您只需将安装数据包定向到此端点,以便将控制请求传递给设备。由于每个设备只有一个端点,因此您需要了解Polulu如何为指定的控制请求指定接口,通常作为控件传输的wIndex值传入。
从复合设备本身:为每个接口运行一个内核驱动实例?我如何捕捉一个接口并识别如何管理它?我如何处理接口关联?
每个接口将显示自己作为一些独特的USB接口。每个人都是独立的,都会有自己的行为。例如,您可以有一个具有3个接口的复合设备:一个用于海量存储设备的接口,一个用于USB音频设备的接口和一个特定于供应商的接口。每个驱动程序都会为该接口加载自己的驱动实例。前两个版本通常已经内置到现代操作系统和内核版本中,因为它们是定义的USB类。但是,特定于供应商的设备可能需要为特定于供应商的驱动程序执行一些VID/PID匹配。这将发生在您的情况下,如果您需要与这个特定的接口,您已经展示了上面。
发布于 2013-12-07 05:22:05
因此,我挖掘了几个网站,并在Pololu论坛上询问了一些答案,首先要感谢@preston提供的线索!
是的,我们可以通过usb_control_msg 函数定义在/驱动程序/usb/core/message.c的第132行中。
int usb_control_msg(struct usb_device *dev,unsigned int管道,__u8请求,__u8请求类型,__u16值,__u16索引,void *data,__u16大小,int超时值)
@preston回复说,
我们不需要“捕获”接口,而是将接口发送到内核模块:
static int probe(struct usb_interface *interface, const struct usb_device_id *id)
正如有人告诉我的那样,我不需要用特殊的方式来处理它们,只需在探测函数上识别与驱动程序的接口
https://stackoverflow.com/questions/20180566
复制相似问题