【问题标题】:Prevent usbhid from autoloading when USB HID device is plugged in插入 USB HID 设备时防止 usbhid 自动加载
【发布时间】:2016-08-05 09:53:09
【问题描述】:

我正在尝试(可逆地)禁用 Raspbian Jessie 安装(内核版本 4.4.16-v7+)上的 USB HID 支持。我们需要将 Raspberry Pi 放在半公共空间并在电视上显示内容,并且我们希望让它至少有点难以弄乱它。

到目前为止,我已经设法通过 rmmod 使 usbhid 模块从内核中移除。不过,在对模块进行 rmmod 后,似乎每次我插入 USB 键盘或鼠标时,设备驱动程序都会重新加载到内核中。

有什么办法可以防止吗?

【问题讨论】:

    标签: linux kernel raspbian hid hotplugging


    【解决方案1】:

    udev 是最好和最简单的方法,添加一个新规则,例如: /etc/udev/rules.d/99-disable-usb-hid.rules:

    SUBSYSTEMS=="usb", DRIVERS=="usbhid", ACTION=="add", ATTR{authorized}="0"
    

    并重新启动 udev。 我刚刚在 Debian Jessie ARM 4.4.16 中对其进行了测试。

    【讨论】:

    • 这是一个非常酷的解决方案,我喜欢这个比我最终实现的更好(将有问题的内核模块列入黑名单)。希望我知道这种可能性。
    【解决方案2】:

    我能想到两个选择:

    更简单:

    通过添加将 /etc/modprobe.d/blacklist.conf 中的内核模块列入黑名单:

    blacklist usbhid
    

    确保您使用 sudo 或以 root 身份登录以 root 身份执行此操作,否则此文件是只读的。

    更难:

    如果您有能力重新编译您正在使用的内核,那么您可以在内核配置文件中设置 CONFIG_USB_HID=n 以完全禁用 usbhid。

    您可以关注 Raspberry Pi 的 kernel building steps,一旦您将所有内容都设置好构建,您就可以修改配置文件,使 CONFIG_USB_HID=n。您可以在 menuconfig 期间执行此操作,也可以按照我通常执行的方式执行此操作,即在运行 make defconfig 后编辑隐藏的 .config 文件。有关配置和构建 linux 内核的更多信息,请参阅linux kernel in a nutshell

    由于 Raspberry Pi 是 ARM,并且我假设您的计算机是 x86,因此您需要设置一个交叉编译器工具链。这些信息也应该在 RasPi 的内核构建步骤中找到。

    然后继续按照 RasPi 的内核构建步骤将内核安装到您的 Raspberry Pi 上。这应该可以解决出现 usbhid 的问题。它不会一开始就被烘焙到内核中。

    【讨论】:

    • 我实际上已经尝试过内核重新编译以使相应的模块成为可选模块,但是一旦插入设备,它总是会自动加载,所以没有成功......我不想要完全失去功能,所以完全省略模块只是最后的手段。正如您所描述的,我可以通过将其列入黑名单来完成我想要的事情,尽管将其放入 blacklist.conf 不知何故不起作用。我不得不将 usbhid、usbkbd 和 usbmouse 的黑名单行放入 /etc/modprobe.d/usbkbd.conf 等;出于某种原因,仅 usbhid 还不够。
    • 有时在运行 make 配置选项时会自动再次设置为“y”或“n”。听起来您已经找到了一个可行的解决方案,但如果您确实需要强制配置选项,您可以在 make 命令之后包含它。例如,您可以运行 make CONFIG_USB_HID=n 来强制执行该配置选项。
    • 黑名单 usbhid 在 Ubuntu 16_04 中对我不起作用
    猜你喜欢
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    相关资源
    最近更新 更多