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卡,看起来像是某种pci-e到usb桥,而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驱动程序最近发生了什么变化? 这是错误还是配置问题?

以前有几个内核版本(3.8),USB内容已更改,因此ehci-hcd必须在之前加载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

是否存在类似情况,可以通过按特定顺序加载驱动程序或将某些过时的驱动程序列入黑名单来处理?


一些更多的硬件和软件详细信息:

这在几台机器上发生过,包括:

  • 华硕M4A89TD PRO USB3主板配备AMD Phenom II X6 1090T处理器(工作站)
  • 华硕M5A97搭配AMD Phenom II X6 1090T处理器(神话前端)
  • 华硕Sabertooth 990FX与AMD Phenom II X6 1090T处理器(工作站和服务器)
  • 华硕Sabertooth 990FX与AMD FX(tm)-8150八核处理器(神话后端)

最后一个是FX-8150(这是我在以前的主板死了时不得不躺在那里并且必须对其进行重建),是DigitalNow Quad DVB-T接收器的神话包装。第一个是M4A89TD Pro,它是带有廉价USB存储卡读取器的机器。

全部都具有至少8GB RAM,并且都具有nvidia GTX-750(神话盒子)或GTX-560或GTX-560Ti GPU(使用专有的nvidia驱动程序)。所有人都在运行Debian sid,并且使用最新的内核(除了神话后端,其他所有内核上都使用4.2.x,因为这是USB除HID以外对其他任何事物都重要的唯一内核-USB kbd和鼠标,甚至wacom平板电脑都可以正常工作,BTW在4.0+内核)。

所有机器都使用XFS的/和ext4的/ boot来启动RAID-1中的128-256GB SSD。mythtv后端也正在运行zfsonlinux进行大容量存储。工作站/服务器也是如此。

我已经尝试过debian stock内核,liquidix内核和定制编译的内核。所有结果均相同:最高为3.19。4.0及更高版本破坏了我的DVB-T接收器和存储卡读取器。


请注意:我不了解一般知识,也不了解可以在五分钟之内找到的信息。我想了解有关4.0+内核中任何已知USB(或其他可能相关的)回归的具体信息,如果幸运的话,我提供了补丁或解决方法。


您运行静态还是动态内核?动态手段与模块。如果您以动态方式运行,请尝试使用完全静态编译的内核引导至最小环境(可立即提供shell提示的内核+ initramfs),然后尝试使用设备。如果仍然失败,请在内核bugzilla中提交错误。

我使用模块。从我提到的显而易见/etc/modules。将模块静态链接到内核不会造成任何影响,并且可能由于没有机会改变模块的加载顺序而使情况更糟。
cas 2015年

更新:我只是在多卡读卡器上尝试过Linux内核4.3。没有变化,仍然破碎。
cas 2015年

如果它在4.3上仍然存在问题,则可以相当安全地假定没有人看到此问题或报告错误。大多数错误已通过主要内核周期的.3版本修复。因此,回归是内置的,如果没有人花时间向驾驶员维护者提供解决问题所需的所有数据(如果他们可以解决的话),它就不会消失。如果他们没有该设备,则可能会遇到麻烦,因为在调试人员没有设备的情况下调试硬件问题非常困难。
Lizardx 2015年

cas,您实际上是否需要升级?如果我遇到这样一个问题,这是很难解决,现在,我只想坚持与老工作的内核。还有哪些问题促使您升级?(就在阅读了Lizardx答案下的评论之后)

Answers:


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错误。

通常,影响很多人使用的东西的bug会相对迅速地得到修复,因此值得检查最新稳定内核的最新版本,我认为目前是4.3。

如果您使用的是ubuntu,则至少在当前的ubuntu(不是LTS)(如果是debian,非稳定版)相同的情况下,可以运行liquorix内核。

看到: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这是USB在4.2-rc1中的更改​​。如您所见,询问“发生了什么变化”可能不是确切的正确问题,更有用的是确定在最新版本中硬件是否已解决该问题。


1
您真的没有告诉我任何我不知道的内容,这全都是常识/基本的谷歌搜索内容。我需要有关4.0及更高版本内核中的更改/错误/回归的特定信息,并希望有指向补丁的指针或至少是一种解决方法。启动板错误报告显然是关于另一个问题的,因为它是指3.18中存在的错误,而我的版本在3.19之前的所有版本中都可以,但在4.0或更高版本中则不行。我尝试过的最新内核是9月30日星期三的4.2。当我有时间重新启动神话框时,我将尝试4.3,但我预计不会有任何改善。
cas 2015年

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.