仅针对特定内核版本将模块列入黑名单?

仅针对特定内核版本将模块列入黑名单?

当我启动 4.4.x 内核时,我想确保有缺陷的暂存驱动程序r8723au被列入黑名单,以支持经过大量改进的主线rtl8xxxu

但是,当我启动较旧的 4.2.x 内核时,我仍然需要使用旧的r8723au驱动程序。

有没有办法将模块列入黑名单仅有的针对特定的内核版本?(更新:我想将老的模块,,r8723au来自新的内核,以防止它接管新的驱动程序。)

我的想法:

  • /etc/modprobe.d/blacklist-r8723au.conf-- 据我所知,不可能只为一个内核版本指定黑名单
  • /etc/default/grub-- 无法modprobe.blacklist=r8723au为某些版本指定内核命令行,而无法为其他版本指定

我得到的快速而简单的解决方案是手动编辑/boot/grub/grub.cfg并将相关的黑名单参数添加到特定的内核版本......但当然这会在我下次运行时自动覆盖update-grub(也许是在安装更新的 Xenial/16.04 内核时)。

答案1

据我所知,模块 rtl8xxxu 不存在于内核版本 4.2.0-xx 中,因此启动 4.2.0-xx 内核应该没问题。

我不知道这两个驱动程序是否覆盖相同的 usb.id,但是,您可以通过重命名模块来阻止 r8723au 在 4.4.0-xx 中加载。例如:

sudo mv /lib/modules/4.4.0-21-generic/kernel/drivers/staging/rtl8723au/r8723au.ko  /lib/modules/4.4.0-21-generic/kernel/drivers/staging/rtl8723au/r8723au.bak

sudo mv /lib/modules/4.4.0-22-generic/kernel/drivers/staging/rtl8723au/r8723au.ko  /lib/modules/4.4.0-22-generic/kernel/drivers/staging/rtl8723au/r8723au.bak

当更新管理器安装了更新的内核版本(例如 -23)时,您将需要重复该过程。

相关内容