插入USB设备的检测

5
我想知道系统的哪个部分负责检测USB端口中插入设备的情况。它可能是USB主机端口,因此插入的设备将被视为USB客户端(因此端口所有者是主机),或者它可能是USB客户端端口,因此插入的设备将被视为USB主机(因此端口所有者是客户端)。
我所感兴趣的是系统实际上通过什么事件(例如阻力变化)检测到有设备插入,并根据信号来自哪个端口(主机端口或客户端端口),选择部署主机端口驱动程序或客户端端口驱动程序。我想知道系统基于“插入”事件如何选择这个或那个驱动程序。
我应该在哪里寻找呢?可能在USB核心中吗?

1
一个USB可能是主机端口,也可能是设备(又称小工具)端口。该端口被硬连线为仅一种类型。您无法选择如何使用USB端口。拥有两种类型USB端口的系统很少见,例如SoC评估板上。您可能会在SoC上找到主机和设备USB端口,但是当安装在实际产品的板子上时,通常只有一种类型的USB端口实际可用。 - sawdust
是的,对不起造成困惑,我的意思是“系统上可能有USB主机端口或USB从机端口或两者都有”,我并不是说它们可能会改变它们的主机-客户端角色。 - mangusta
通常具有主机功能的 Android 设备通过连接的微型/迷你 USB 电缆上额外引脚的状态来确定它们的模式。通常,要将此类设备用作主机,您需要使用该引脚接地的适配器电缆连接到迷你/微型端口,并在另一端连接 USB “A” 插座,以连接普通 USB 设备电缆。 正如已经提到的,这些都会通过 Linux 内核进行检测,然后才会进入 Android API 或固定模式驱动程序,尽管某些内置功能(如充电)可能超出内核范畴。 - Chris Stratton
3个回答

1

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

enter image description here

上述图像将帮助您理解。这是从USB 2.0手册中获取的。请记住,初始化期间的所有设置都通过每个设备中存在的端点0完成。
我不知道如何将其从客户端更改为主机模式。(我的知识仅限于OTG模式设置后进行协商)。我希望我有所帮助。

请参考以下问题:http://stackoverflow.com/questions/11338076/how-usb-otg-worksmaster-slave - shingaridavesh

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中创建与此USB设备对应的新设备节点。如果您有兴趣捕获此事件并运行执行某些通知的脚本,则可以阅读有关如何编辑udev规则的信息:http://www.reactivated.net/writing_udev_rules.html#external-run

谢谢回复。实际上,我对udev规则并不是很感兴趣。我感兴趣的是你提到的USB设备检测/探测过程。所以你的意思是USB子系统监视系统上所有可用的USB主机/客户端端口,并相应地部署USB主机/客户端驱动程序吗?你知道系统如何在主机/客户端模式下设置在哪里吗?据我所知,系统可以同时在一个USB连接中作为主机,在另一个USB连接中作为客户端。 - mangusta
2
USB子系统位于SCSI子系统之下...这是一个错误的概括,不适用于非大容量存储设备的USB设备。USB设备包括串行端口、以太网、键盘、鼠标、音频和视频设备。这些设备都不会"有像/dev/sdX这样的设备名称"。 - sawdust

1

我理解你的问题,当USB设备连接时,电流波动(通过电阻器)会导致通知。然后主机(在OTG模式下可能会有谁是主机的协商,但这也发生在枚举过程之后)。

枚举是最重要的主要过程。 USB遵循星形层次结构,整个系统都基于此。

注意:非常重要的一点是所有数据包的交易都由主机发起。客户端取决于主机。这对于理解USB系统非常重要。

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


谢谢您的回复,也许您也可以回答这个问题:您知道系统何时何地设置为主机/客户端模式吗?例如,Android设备默认处于哪种模式?如果它处于客户端模式,如何将其更改为主机模式? - mangusta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接