禁用Linux中的USB端口

禁用Linux中的USB端口

我已经搜索了很多这个问题的答案,但我能找到的最接近的解决方案是,但这对我不起作用。

这是我的系统:

# 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 端口,这可能是一个解决方案。

相关内容