5

我想知道,系统的哪个部分负责检测USB端口的插入设备

它可能是 USB 主机端口,因此插入的设备将被视为 USB 客户端(因此端口所有者是主机),
或者它可能是 USB 客户端端口,因此插入的设备将被视为 USB主机(所以端口所有者是客户端)

我感兴趣的是当系统实际检测到(可能通过改变电阻)已经插入某些东西时,并且基于信号来自哪个端口(主机端口或客户端端口),主机端口驱动程序或客户端端口驱动程序已部署
我想知道,系统如何根据“插入”事件选择这个或那个驱动程序

我应该在哪里寻找?也许在 USB 内核中?

4

3 回答 3

1

usb 子系统负责检测和探测新添加/热插拔的 USB 设备。在内核日志中查看以下消息:

usb usb4: New USB device found, idVendor=1d6b, idProduct=0001
usb usb4: New USB device strings: Mfr=3, Product=2, SerialNumber=1
usb usb4: Product: OHCI Host Controller
usb usb4: Manufacturer: Linux 2.6.32 ohci_hcd
usb usb4: SerialNumber: 0000:00:12.1
usb usb4: configuration #1 chosen from 1 choice

处理所有这些的代码位于 drivers/usb/core

usb 子系统位于 scsi 子系统下方,因此您新分配的设备将具有类似的设备名称/dev/sdX。udev 的工作是在/dev. 如果您有兴趣捕获此事件并运行执行一些通知的脚本,您可能想了解如何编辑 udevd 规则:http ://www.reactivated.net/writing_udev_rules.html#external-run

于 2012-10-19T18:32:01.753 回答
1

我理解您的要求,正确地,当连接 USB 设备时,电流波动(跨电阻器)会导致通知。然后是主机(可以协商谁将成为 OTG 模式的主机,但这也发生在枚举过程之后)。

枚举是最重要的主要过程。USB 遵循星型拓扑结构,整个系统基于相同的拓扑结构。

注意:需要注意的是,数据包的所有事务都是由主机发起的。客户端受主机摆布。这对于理解 USB 系统非常重要。

请参考:http ://www.beyondlogic.org/usbnutshell/usb1.shtml

于 2012-10-22T08:20:18.813 回答
1

嗨,当 android 设备连接时,它处于客户端模式(至少在三星设备中),当设备连接时,首先将设备的地址设置为 0x0,以便主机知道默认地址。然后是端点 0,通过它完成所有设置(配置、接口、端点)。

在此处输入图像描述

上图将帮助您理解。这取自 USB 2.0 手册。请记住,初始化期间的所有设置都是通过每个设备中存在的端点 0 完成的。

而且我不知道如何将其从客户端模式更改为主机模式。(我的知识仅限于在 OTG 模式下设置后进行协商)。我希望我有所帮助。

于 2012-10-25T07:32:21.247 回答