systemd-modules-load 找不到模块

systemd-modules-load 找不到模块

给定一个内核模块 my-module.ko,我已采取以下步骤来尝试在启动时自动加载该模块:

cp my-module.ko /lib/modules/$(uname -r)/my-module.ko
echo my-module >> /etc/modules-load.d/my-module.conf
# alt: echo my-module >> /etc/modules
echo my-module.ko: >> /lib/modules/$(uname -r)/modules.dep
# alt: depmod
systemctl restart systemd-modules-load
# alt: reboot the machine

无论我尝试什么变化,错误总是相同的:

● systemd-modules-load.service - Load Kernel Modules
   Loaded: loaded (/lib/systemd/system/systemd-modules-load.service; static; vendor preset: enabled)
   Active: failed (Result: exit-code) since <date>; 9s ago
     Docs: man:systemd-modules-load.service(8)
           man:modules-load.d(5)
  Process: 318 ExecStart=/lib/systemd/systemd-modules-load (code=exited, status=1/FAILURE)
 Main PID: 318 (code=exited, status=1/FAILURE)

Feb 14 03:19:58 localhost systemd[1]: Starting Load Kernel Modules...
Feb 14 03:19:58 localhost systemd-modules-load[318]: Failed to find module 'my-module'
Feb 14 03:19:58 localhost systemd[1]: systemd-modules-load.service: Main process exited, code=exited, status=1/FAILURE
Feb 14 03:19:58 localhost systemd[1]: systemd-modules-load.service: Failed with result 'exit-code'.
Feb 14 03:19:58 localhost systemd[1]: Failed to start Load Kernel Modules.

具体来说 ”找不到模块我可以运行modprobe my-module,并且模块被发现并加载得很好。我忽略了 systemd 和 libkmod 的源代码,默认模块目录/lib/modules/$(uname -r)如预期的那样。此外,名称还会与各种文件modules.depmodules.alias等等进行比较,因此服务从技术上来说应该能够找到它。

我还可以尝试什么才能让它发挥作用?我更喜欢使用 systemd-modules-load 服务,而不是编写自己的服务来完成几乎相同的事情。

系统规格:ARMv7、Debian、Linux Kernel v4.9.37、Systemd v241-7~deb10u2;注意:depmod 是 busybox 的 simlink

答案1

经过对 libkmod 内部的仔细检查,我发现它modules.dep.bin被用作参考源文件,而不是modules.dep.

ls -al /sbin | grep depmod产生了depmod -> /bin/busybox

改变一些事情:

rm /sbin/depmod
apt install kmod
ln -s /usr/bin/kmod /sbin/depmod
depmod

现在一切都很顺利!事实证明,busybox 版本的 depmod 没有正确更新文件module.dep.bin- 这就是为什么 systemd ”找不到模块”。

相关内容