我想在我的系统(Debian 9)上启动时加载自定义内核模块。该模块的 vermagic 字符串与我的内核版本不完全匹配,但我可以使用modprobe -f module_name
or加载它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
您应该按照以下步骤操作:
将 module_name.conf 添加到 /etc/modules-load.d/。
module_name.conf 文件应该只包含要加载的内核模块名称列表,以换行符分隔。将另一个 module_name.conf 添加到 /etc/modprobe.d/ 。
该文件的内容为:
install module_name /sbin/modprobe -i -f module_name
当请求安装 module_name 时,告诉模块加载代码运行 /sbin/modprobe -i -f module_name。将 module_name.ko 添加到 /lib/modules/$(uname -r)/kernel/drivers/net/
您可以将自定义内核模块文件放入 /lib/modules/$(uname -r)/kernel/drivers/ xxx/.sudo depmod -a
彻底探测和检查内核中的所有模块。重启
lsmod | grep module_name
您可以找到已加载的自定义内核模块。