我正在尝试(可逆地)禁用 Raspbian Jessie 安装(内核版本 4.4.16-v7+)上的 USB HID 支持。我们需要将 Raspberry Pi 放在半公共空间并在电视上显示内容,我们希望至少让它有点难以处理。
到目前为止,我已经设法通过 rmmod 使 usbhid 模块从内核中移除。但是,在对模块进行 rmmod 之后,似乎每次我插入 USB 键盘或鼠标时,设备驱动程序都会重新加载到内核中。
有什么办法可以防止这种情况发生吗?
我正在尝试(可逆地)禁用 Raspbian Jessie 安装(内核版本 4.4.16-v7+)上的 USB HID 支持。我们需要将 Raspberry Pi 放在半公共空间并在电视上显示内容,我们希望至少让它有点难以处理。
到目前为止,我已经设法通过 rmmod 使 usbhid 模块从内核中移除。但是,在对模块进行 rmmod 之后,似乎每次我插入 USB 键盘或鼠标时,设备驱动程序都会重新加载到内核中。
有什么办法可以防止这种情况发生吗?
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 中对其进行了测试。
我可以想到两个选择:
更轻松:
通过添加以下内容将 /etc/modprobe.d/blacklist.conf 中的内核模块列入黑名单:
blacklist usbhid
确保使用 sudo 或以 root 身份登录以 root 身份执行此操作,否则此文件是只读的。
更难:
如果您有能力重新编译您正在使用的内核,那么您可以在内核配置文件中设置 CONFIG_USB_HID=n 以完全禁用 usbhid。
您可以按照 Raspberry Pi 的内核构建步骤进行操作,一旦所有内容都准备好构建,您就可以修改配置文件,使 CONFIG_USB_HID=n。您可以在 menuconfig 期间执行此操作,也可以按照我通常执行的方式执行此操作,即在运行 make defconfig 后编辑隐藏的 .config 文件。有关配置和构建 linux 内核的更多信息,请参阅linux kernel in a nutshell。
由于 Raspberry Pi 是 ARM,并且我假设您的计算机是 x86,因此您需要设置一个交叉编译器工具链。这些信息也应该在 RasPi 的内核构建步骤中找到。
然后继续按照 RasPi 的内核构建步骤将内核安装到您的 Raspberry Pi 上。这应该可以解决出现 usbhid 的问题。它不会首先被烘焙到内核中。