我正在尝试将 27 个 USB 设备连接到运行 CentOS 7 的 Intel NUC,但无论我做什么,系统都看不到超过 20 个。我尝试了多种型号的 NUC,甚至尝试向其中添加一个额外的 mPCIe USB 控制器卡,我尝试了带有 Intel Xeon 和额外 PCIe USB 控制器卡的 1U 服务器,甚至还尝试了 Mac Mini。 Mac Mini 能够识别最多 20 个设备,但这仍然低于我们的需要。额外的 USB 控制器卡对系统识别的设备数量没有影响。这 27 台设备分布在 3 个供电的 10 端口集线器上。有谁知道为什么系统无法看到所有 USB 设备,因为即使使用集线器,它仍然低于 127 USB 规格限制?
谢谢您的帮助!
答案1
我也处理过这个问题,我花了一段时间才找到真正的问题和解决方案。这一页很长,所以你可以去那里阅读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(删除 USB3 内核驱动程序,或者如果可以的话更简单,在 BIOS 中禁用 USB3) 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
答案2
许多设备至少应该同时工作,根据他关于制作串行控制台远程访问服务器的 LJ 文章。提到了每个控制器(即每对端口)最多 127 个 USB 设备(包括集线器)的限制。
也许 Linux 在达到 USB 施加的限制时遇到问题。内核日志可能有一些有趣的内容要说,所以希望您可以在某个时候发布您在那里找到的内容。
如果您需要解决方法,您可以通过网络导出 USB 端口。然后您就可以使用多台计算机而无需修改软件。这显然并不理想,因为这意味着更多的硬件、更多的功耗和更多的复杂性。 usbip sourceforge 项目看起来已被放弃,但仍然有一个 Ubuntu 软件包。我猜代码已进入主线 Linux (2.6.28),并且用户空间工具不需要更新。也可以看看这个askubuntu关于它的问题。这可能会或可能不会很好地工作,具体取决于您的设备以及它们的驱动程序是否可以处理网络往返的更高延迟。请参阅安德烈·博里 (André Borie) 对我对这个问题的评论的答复。
使用此功能可能会遇到相同的每主机 USB 设备数量限制。如果是这样,那就告诉您这与低级驱动程序无关,而是在 Linux 的 USB 堆栈中稍高一些。
如果您使用的是 USB 存储设备,则可以使用nbd
导出块设备。