4.0以降のLinuxカーネルのUSBドライバーで何が変更されましたか?


8

3.19までのカーネルで、私のUSBデバイスはすべて完全に動作します。

4.0以降にアップグレードすると、一部のUSBデバイスが機能しなくなり、カーネルが次のようなエラーを生成します。

[    3.369436] usb 9-1: device descriptor read/64, error -62
[    3.593543] usb 9-1: new full-speed USB device number 4 using ohci-pci
[    3.997572] usb 9-1: device not accepting address 4, error -62
[    4.120602] usb 9-1: new full-speed USB device number 5 using ohci-pci
[    4.524792] usb 9-1: device not accepting address 5, error -62
[    4.524911] usb usb9-port1: unable to enumerate USB device
[   15.402105] usb 9-1: new full-speed USB device number 6 using ohci-pci
[   15.530135] usb 9-1: device descriptor read/64, error -62
[   15.759224] usb 9-1: device descriptor read/64, error -62
[   15.983312] usb 9-1: new full-speed USB device number 7 using ohci-pci
[   16.111309] usb 9-1: device descriptor read/64, error -62
[   16.340398] usb 9-1: device descriptor read/64, error -62
[   16.564378] usb 9-1: new full-speed USB device number 8 using ohci-pci
[   16.968454] usb 9-1: device not accepting address 8, error -62
[   17.091555] usb 9-1: new full-speed USB device number 9 using ohci-pci
[   17.495570] usb 9-1: device not accepting address 9, error -62
[   17.495603] usb usb9-port1: unable to enumerate USB device
[   17.673702] usb 9-1: new full-speed USB device number 10 using ohci-pci
[   17.801758] usb 9-1: device descriptor read/64, error -62
[   18.030814] usb 9-1: device descriptor read/64, error -62
[   18.254834] usb 9-1: new full-speed USB device number 11 using ohci-pci
[   18.382858] usb 9-1: device descriptor read/64, error -62
[   18.611902] usb 9-1: device descriptor read/64, error -62
[   18.835977] usb 9-1: new full-speed USB device number 12 using ohci-pci
[   19.240034] usb 9-1: device not accepting address 12, error -62
[   19.363101] usb 9-1: new full-speed USB device number 13 using ohci-pci
[   19.767182] usb 9-1: device not accepting address 13, error -62
[   19.767226] usb usb9-port1: unable to enumerate USB device

その特定の例は、安価なUSBメモリカードリーダーにすぎませんでした。

私にとってより重要な問題は、mythtvバックエンドボックスのQuad DVB-Tレシーバーも同じ問題の影響を受けるため、現時点では3.19を超えてそのマシンをアップグレードできないことです。これは、PCI-eカードで、USBブリッジへのpci-eのようなもので、USB経由で接続されたDVBチューナーです。完全にはわかりませんが、実際にはPCIe-> PCI-> USBカードの可能性があります。

動作している3.19カーネルに関するカードの詳細は次のとおりです。

# lsusb | grep Leadtek
Bus 010 Device 005: ID 0413:6680 Leadtek Research, Inc. 
Bus 010 Device 004: ID 0413:6680 Leadtek Research, Inc. 
Bus 010 Device 003: ID 0413:6680 Leadtek Research, Inc. 
Bus 010 Device 002: ID 0413:6680 Leadtek Research, Inc. 

# dmesg | grep -i DigitalNow| grep pci
[    9.405568] input: DigitalNow Quad DVB-T Receiver as /devices/pci0000:00/0000:00:0a.0/0000:04:00.0/0000:05:00.2/usb10/10-1/rc/rc1/input17
[    9.405687] rc1: DigitalNow Quad DVB-T Receiver as /devices/pci0000:00/0000:00:0a.0/0000:04:00.0/0000:05:00.2/usb10/10-1/rc/rc1
[    9.475939] input: DigitalNow Quad DVB-T Receiver as /devices/pci0000:00/0000:00:0a.0/0000:04:00.0/0000:05:00.2/usb10/10-2/rc/rc2/input22
[    9.476049] rc2: DigitalNow Quad DVB-T Receiver as /devices/pci0000:00/0000:00:0a.0/0000:04:00.0/0000:05:00.2/usb10/10-2/rc/rc2
[    9.542441] input: DigitalNow Quad DVB-T Receiver as /devices/pci0000:00/0000:00:0a.0/0000:04:00.0/0000:05:00.2/usb10/10-3/rc/rc3/input24
[    9.542617] rc3: DigitalNow Quad DVB-T Receiver as /devices/pci0000:00/0000:00:0a.0/0000:04:00.0/0000:05:00.2/usb10/10-3/rc/rc3
[    9.609134] input: DigitalNow Quad DVB-T Receiver as /devices/pci0000:00/0000:00:0a.0/0000:04:00.0/0000:05:00.2/usb10/10-4/rc/rc4/input26
[    9.609289] rc4: DigitalNow Quad DVB-T Receiver as /devices/pci0000:00/0000:00:0a.0/0000:04:00.0/0000:05:00.2/usb10/10-4/rc/rc4

# lspci | grep '^0[45]:'
04:00.0 PCI bridge: PLX Technology, Inc. PEX8112 x1 Lane PCI Express-to-PCI Bridge (rev aa)
05:00.0 USB controller: VIA Technologies, Inc. VT82xx/62xx UHCI USB 1.1 Controller (rev 62)
05:00.1 USB controller: VIA Technologies, Inc. VT82xx/62xx UHCI USB 1.1 Controller (rev 62)
05:00.2 USB controller: VIA Technologies, Inc. USB 2.0 (rev 65)

# lspci -vv -s 05:00
05:00.0 USB controller: VIA Technologies, Inc. VT82xx/62xx UHCI USB 1.1 Controller (rev 62) (prog-if 00 [UHCI])
    Subsystem: VIA Technologies, Inc. VT82xx/62xx UHCI USB 1.1 Controller
    Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
    Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
    Latency: 32, Cache Line Size: 64 bytes
    Interrupt: pin A routed to IRQ 26
    Region 4: I/O ports at d020 [size=32]
    Capabilities: [80] Power Management version 2
        Flags: PMEClk+ DSI- D1+ D2+ AuxCurrent=0mA PME(D0+,D1+,D2+,D3hot+,D3cold-)
        Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
    Kernel driver in use: uhci_hcd

    05:00.1 USB controller: VIA Technologies, Inc. VT82xx/62xx UHCI USB 1.1 Controller (rev 62) (prog-if 00 [UHCI])
        Subsystem: VIA Technologies, Inc. VT82xx/62xx UHCI USB 1.1 Controller
        Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
        Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
        Latency: 32, Cache Line Size: 64 bytes
        Interrupt: pin B routed to IRQ 41
        Region 4: I/O ports at d000 [size=32]
        Capabilities: [80] Power Management version 2
            Flags: PMEClk+ DSI- D1+ D2+ AuxCurrent=0mA PME(D0+,D1+,D2+,D3hot+,D3cold-)
            Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
        Kernel driver in use: uhci_hcd

    05:00.2 USB controller: VIA Technologies, Inc. USB 2.0 (rev 65) (prog-if 20 [EHCI])
        Subsystem: VIA Technologies, Inc. USB 2.0 Controller
        Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV+ VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
        Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
        Latency: 32, Cache Line Size: 64 bytes
        Interrupt: pin C routed to IRQ 50
        Region 0: Memory at fe500000 (32-bit, non-prefetchable) [size=256]
        Capabilities: [80] Power Management version 2
            Flags: PMEClk+ DSI- D1+ D2+ AuxCurrent=0mA PME(D0+,D1+,D2+,D3hot+,D3cold-)
            Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
        Kernel driver in use: ehci-pci

では、最近カーネルUSBドライバーで何が変更されましたか? これはバグですか、それとも構成の問題ですか?

いくつかのカーネルバージョン(3.8)ehci-hcd以前では、USBのものは変更されていたため、以前にロードする必要がありましたehci-pciinitramfs-tools以降は自動的にそれを処理するようにアップグレードされましたが、回避策の残されたコメントが私の/etc/modulesファイルに残っています:

# make sure ehci-pci loads immediately after ehci-hcd for kernel 3.8
# (should be handled automagically by initramfs-tools 0.110 now)
#ehci-hcd
#ehci-pci

これは、ドライバーを特定の順序でロードすることによって、または特定の古いドライバーをブラックリストに登録することによって処理できる同様の状況ですか?


ハードウェアとソフトウェアの詳細:

これは、次のようないくつかのマシンで発生しています。

  • AMD Phenom II X6 1090Tプロセッサー(ワークステーション)を搭載したAsus M4A89TD PRO USB3マザーボード
  • AMD Phenom II X6 1090Tプロセッサーを搭載したAsus M5A97(神話フロントエンド)
  • AMD Phenom II X6 1090Tプロセッサーを搭載したAsus Sabertooth 990FX(ワークステーションおよびサーバー)
  • AMD FX(tm)-8150 Eight-Core Processor(mythバックエンド)を搭載したAsus Sabertooth 990FX

最後の1つは、FX-8150(前のマザーボードが死んでそれを再構築する必要があったときに横になっていたもの)を備えた、DigitalNow Quad DVB-Tレシーバーを備えた神話ボックスです。最初のM4A89TD Proは、安価なUSBメモリカードリーダーを備えたマシンです。

すべてに8 GB以上のRAMがあり、独自のnvidiaドライバーを使用して、nvidia GTX-750(神話ボックス)またはGTX-560またはGTX-560Ti GPUのいずれかを備えています。すべてが最近のカーネルでDebian sidを実行しています(4.2.xはすべて神話のバックエンドですが、USBがHID以外で重要なのはUSB kbdとマウス、さらにはwacomタブレットでさえ、4.0以上で正常に動作します。カーネル)。

すべてのマシンは、RAID-1で128〜256 GBのSSDからブートし、/にはXFS、/ bootにはext4を使用します。mythtvバックエンドもzfsonlinuxを実行して、大容量ストレージを実現しています。ワークステーション/サーバーを組み合わせた場合と同様です。

私はdebianストックカーネル、liquorixカーネル、カスタムコンパイルカーネルを試しました。すべて同じ結果:3.19までは問題ありません。4.0以降では、DVB-Tレシーバーとメモリカードリーダーが壊れます。


注意:私は一般的な知識、またはグーグルを使って5分で見つけることができる情報の後でありません。4.0以上のカーネルでの既知のUSB(またはその他の関連する可能性のある)リグレッションに関する具体的な情報と、運が良ければパッチまたは回避策を求めています。


静的または動的カーネルを実行しますか?動的とはモジュールを意味します。動的に実行する場合は、完全に静的にコンパイルされたカーネルを使用して、最小限の環境(シェルプロンプトを即座に提供するkernel + initramfs)のようなもので起動して、デバイスを試します。それでも失敗する場合は、カーネルbugzillaにバグを報告してください。

私はモジュールを使用しています。私の言及から明らかなように/etc/modules。モジュールをカーネルに静的にリンクしても違いはなく、モジュールがロードされる順序を変更する機会が与えられないため、状況がさらに悪化する可能性があります。
cas

更新:マルチカードリーダーを搭載したボックスでLinuxカーネル4.3を試しました。変化なし、まだ壊れています。
cas

それでも4.3で問題が解決しない場合は、だれも問題を見たりバグを報告したりしていないとかなり安全に想定できます。ほとんどのバグは、メジャーカーネルサイクルの.3リリースで修正されています。したがって、リグレッションは組み込まれており、問題を解決するために必要なすべてのデータをドライバーのメンテナーに提供するために誰かが時間を割かない限り、問題は解決します。彼らがデバイスを持っていない場合、デバッグ担当者がデバイスを持っていない場合、ハードウェアの問題をデバッグすることは非常に難しいため、問題が発生している可能性があります。
Lizardx 2015年

cas、実際にアップグレードする必要がありますか?現時点で解決するのが難しいこのような問題に直面した場合、私は古くて機能しているカーネルで立ち往生するでしょう。残りのどの問題がアップグレードを必要としますか?(Lizardx回答の下でコメントを読んだ直後)

回答:


1

これは、少なくとも特定のハードウェアでは、4.x Linuxのカーネル回帰のように聞こえます。

http://archlinuxarm.org/forum/viewtopic.php?f=53&t=8798

これはこのコミットに含まれている可能性がありますが、システムに関する詳細情報を提供していないため、言うのは困難です。

https://github.com/torvalds/linux/commit/a0b5cd4ac2d6542d524d8063961bf914b5df1efa

一部のシステムでは、少なくともUSB 3で問題が発生しているようです。https//lists.debian.org/debian-kernel/2015/08/msg00066.html

ですから、本当の問題は、あなたのハードウェアは何か、そしてあなたが試した最新の4.xカーネルは何かということです。これは、最近の4.xリリースで解決されている可能性があります。USB 2と3の問題、または3つだけの問題か、USBバージョンとは関係ありませんか?それはそれを絞り込むのに役立ちます。あなたのデータはあなたのシステムのちょうどusb2 maxのように見えます。

カーネル回帰は正常です。

私が人々にこの種の質問をするときに言うように、新しいLinuxカーネルにはいくつかの可能な結果があります:

  1. 今は機能する前に機能しなかった何か
  2. すべてがシステム上で同じままでした
  3. 以前は機能していたが機能しなくなった
  4. いくつかは良くなり、いくつかは機能しなくなった

https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1455376 これは、USB処理に関するUbuntuのバグです。

通常、多くの人が使用するものに影響を与えるバグは比較的迅速に修正されるので、最新の安定版カーネルの最新リリースをチェックする価値があります。現時点では4.3です。

ubuntuを使用している場合は、少なくともLTSではなく現在のubuntuであれば、Debianの非安定リリースと同じように、liquorixカーネルを実行できます。

確認:inxi -bxxxは、システムの基本を示すのに役立ちます。inxiは、ほとんどのディストリビューションリポジトリからインストールできます。

これは、4.0 / 3.20におけるUSBの変更点のGreg KHのリストです。

https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=e29876723f7cb7728f0d6a674d23f92673e9f112

  usb: musb: fix device hotplug behind hub
  usb: dwc2: Fix a bug in reading the endpoint directions from reg.
  staging: emxx_udc: fix the build error
  usb: Retry port status check on resume to work around RH bugs
  Revert "usb: Reset USB-3 devices on USB-3 link bounce"
  uhci-hub: use HUB_CHAR_*
  usb: kconfig: replace PPC_OF with PPC
  ehci-pci: disable for Intel MID platforms (update)
  usb: gadget: Kconfig: use bool instead of boolean
  usb: musb: blackfin: remove incorrect __exit_p()
  USB: fix use-after-free bug in usb_hcd_unlink_urb()
  ehci-pci: disable for Intel MID platforms
  usb: host: pci_quirks: joing string literals
  USB: add flag for HCDs that can't receive wakeup requests (isp1760-hcd)
  USB: usbfs: allow URBs to be reaped after disconnection
  cdc-acm: kill unnecessary messages
  cdc-acm: add sanity checks
  usb: phy: phy-generic: Fix USB PHY gpio reset
  usb: dwc2: fix USB core dependencies
  usb: renesas_usbhs: fix NULL pointer dereference in dma_release_channel()

http://kernelnewbies.org/Linux_4.0は、完全な変更セットを示しています。

https://lkml.org/lkml/2015/6/26/511これは4.2-rc1のUSBの変更点です。ご覧のように、「何が変更されたか」を尋ねるのはおそらく正しい質問ではありません。最新のリリースでハードウェアの問題が解決されているかどうかを確認する方が便利です。


1
あなたは本当に私がまだ知らないことを何も言っていない、これはすべてただの一般的な知識/基本的なグーグルのものです。4.0以降のカーネルでの変更/バグ/回帰に関する特定の情報が必要です...できればパッチへのポインタまたは少なくとも回避策が必要です。ランチパッドのバグレポートは、3.18に存在するバグを参照しているため、明らかに別の問題に関するものです。一方、私の問題は3.19までは問題ありませんが、4.0以降では問題ありません。私が試した最新のカーネルは、水9月30日の4.2です。神話ボックスを再起動する時間があるときは、4.3を試してみますが、改善は期待できません。
cas

OTOH、PCI-eバグの言及は興味深いものであり、フォローアップする価値があります...それは4月にさかのぼって、おそらく4.2(おそらく私が試した)にはすでにあります。github.com/ljalves/linux_media/issues/107によると、それはgit.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/…4.16で修正され まし
cas
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.