Linux 커널 4.0 이상에서는 USB 드라이버에 어떤 변경 사항이 발생했습니까?

Linux 커널 4.0 이상에서는 USB 드라이버에 어떤 변경 사항이 발생했습니까?

내 모든 USB 장치는 최대 3.19의 커널을 사용하여 완벽하게 실행됩니다.

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 메모리 카드 리더기일 뿐입니다. 별로 신경쓰지 않습니다.

나에게 더 중요한 문제는 mythv 백엔드 박스의 Quad DVB-T 수신기와 동일한 문제가 있어서 현재 해당 시스템을 3.19 이상으로 업그레이드할 수 없다는 것입니다. 이것은 일종의 PCI-E-USB 브리지처럼 보이는 PCI-e 카드이며 DVB 튜너는 USB를 통해 연결됩니다. 확실하지는 않지만 실제로는 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 드라이버의 최근 변경 사항은 무엇입니까? 이것은 버그입니까, 아니면 구성 문제입니까?

USB 관련 내용은 몇 가지 커널 버전(3.8) 전에 변경 ehci-hcd되었으므로 ehci-pci. initramfs-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 마더보드(워크스테이션)
  • ASUS M5A97에는 AMD Phenom II X6 1090T 프로세서(Myth 프론트 엔드)가 장착되어 있습니다.
  • AMD Phenom II X6 1090T 프로세서를 탑재한 Asus Sabertooth 990FX(워크스테이션 및 서버)
  • ASUS Sabertooth 990FX에는 AMD FX(tm)-8150 8코어 프로세서(Myth 백엔드)가 탑재되어 있습니다.

마지막 제품은 DigitalNow 쿼드 DVB-T 수신기가 장착된 신화적인 상자인 FX-8150(이전 마더보드가 고장난 후 재구축해야 했습니다)이었습니다. 첫 번째는 저렴한 USB 메모리 카드 리더기를 탑재한 M4A89TD Pro입니다.

모두 최소 8GB의 RAM을 갖추고 있으며 모두 독점 nvidia 드라이버를 사용하는 nvidia GTX-750(Myth Box) 또는 GTX-560 또는 GTX-560Ti GPU를 갖추고 있습니다. 모든 시스템은 최신 커널(신화적인 백엔드를 제외한 4.2.x 모두)과 함께 Debian sid를 실행하고 있습니다. USB가 HID를 제외한 모든 것에 중요한 유일한 시스템이기 때문입니다. USB kbd 및 마우스, 심지어 wacom 태블릿도 4.0 이상에서 잘 작동할 수 있습니다. 핵심).

모든 시스템은 RAID-1에서 128-256GB SSD로 부팅되며 /XFS를 사용하고 /boot는 ext4를 사용합니다. Mythtv 백엔드는 대용량 저장을 위해 zfsonlinux도 실행합니다. 워크스테이션/서버 조합에도 마찬가지입니다.

나는 데비안 기본 커널, liquiix 커널 및 사용자 정의 컴파일 커널을 사용해 보았습니다. 모든 결과는 동일합니다. 최대 3.19까지 괜찮습니다. 버전 4.0 이상에서는 DVB-T 수신기와 메모리 카드 리더기가 손상되었습니다.


참고: 저는 일반적인 지식이나 Google을 통해 5분 동안 찾을 수 있는 정보를 찾고 있지 않습니다. 저는 4.0+ 커널에서 알려진 USB(또는 기타 관련) 회귀에 대한 구체적인 정보를 찾고 있으며, 운 좋게도 패치나 해결 방법도 찾고 있습니다.

답변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과 관련된 것입니까, 아니면 USB 3과 관련된 것입니까, 아니면 USB 버전과 관련이 없는 것입니까? 이렇게 하면 범위를 좁히는 데 도움이 됩니다. 귀하의 데이터는 시스템의 usb2 max인 것처럼 보입니다.

커널이 정상으로 돌아옵니다.

사람들이 이와 같은 질문을 하면 나는 새로운 Linux 커널에 대해 여러 가지 가능한 결과가 있다고 말합니다.

  1. 이전에 작동하지 않았던 것이 이제는 작동합니다.
  2. 시스템의 모든 내용은 동일하게 유지됩니다.
  3. 이전에 작동했던 것이 더 이상 작동하지 않습니다.
  4. 어떤 것들은 좋아지고 어떤 것들은 멈춰

https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1455376 이것은 Ubuntu의 USB 처리 버그입니다.

일반적으로 많은 사람들에게 영향을 미치는 버그는 상대적으로 빠르게 수정되므로 최신 안정 커널의 최신 버전을 확인해 볼 가치가 있습니다. 현재 버전은 4.3이라고 생각합니다.

우분투를 사용하는 경우 적어도 LTS가 아닌 현재 우분투인 경우 Liquix 커널을 실행할 수 있으며 데비안의 비안정적인 릴리스에서도 마찬가지입니다.

inxi -bxxx를 살펴보면 시스템의 기본 사항을 보여주는 데 도움이 됩니다. inxi는 대부분의 배포 저장소에서 설치할 수 있습니다.

Greg KH의 4.0/3.20 USB 변경 사항 목록은 다음과 같습니다.

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 변경 사항입니다. 보시다시피, "무엇이 변경되었는지" 묻는 것은 올바른 질문이 아닐 수 있습니다. 하드웨어 문제가 최신 버전에서 수정되었는지 확인하는 것이 더 유용합니다.

관련 정보