通过有源 HUB 在单个 Ubuntu 上连接多台 USB 3.0 设备

通过有源 HUB 在单个 Ubuntu 上连接多台 USB 3.0 设备

我尝试将多个支持 USB 3.0 的设备连接到我的 ubuntu 12.04 机器。但发现一次最多只能看到 9 个设备连接。我尝试监控内核日志/var/log/kern.log,发现在连接第 10 个设备时,出现了以下错误:

该设备无法找到足够的可用资源。(代码 12)

我的 USB 主机控制器是:

英特尔公司 8 系列/C220 系列芯片组系列 USB xHCI(rev 05)

一些论坛建议禁用 USB 3.0 支持,这样可以强制设备在 USB 2.0 模式下工作,这样应该可以解决问题。事实也确实如此。从 BIOS 禁用 xHCI 支持对我来说很有效。

我认为这应该是旧版 Ubuntu 12.04 设置的一个错误(也可能是 USB 驱动程序)。因此,我将系统升级到 Ubuntu 16。但这里也存在同样的问题。如果我想使用 USB 3.0 设备怎么办?如果某些主板上没有从 BIOS 禁用 xHCI 支持的选项怎么办?

答案1

控制器具有内部缓冲区,它分配给连接的设备用于输入和输出。这些缓冲区也称为资源或端点。

速度更快的设备需要分配更多缓冲区来容纳更多数据。此数量可能因设备而异,但每个设备最多有 32 个端点,其中 16 个输入和 16 个输出。

据报道,英特尔 8 系列 USB 3.0 XHCI 主机控制器仅支持 96 个端点,并且实际限制可能会更早达到。

根据您帖子中的信息,我猜测每个 USB3 磁盘使用 10 个端点(又称资源),可能是 5 个输入和 5 个输出。因此,9 个磁盘使用了 90 个端点,这没问题,但 10 个磁盘需要 100 个端点,超过了 96 个的限制,因此控制器向操作系统发送了错误代码。

当您将连接降级到速度较慢的 USB2 时,控制器为每个设备分配的缓冲区会少得多,因此您可以连接更多的磁盘。

解决方案可能是添加一个 USB2 集线器并将不需要高传输速率的磁盘放在其上。

进一步阅读:

答案2

前面的答案几乎是正确的。如果 USB3 有 96 个端点,则存在限制,这会将您限制在 32 个以下的设备。但是,使用 USB2 集线器并不能解决这个问题,因为您仍在 USB2 模式下使用 USB3 芯片,而端点限制仍然保持不变,这很遗憾。

我也遇到过这个问题,花了一段时间才找到真正的问题和解决方案。这是一个很长的页面,你可以去那里阅读http://marc.merlins.org/perso/linux/post_2018-12-20_Getting-Around-USB3-xhci-32-Device-Limit-此 xHCI 主机支持的最大设备数量为 32.html

基本上,它可以归结为以下几点:
1) USB3 有 96 个端点限制(相当于只能有 32 个设备)
2) 您会因为集线器而失去更多端点,使用 USB2 电缆连接 USB3 集线器可以为您节省一些插槽
3) 更一般地说,如果可以的话,您应该禁用 USB3(删除 USB3 内核驱动程序,或者更简单的是,在 BIOS 中禁用 USB3)。在 USB2 模式下使用 USB3 芯片没有帮助,您必须禁用 USB3,以便主板将端口重新路由到没有该端点限制的 USB2 控制器 4) 如果您无法禁用 USB3,请购买仅支持 USB2 的 PCIe 卡,这样您就可以连接 120 个左右的设备。

更多资源: https://www.spinics.net/lists/linux-usb/msg175224.html
https://forums.intel.com/s/question/0D50P00004905stSAA/hardware-limitations-on-usb-endpoints-xhci?language=en_US

相关内容