在linux(Arch Linux)下安装USB 3.0 Express卡(尝试添加内核参数intel_iommu=off pciehp.pciehp_force=1)

在linux(Arch Linux)下安装USB 3.0 Express卡(尝试添加内核参数intel_iommu=off pciehp.pciehp_force=1)

我正在尝试将 CSL USB 3.0 Express 卡安装到我的 Arch Linux 系统中。

但是,当我这样做时,我收到以下错误消息:

xhci_hcd 0000:05:00.0:xHCI 主机控制器没有响应,假设已死

xhci_hcd 0000:05:00.0: HC 死亡;打扫干净

我用谷歌搜索并尝试添加以下内核参数

intel_iommu=off

有的网站还提到

iommu

不幸的是这对我没有任何帮助。

我还尝试添加:

pciehp pciehp_force=1

并尝试去做

sudo modprobe pciehp pciehp_force=1

但 Arch Linux 抱怨它找不到内核模块pciehp

我没有找到任何关于如何pciehp在 Arch Linux 上安装内核模块的信息。有人说,它是内置在内核中的。

调试信息:

内核版本: 4.16.6-1-ARCH

dmesg启用调试xhci_hcd并使用xhci_hcdgrep

lspci -nn:

05:00.0 USB controller [0c03]: Renesas Technology Corp. uPD720202 USB 3.0 Host Controller [1912:0015] (rev 02)

dmesg(旧的没有xhci_hcd-debugging 和没有grep

参考人们正在解决该问题的地方:

Linux 邮件列表:

其他来源:

答案1

嗯。除非我忽略了某些东西,否则看起来控制器已初始化两次:

[    5.195136] xhci_hcd 0000:05:00.0: xHCI Host Controller
[    5.195145] xhci_hcd 0000:05:00.0: new USB bus registered, assigned bus number 3
[    5.202621] xhci_hcd 0000:05:00.0: hcc params 0x014051cf hci version 0x100 quirks 0x00000090
....
[    5.203568] xhci_hcd 0000:05:00.0: xHCI Host Controller
[    5.203572] xhci_hcd 0000:05:00.0: new USB bus registered, assigned bus number 4
[    5.204014] usb usb4: We don't know the algorithms for LPM for this host, disabling LPM.

瑞萨产品信息似乎是说,虽然每个 USB 3.0/USB 2.0 传统根集线器各有两个端口,但只有一个根集线器,所以我不明白发生了什么。

如果两个实例xhci_hcd同时尝试控制该卡,那么这当然会出错。

接下来我要做的就是查看xhci_hcd源代码,并使用调试支持重新编译。这需要编程经验,所以如果您不知道如何做到这一点,或者对内核错误跟踪器处理的任何内容提交错误报告xhci_hcd,即使开发人员只是告诉您我很愚蠢并且重复初始化是正常的。

编辑

检查调试消息,这看起来很奇怪:

[    2.423207] xhci_hcd 0000:05:00.0: Finished xhci_run for USB2 roothub
[    2.423420] xhci_hcd 0000:05:00.0: Endpoint 0x81 ep reset callback called
[    2.423547] xhci_hcd 0000:05:00.0: set port power, actual port 0 status  = 0x2a0
[    2.423563] xhci_hcd 0000:05:00.0: set port power, actual port 1 status  = 0x2a0
[    2.423613] xhci_hcd 0000:05:00.0: xHCI Host Controller
[    2.423616] xhci_hcd 0000:05:00.0: new USB bus registered, assigned bus number 2
[    2.423621] xhci_hcd 0000:05:00.0: // Turn on HC, cmd = 0x5.
[    2.426468] xhci_hcd 0000:05:00.0: Finished xhci_run for USB3 roothub
[    2.426630] xhci_hcd 0000:05:00.0: Endpoint 0x81 ep reset callback called
[    2.426798] xhci_hcd 0000:05:00.0: set port power, actual port 0 status  = 0x2a0
[    2.426819] xhci_hcd 0000:05:00.0: set port power, actual port 1 status  = 0x2a0
[    2.426893] xhci_hcd 0000:05:00.0: remove, state 1
[    2.427674] xhci_hcd 0000:05:00.0: USB bus 2 deregistered
[    2.427731] xhci_hcd 0000:05:00.0: remove, state 1

因此,在初始化所有内容后,USB 2.0 和 USB 3.0 根集线器都会调用重置。它们被删除,然后驱动程序尝试再次初始化整个东西(这是我看到的第二次初始化)。只是这一次却惨遭失败。

在内核源代码中,函数xhci_endpoint_reset有这样的注释:“我们可能需要在 xhci 4.8.1 中实现 config ep cmd”和“现在只需打印调试以跟踪情况”。

所以这对于内核开发人员来说绝对是一个案例。确保使用调试输出修改错误报告。

答案2

我遇到相同或类似的问题。在这里开了一个线程: https://bbs.archlinux.org/viewtopic.php?pid=1784837

我的测试得出的结果是,它显示内核为 4.12.8-1-ARCH。在另一台笔记本电脑上,同样的卡也可以工作 - 现在使用 Linux 4.15.15。

答案3

使用最新的当前内核,5.0.10-arch1-1-ARCH该卡可以正常工作。但在我的系统上,只有当我在启动之前插入设备时,它才有效。

其他解决方案:

在上面的链接中,泽维尔说这里,他找到了将内核参数添加pci=nomsi到启动选项中的解决方法。我没有进一步调查它。

答案4

添加iommu=softgrub 的参数解决了我的问题

相关内容