如何在启动时强制加载内核模块(modprobe -f)?

如何在启动时强制加载内核模块(modprobe -f)?

我想在我的系统(Debian 9)上启动时加载自定义内核模块。该模块的 vermagic 字符串与我的内核版本不完全匹配,但我可以使用modprobe -f module_nameor加载它insmod -f /path/to/module,并且它似乎工作正常。

如果我只是添加模块的名称是/etc/modules-load.d/modules.conf行不通的,systemctl 会显示 systemd-modules-load.service 在尝试加载模块时会出现错误。

我可以告诉 systemd 强制加载模块吗?

答案1

您应该能够使用 中的配置文件覆盖安装行为/etc/modprobe.d,例如/etc/modprobe.d/module_name.conf

install module_name /sbin/modprobe -i -f module_name

/sbin/modprobe -i -f module_name这指示模块加载代码在发出安装请求时运行module_name-i告诉在处理命令时modprobe忽略install指令(否则我们会遇到循环)。

答案2

您应该按照以下步骤操作:

  1. 将 module_name.conf 添加到 /etc/modules-load.d/。
    module_name.conf 文件应该只包含要加载的内核模块名称列表,以换行符分隔。

  2. 将另一个 module_name.conf 添加到 /etc/modprobe.d/ 。
    该文件的内容为:
    install module_name /sbin/modprobe -i -f module_name
    当请求安装 module_name 时,告诉模块加载代码运行 /sbin/modprobe -i -f module_name。

  3. 将 module_name.ko 添加到 /lib/modules/$(uname -r)/kernel/drivers/net/
    您可以将自定义内核模块文件放入 /lib/modules/$(uname -r)/kernel/drivers/ xxx/.

  4. sudo depmod -a
    彻底探测和检查内核中的所有模块。

  5. 重启

  6. lsmod | grep module_name
    您可以找到已加载的自定义内核模块。

相关内容