主控制器资源不足以支持新设备状态

主控制器资源不足以支持新设备状态

我有一个基于 debian mint 的系统,我在其中插入了 16 个 USB 设备。内核是:3.11.0-12-generic 大约 10 个设备之后,我开始遇到连接新设备的问题。可以在 dmesgs 中找到此类设备的错误,如下所示(最后两行不同)

[新更新:解决方法] 我发现这个问题是 xhci 特有的。在我的 bios 中,我实际上能够禁用 xhci 并强制 linux 回退到 ehci(大概)。现在我的所有设备都运行正常!当然,这意味着我没有 USB3 设备。幸运的是,我的直接应用程序不需要它们。我不知道这是英特尔问题还是 Linux 问题。最好保留此页面,因为其他人很可能会找到它。

dmesg | grep -i 3-5.1 

工作装置:

[    1.883505] hub 3-5:1.0: USB hub found
[    1.883733] hub 3-5:1.0: 4 ports detected
[    3.370272] usb 3-5.1: new full-speed USB device number 17 using xhci_hcd
[    3.387126] usb 3-5.1: New USB device found, idVendor=03eb, idProduct=2045
[    3.387129] usb 3-5.1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[    3.387908] usb-storage 3-5.1:1.0: USB Mass Storage device detected
[    3.388006] scsi14 : usb-storage 3-5.1:1.0
[  121.738568] usb 3-5.1: USB disconnect, device number 17
[  121.942662] usb 3-5.1: new full-speed USB device number 28 using xhci_hcd
[  121.961332] usb 3-5.1: New USB device found, idVendor=03eb, idProduct=204b
[  121.961334] usb 3-5.1: New USB device strings: Mfr=1, Product=2, SerialNumber=220
[  121.961336] usb 3-5.1: Product: LUFA USB-RS232 Adapter
[  121.961337] usb 3-5.1: Manufacturer: Dean Camera
[  121.961338] usb 3-5.1: SerialNumber: 741333532373518080C1
[  121.961408] usb 3-5.1: ep 0x82 - rounding interval to 1024 microframes, ep desc says 2040 microframes
[  121.962080] cdc_acm 3-5.1:1.0: ttyACM3: USB ACM device
[ 1281.513105] usb 3-5.1: USB disconnect, device number 28

dmesg | grep -i 3-5.1 

故障设备:

[    3.638401] usb 3-5.4: new full-speed USB device number 20 using xhci_hcd
[    3.655067] usb 3-5.4: New USB device found, idVendor=03eb, idProduct=2045
[    3.655070] usb 3-5.4: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[    3.655868] usb-storage 3-5.4:1.0: USB Mass Storage device detected
[    3.655977] scsi17 : usb-storage 3-5.4:1.0
[  118.793161] usb 3-5.4: USB disconnect, device number 20
[  122.603119] usb 3-5.4: new full-speed USB device number 31 using xhci_hcd
[  122.621653] usb 3-5.4: New USB device found, idVendor=03eb, idProduct=204b
[  122.621655] usb 3-5.4: New USB device strings: Mfr=1, Product=2, SerialNumber=220
[  122.621656] usb 3-5.4: Product: LUFA USB-RS232 Adapter
[  122.621657] usb 3-5.4: Manufacturer: Dean Camera
[  122.621658] usb 3-5.4: SerialNumber: 74133353237351808021
[  122.621795] usb 3-5.4: ep 0x82 - rounding interval to 1024 microframes, ep desc says 2040 microframes
[  122.622419] usb 3-5.4: Not enough host controller resources for new device state.
[  122.622424] usb 3-5.4: can't set config #1, error -12

我的硬件拓扑如下:PC -> 4 个带电的 usb2 集线器 -> 每个集线器有 4 个 usb(1) 设备。这些设备是“双启动”的,您可以在上方看到它们被弹出为大容量存储设备,并在同一端口上作为串行设备重新启动。

我直接从电源为 USB 集线器供电,每个设备大约消耗 700mA 电流,而电源的 5V 线电压降至 4.69V。

我的机器上有许多 USB 区域,据我所知,这些区域连接到底层集线器或根集线器。移动外部集线器对结果没有影响。实验:我以为将集线器放在集线器上会导致更大的问题,但结果是一样的。

当我将所有设备插入电源(并获取电流),但只有 3 个集线器插入 PC 时,一切正常。当我插入第 4 个集线器时,我可以在 LSUSB 中看到所有设备都在那里,但是,最后一个集线器上的 4 个设备中只有 1 个出现。在这种情况下。3-5.1 没问题,但 3-5.2 3-5.3 和 3-5.4 似乎没有加载驱动程序。

所有设备都是相同的,我已经测试过诸如交换设备、交换集线器等操作。它总是最后插入的设备。即使最后一个设备是完全不同的东西,如鼠标或 wifi 适配器,也会发生这种情况。该设备将在 lsusb 中可见,但它无法工作。我认为这表明操作系统存在 USB 限制,而不是特定于驱动程序的问题。

重启时,电流仍在流过时,它仍然是最后 3 个设备。但是。我也能将这些设备置于无电流流过时的状态,并且可以启动它们。

我的结论是,操作系统正在读取电流消耗并对电源资源进行一些评估。他们可能从集线器获取这些信息,甚至可能将这些值加在一起。如果我能简单地拥有“更多主机控制器资源”,那就太好了

[更新] 我找到这里错误消息的源代码看起来像什么:我不喜欢“/* FIXME:我们可以为 HC 分配更多资源吗?*/”的外观也许这也意味着有一种方法可以从一开始就分配更多的资源。

任何线索都很好,David

答案1

我也遇到了这个错误(在尝试连接十几个 USB 网络接口设备后)。我很确定这不是设备的电流问题:它们都在有源集线器上,并且完全在电流限制之内。我认为这是分配中断或其他资源的问题。

我尝试了在 BIOS 中禁用 USB 3.0 的解决方法,但我怀疑主板内部使用了 USB 3.0(用于蓝牙和其他一些东西),但它不起作用(lsusb -t 显示正在使用 xhci_hcd)。我不得不重建内核(我使用的是 Ubuntu 14.04)以删除 xhci 支持,然后它才起作用。

注意:Ubuntu 默认将 ehci 和 xhci 编译到内核中 - 它不会将它们作为模块加载。我尝试将它们重建为模块,以便我可以使用 modprobe 来操作它们,但失败了,因为:

  1. 如果 ehci 是一个模块,它必须在 ohci 和 ahci 模块之前加载(参见 dmesg 中的警告),并且我尝试执行此操作的每种方法都失败了(无论如何,我认为内核模块需要与加载顺序无关?)。

  2. xchi 模块最终总会被加载,即使被列入黑名单,大概是为了处理内部硬件。不过,我并没有对此进行深入调查。

只有通过设置一个编译了 ehci 并编译出 xhci 的内核配置才能正常工作。我还没有测试过在新的无 xhci 内核中在 BIOS 中重新启用 USB 3.0。

答案2

Not enough host controller resources for new device state.

can't set config #1, error -12

遇到同样的错误。Linux 内核中的 XHCI(USB 3.0)限制为 32 个设备。这看起来像是一个错误。但也许这是比尔盖茨的方式“640 千字节对每个人来说都足够了”。无论如何,这很痛苦。

1)最简单的修复方法:如果可能的话,在主板 BIOS 中禁用 XHCI(usb 3.0)支持。2)最难的修复方法:禁用 XHCI linux 模块。 modprobe -r xhci-hcd但在大多数情况下,它不起作用。您必须重新编译内核以禁用 XHCI 并启用 OHCI(usb 1.1)和 EHXI(usb 2.0)。

答案3

此问题来自底层 USB 硬件控制器,它无法处理那么多设备。Linux 源代码显示,在尝试配置接口时,xHC 返回了“资源错误”代码。xHCI 标准第 4.4.6 章解释了这种情况:

将所需资源变量与可用资源变量进行比较,如果结果表明命令的资源超额订阅(即可用资源 - 所需资源小于 0),则命令将失败,并在命令完成事件中返回资源错误完成代码。有关 xHC 资源的更多信息,请参阅第 4.14.1.1 节。

我的解决方法是通过移除每个不需要的 USB 设备来释放 xHCI 资源,例如内部 USB 设备(例如蓝牙、wifi 等)和仅连接了 USB 2.0 设备的 USB 3.0 集线器。

步骤如下:

  1. 运行lsusb看看是否有什么未使用的东西。
  2. 使用 sysfs 删除未使用的设备echo 1 > /sys/<path to device>/remove。查看dmesg并了解它如何删除设备和每个子设备。这意味着您可以在根设备上使用此命令删除整个 USB 树。
  3. 您现在应该能够正确插入更多设备(参见dmesg日志)。

为了使此设置重启后仍然有效,请添加 udev 规则以删除设备:

SUBSYSTEM=="usb" <your conditions to match unused devices> RUN="sh -c 'echo 1 > /sys$DEVPATH/remove'"

相关内容