我正在尝试将 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_hcd
grep
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=soft
grub 的参数解决了我的问题