【问题标题】:Detection of plugged in USB device检测插入的 USB 设备
【发布时间】:2012-10-19 12:15:09
【问题描述】:

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

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

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

我应该在哪里寻找?可能在 USB 内核中?

【问题讨论】:

  • “它可能是一个 USB 主机端口……或者它可能是一个 USB 客户端端口” - USB 要么是主机端口要么是设备(又名小工具) ) 港口。端口被硬连线为只有一种。您无法选择如何使用 USB 端口。具有这两种 USB 端口的系统很少见,例如在 SoC 评估板上。您可能会在 SoC 上找到主机和设备 USB 端口,但是当安装在实际产品的板上时,通常只有一种类型的 USB 端口实际上是可用的。
  • 是的,很抱歉造成混淆,我的意思是“系统上可能有一个 USB 主机端口或一个 USB 小工具端口或两者兼有”,我不是这个意思他们可能会改变他们的主机-客户角色
  • 具有主机功能的 Android 设备通常通过连接的微型/迷你 USB 电缆上的额外引脚的状态来确定其模式。通常,要将此类设备用作主机,您需要一根适配器电缆,其针脚在 mini/micro 端接地,另一端有一个 USB“A”插座,可以连接普通 USB 设备电缆。如前所述,这与在任一模式下的存在检测一起,都将在它到达 Android API 或固定模式驱动程序之前通过 Linux 内核,尽管某些内置功能(如充电)可能超出了内核的范围。

标签: android linux linux-kernel usb linux-device-driver


【解决方案1】:

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

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

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

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

【讨论】:

  • 感谢您的回复,也许您也可以回答这个问题:您知道系统何时何地设置为主机/客户端模式吗?例如,默认情况下android设备在哪种模式下?如果是客户端模式,怎么改成主机模式?
【解决方案2】:

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

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

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

【讨论】:

【解决方案3】:

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

【讨论】:

  • 感谢您的回复。实际上我对 udev 规则没那么感兴趣。我感兴趣的是你提到的USB设备检测/探测程序。所以你的意思是usb子系统监控系统上所有可用的usb主机/客户端端口并相应地部署usb主机/客户端驱动程序?您知道系统如何以及在何处设置为主机/客户端模式吗?据我了解,系统可能同时在一个 USB 连接中充当主机,在另一个 USB 连接中充当客户端
  • “usb 子系统位于 scsi 子系统之下……” 一个虚假的概括,不适用于不是大容量存储设备的 USB 小工具。有用于串口、以太网、键盘、鼠标、音频和视频的 USB 设备。这些都不会“具有像 /dev/sdX 这样的设备名称”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-16
  • 1970-01-01
  • 2014-12-20
  • 1970-01-01
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
相关资源
最近更新 更多