![如何防止连接 USB 闪存驱动器时自动加载 uas 和 usb_storage 内核模块?](https://linux22.com/image/136053/%E5%A6%82%E4%BD%95%E9%98%B2%E6%AD%A2%E8%BF%9E%E6%8E%A5%20USB%20%E9%97%AA%E5%AD%98%E9%A9%B1%E5%8A%A8%E5%99%A8%E6%97%B6%E8%87%AA%E5%8A%A8%E5%8A%A0%E8%BD%BD%20uas%20%E5%92%8C%20usb_storage%20%E5%86%85%E6%A0%B8%E6%A8%A1%E5%9D%97%EF%BC%9F.png)
我使用 buildroot 生成一个内核映像,并将其放入 SD 卡上进行启动。在 buildroot 中,我模块化了 USB 海量存储。当我在没有连接 USB 的情况下启动我的开发板时,我可以看到没有模块正在使用 运行lsmos
。但当我插入 USB 时,模块uas
会usb_storage
自动加载并允许访问 USB。我想防止这种情况发生,并且仅当我手动加载这两个模块时才允许访问 USB。
我在网上阅读了一些关于将模块列入黑名单或编辑与模块相关的文件的文章;但是,这不起作用,因为我所做的任何更改都会在关闭电源时被删除。所以我需要另一个永久的选项,也许在生成图像之前在 buildroot 设置中完成?
答案1
我遇到过同样的问题。问题是默认情况下,busybox 的 modprobe 实现(在 buildroot 中使用)不支持blacklist
.
解决方案是在编译镜像时在 busybox 配置中启用此功能。为此,请创建一个配置片段文件,例如名为 的文件busybox.config
,其中包含以下内容:
CONFIG_FEATURE_MODPROBE_BLACKLIST=y
然后,将该文件的路径添加到 buildroot 选项中。在 buildroot 配置文件中,它应该类似于以下内容:
BR2_PACKAGE_BUSYBOX_CONFIG_FRAGMENT_FILES="../busybox.config"
现在,当您运行 时make
,您将看到 buildroot make 进程正在重建 busybox 的配置文件。注意 modprobe 输出,它应该如下所示:
modprobe (28 kb) (MODPROBE) [Y/n/?] y
Blacklist support (FEATURE_MODPROBE_BLACKLIST) [Y/n/?] y
完成此操作后,您只需写入即可blacklist <themodule>
,/etc/modprobe.conf
它会按预期工作。