我想知道,系统的哪个部分负责检测USB端口中的插入设备
它可能是USB主机端口,因此插入的设备将被视为USB客户端(因此端口所有者是主机),
或者它可能是USB客户端端口,因此插入的设备将被视为USB主机(因此端口所有者是客户端)
我感兴趣的是当系统实际检测到(通过改变电阻)插入某些东西,并根据信号来自哪个端口(主机端口或客户端端口)时的任何一个主机部署端口驱动程序或客户端端口驱动程序 我想知道,HOW系统如何根据“插入”事件选择这个或那个驱动程序
我应该在哪里寻找?在USB核心可能吗?
答案 0 :(得分: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设备对应的新设备节点。如果您有兴趣捕获此事件并运行执行某些通知的脚本,您可能需要了解如何编辑udevd规则:http://www.reactivated.net/writing_udev_rules.html#external-run
答案 1 :(得分:1)
我明白你在问什么,正确地当连接usb设备时,电流波动(跨电阻)会导致通知。然后是主机(可以协商谁将在OTG模式下主持,但也会在枚举过程后发生)。
枚举是最重要的主要过程。 USB遵循星级拓扑,整个系统基于相同。
注意:请注意,数据包的所有事务都是由主机发起的,这一点非常重要。客户受主人的怜悯。这对理解USB系统非常重要。
答案 2 :(得分:1)
嗨,当Android设备连接时,它处于客户端模式(至少在三星设备中),当设备连接时,首先设备的地址设置为0x0,这样默认地址是主机已知的。然后是端点0,通过端点0完成所有设置(配置,接口,端点)。
上面的图片将帮助您理解。这取自USB 2.0手册。请记住,初始化期间的所有设置都是通过端点0完成的,端点0存在于每个设备中。
我不知道如何将其从客户端更改为主机模式。 (我的知识仅限于在OTG模式下设置后进行协商)。我希望我帮助过。