![禁用Linux中的USB端口](https://linux22.com/image/87580/%E7%A6%81%E7%94%A8Linux%E4%B8%AD%E7%9A%84USB%E7%AB%AF%E5%8F%A3.png)
我已经搜索了很多这个问题的答案,但我能找到的最接近的解决方案是这,但这对我不起作用。
这是我的系统:
# uname -a
Linux vin 4.4.0-1-amd64 #1 SMP Debian 4.4.6-1 (2016-03-17) x86_64 GNU/Linux
问题是这样的:我的一个 USB 端口似乎已失效。任何尝试读取“/sys/bus/usb/devices/usb1/descriptors”的程序都会导致程序挂起,处于不可杀死的状态。
不幸的是,很多软件似乎都想访问 USB1,包括 chrome 和 Blender,这就是为什么这让我如此烦恼。当我用 strace 调用这些程序时,它们总是在尝试打开“/sys/bus/usb/devices/usb1/descriptors”时挂起。
我尝试过诸如“echo suspend > /sys/bus/usb/devices/usb1/power/level”之类的操作,但效果不好 - 该命令只是像其他命令一样挂起。
我尝试使用上面链接的帖子中提到的 hubpower 代码,但它似乎也像其他代码一样挂起。
我尝试关闭整个系统并打开计算机本身以直接断开USB端口,但是整个USB端口集合(有很多)似乎与主板集成得非常紧密,而且我看不到任何USB端口。拔掉任何东西的方法。当然,我没有丰富的将电线插入和拔出主板的经验。如果唯一的希望就是那样做,我就有希望做到这一点。
我尝试进入 BIOS 并禁用除一个之外的所有 USB 端口;然后禁用除下一个之外的所有内容;以及下一个;等等,看看是哪一个出了问题。但它似乎没有任何效果 - Linux 仍然能够很好地识别端口以使用我的 USB 鼠标和键盘。 Linux 似乎并不关心 BIOS 配置是什么。
我想到的是,可能有某种方法可以告诉 Linux 内核忽略 USB1,但这样做时不需要实际尝试与 USB1 交互(因为这似乎会导致无法杀死的挂起)。但我不知道该怎么做。
答案1
部分答案:我不确定您是否只能禁用一个 USB 端口,但您可以禁用控制器及其所有端口。
您可以使用 lspci 列出控制器:lspci -k| grep -i usb -A2
例如,我得到:
03:00.0 USB controller: ASMedia Technology Inc. ASM1142 USB 3.1 Host Controller
Subsystem: Micro-Star International Co., Ltd. [MSI] ASM1142 USB 3.1 Host Controller
Kernel driver in use: xhci_hcd
Kernel modules: xhci_pci
这意味着 PCI 端口 03:00.0 上的 USB 控制器由 xhcp_pci 内核模块处理。
现在,我可以使用以下命令要求驱动程序不要管理该控制器:
echo "0000:03:00.0" | sudo tee /sys/bus/pci/drivers/xhci_hcd/unbind
如果您不介意丢失该控制器的其他 USB 端口,这可能是一个解决方案。