首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >{USB复合设备内核模块驱动程序编程}多接口管理和“无端点”处理

{USB复合设备内核模块驱动程序编程}多接口管理和“无端点”处理
EN

Stack Overflow用户
提问于 2013-11-24 20:28:19
回答 2查看 1.2K关注 0票数 0

我试图将Pololu的迷你大师USB伺服控制器驱动程序移植到Linux内核模块(这是我第一次尝试编写kenel模块)。Pololu的Linux驱动程序实际上使用的是mono运行时环境,很多我认为是兼容层,它是用C#编写的(我不知道),所以将它移植到C中编译成内核模块很重要,因为我希望其他程序使用管道与USB通信。

所以,这是交易,我用lsusb -vvv来列出器件特性

但最后一个接口是:

代码语言:javascript
复制
 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

我不知道的是:

  • 是否有未列出的控制端点可用于配置设备模式?
  • 我能处理好吗?我能怎么做?

从复合装置本身:

  • 每个接口都运行一个内核驱动实例?
  • 我如何捕捉一个接口并识别如何管理它?
  • 我如何处理接口关联?

诚挚的问候!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-26 07:13:59

以下是你的一些问题的答案:

是否有未列出的控制端点可用于配置设备模式?我能处理好吗?我能怎么做?

控制端点始终是端点0,您只需将安装数据包定向到此端点,以便将控制请求传递给设备。由于每个设备只有一个端点,因此您需要了解Polulu如何为指定的控制请求指定接口,通常作为控件传输的wIndex值传入。

从复合设备本身:为每个接口运行一个内核驱动实例?我如何捕捉一个接口并识别如何管理它?我如何处理接口关联?

每个接口将显示自己作为一些独特的USB接口。每个人都是独立的,都会有自己的行为。例如,您可以有一个具有3个接口的复合设备:一个用于海量存储设备的接口,一个用于USB音频设备的接口和一个特定于供应商的接口。每个驱动程序都会为该接口加载自己的驱动实例。前两个版本通常已经内置到现代操作系统和内核版本中,因为它们是定义的USB类。但是,特定于供应商的设备可能需要为特定于供应商的驱动程序执行一些VID/PID匹配。这将发生在您的情况下,如果您需要与这个特定的接口,您已经展示了上面。

票数 1
EN

Stack Overflow用户

发布于 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)

  • 我如何处理接口关联?

正如有人告诉我的那样,我不需要用特殊的方式来处理它们,只需在探测函数上识别与驱动程序的接口

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20180566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档