禁用xhci_pci模块解决应用启动缓慢却导致键盘失效的相关问题咨询
禁用xhci_pci模块解决应用启动缓慢却导致键盘失效的相关问题咨询
兄弟,我太懂你这种两难的处境了——好不容易找到能把应用启动时间从一分钟压到几秒的办法,结果直接把键盘搞罢工了,这换谁都头疼。咱们一步步来捋清楚问题,找个两全的方案:
为什么禁用xhci_pci会让键盘失效?
首先得搞明白xhci_pci是干啥的:它是USB 3.0/3.1/3.2及以上版本的主机控制器驱动模块,你的笔记本内置键盘(哪怕是看起来“集成”的那种)大概率也是通过USB总线连接到主板的,卸载这个模块等于直接关掉了USB控制器,键盘自然就失去响应了。
怎么在解决kworker高CPU问题的同时保留键盘功能?
直接黑名单xhci_pci显然不是最优解,咱们试试这些针对性的替代方案:
1. 给xhci_pci添加内核参数修复bug
很多时候kworker占满CPU是因为xhci_pci的某些兼容性bug,不用卸载模块,加个内核参数就能解决:
- 编辑GRUB配置文件:
sudo nano /etc/default/grub - 找到
GRUB_CMDLINE_LINUX_DEFAULT这一行,把以下参数加进去(二选一试试):xhci_hcd.msi=0(禁用MSI中断,部分AMD平台的USB控制器对MSI支持不好)xhci_hcd.quirks=0x2000000(启用特定的兼容性补丁)
- 保存文件后更新GRUB:
sudo update-grub - 重启系统,看看应用启动速度和键盘功能是不是都正常了。
2. 仅禁用特定的xhci_pci设备(而非整个模块)
如果你的笔记本有多个USB控制器,可以只移除出问题的那个,而保留键盘用的控制器:
- 先列出所有USB控制器的PCI地址:
lspci | grep USB - 找到对应高CPU占用的那个控制器(通常是标有“USB 3.x/4.x Host Controller”的条目),记下它的PCI地址(比如
00:14.0) - 临时移除该设备:
echo 1 | sudo tee /sys/bus/pci/devices/0000:00:14.0/remove(把地址换成你自己的) - 如果临时移除后问题解决且键盘正常,要永久生效的话,可以写个udev规则:
创建文件/etc/udev/rules.d/99-disable-bad-xhci.rules,内容为:
这里的ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x1022", ATTR{device}=="0x790b", RUN+="/bin/sh -c 'echo 1 > /sys/bus/pci/devices/$kernel/remove'"vendor和device值可以从lspci -nn | grep USB的结果里拿到(比如[1022:790b])
3. 尝试更新内核或BIOS
你的硬件是比较新的Ryzen 7000系列+RTX 4060,老内核可能对新硬件的USB控制器支持不好:
- 升级到22.04的HWE内核:
sudo apt install linux-generic-hwe-22.04,重启后看看问题是否解决 - 去华硕官网查一下你的笔记本型号有没有最新的BIOS更新,很多时候BIOS更新能修复USB控制器的兼容性问题
强行黑名单xhci_pci会带来哪些其他问题?
如果真的硬着头皮把xhci_pci加入黑名单,除了键盘失效,你还可能遇到这些麻烦:
- 所有USB 3.x及以上的外接设备都无法使用:包括U盘、移动硬盘、USB-C显示器、外接显卡、USB无线网卡、摄像头、USB耳机等
- 笔记本内置的部分设备可能罢工:比如触控板、指纹识别器、内置摄像头,这些很多都是走USB总线的
- 系统启动异常:部分现代笔记本的BIOS/UEFI依赖USB控制器,黑名单后可能卡在启动界面,甚至无法识别启动磁盘
备注:内容来源于stack exchange,提问作者Bruno Golosio
相关产品推荐
相关产品推荐

