web-dev-qa-db-ja.com

新しいデバイスの状態に十分なホストコントローラーリソースがありません

私は16のUSBデバイスを接続するDebianミントベースのシステムを持っています。カーネルは次のとおりです。3.11.0-12-generic約10ほどのデバイスの後、新しいデバイスの接続で問題が発生し始めます。そのようなデバイスの1つにエラーがあり、次のようにdmesgsで見つけることができます(最後の2行は異なります)

[新しい更新:回避策]この問題はxhciに固有のものであることがわかりました。私のBIOSでは、実際にxhciを無効にして、Linuxをehciにフォールバックさせることができました(おそらく)。これで、すべてのデバイスが正常に機能しています。もちろん、これは私にとってUSB3デバイスがないことを意味します。幸いなことに、私の即時のアプリケーションはそれらを必要としません。これがIntelの問題なのか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領域があります。これらは、基盤となるハブまたはルートハブに接続されていることを理解しています。外部ハブを動かしても、結果に違いはありません。実験的に:ハブをハブに配置すると大きな問題が発生すると思いましたが、結果は同じでした。

すべてのデバイスを電源に接続して(そして電流を流して)、PCに接続しているハブが3つしかない場合は、すべて問題ありません。 4番目のハブを接続すると、LSUSBですべてのデバイスがそこにあることがわかりますが、最後のハブの4つのデバイスのうち1つしか起動しません。この場合。 3-5.1は問題ありませんが、3-5.23-5.3および3-5.4はドライバーをロードしないようです。

すべてのデバイスは同一であり、デバイスの交換、ハブの交換などをすでにテストしました。これは常に最後に入るデバイスです。これは、最後のデバイスがマウスやWi-Fiドングルのように完全に異なる場合でも発生します。 。デバイスはlsusbに表示されますが、機能しません。これは、ドライバー固有のものではなく、オペレーティングシステムのUSB制限が重なっていることを示していると思います。

再起動しても、電流が流れているときは最後の3つのデバイスのままです。しかしながら。また、これらのデバイスを電流が流れていない状態にすることができ、それらを立ち上げることができます。

私の結論は、OSが現在の消費電流を読み取り、電力リソースについて何らかの評価を行っているということです。おそらく、彼らはハブからこの情報を取得しており、値を足し合わせている可能性もあります。単に「より多くのホストコントローラーリソース」を使用できるかどうかを知っておくとよいでしょう。

[更新] I ここにあります エラーメッセージのソースコードのように見えます: "/ * FIXME:HCにもっと多くのリソースを割り当てることができますか?* /"の見た目が気に入らないかもしれませんこれは、最初からより多くのリソースを割り当てる方法があることも意味します。

手がかりは素晴らしいだろうデビッド

7
SpiRail

私もこのバグにぶつかりました(12個のUSBネットワークインターフェイスデバイスを接続しようとした後)。デバイスの電流の問題ではないと確信しています。デバイスはすべて電源付きハブ上にあり、電流制限内に十分収まっています。割り込みやその他のリソースの割り当ての問題だと思います。

BIOSでUSB3.0を無効にする回避策を試しましたが、マザーボードが内部でUSB 3.0を使用していると思われます(Bluetoothなど)。機能しませんでした(lsusb -tはxhci_hcdが使用されていることを示しています)。 xhciサポートを削除するためにカーネルを再構築する必要があり(Ubuntu 14.04を使用しています)、それで機能しました。

注:Ubuntuはデフォルトでehciとxhciをカーネルにコンパイルします-モジュールとしてロードしません。 modprobeを使用して試してみることができるように、モジュールとして再構築しようとしましたが、次の理由で失敗しました。

  1. Ehciがモジュールの場合、ohciおよびahciモジュールの前にロードする必要があり(dmesgの警告を参照)、それを実行しようとしたすべての方法が失敗しました(いずれにせよ、カーネルモジュールはロード順序に依存しない必要があると思いましたか?) 。

  2. Xchiモジュールは、ブラックリストに登録されていても、おそらく内部ハードウェアを処理するために、常にロードされていました。しかし、これほど調査しませんでした。

Ehciがコンパイルされ、xhciがコンパイルされたカーネル構成を設定することによってのみ、それは機能しました。新しいxhci-freeカーネルを使用してBIOSでUSB3.0を再度有効にすることはテストしていません。

3
Ken Tindell
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)それを修正する難しい方法:XHCILinuxモジュールを無効にします。 modprobe -r xhci-hcdしかし、ほとんどの場合、それは機能しません。 XHCIを無効にし、OHCI(usb 1.1)とEHXI(usb 2.0)を有効にするには、カーネルを再コンパイルする必要があります。

2
Danil Dar

この問題は、それほど多くのデバイスを処理できない基盤となるUSBハードウェアコントローラーに起因します。 Linuxのソースコードは、インターフェイスを構成しようとしたときにxHCが「リソースエラー」コードを返したことを示しています。 xHCI標準の第4.4.6章では、このケースについて説明しています。

ResourcesRequired変数はResourcesAvailable変数と比較され、結果がコマンドによるリソースのオーバーサブスクリプションを示している場合(つまり、Resources Available-Resources Requiredが0未満)、コマンドは失敗し、Resource Error CompletionCodeは次のようになります。コマンド完了イベントで返されます。 xHCリソースの詳細については、セクション4.14.1.1を参照してください。

私の回避策は、内部USBデバイス(Bluetooth、Wi-Fiなど)やUSB2.0デバイスのみが接続されたUSB3.0ハブなど、不要なすべてのUSBデバイスを削除してxHCIリソースを解放することです。

手順は次のとおりです。

  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'"
2
Julio Guerra