内核模块加载后如何运行服务

内核模块加载后如何运行服务

过去几个小时我一直在为此绞尽脑汁。我的一台机器上的intel-rapl-msr驱动程序有问题,重新加载它可以解决问题。我以为我可以简单地创建一个在启动时执行此操作的服务。但是我无法在驱动程序加载后加载该服务。

[Unit]
Description=Reload intel-rapl-msr
Requires=systemd-modules-load.target
WantedBy=multi-user.target

ExecStart=/nix/store/wqjkhyyffqdbx767vlqklzi12ln8j3pv-unit-script-cpu-script-start/bin/cpu-script-start

脚本中ExecStart仅包含以下内容:

rmmod intel_rapl_msr
modprobe intel_rapl_msr

这样,服务在启动时就会失败并显示以下消息:

mmod: ERROR: Module intel_rapl_msr is not currently loaded

那么,加载此内核模块后,是否可以强制运行服务?

任何帮助都将不胜感激!

答案1

我解决了服务的模块依赖问题,开始用 systemd-modules-load.service 加载这些模块

实践中:将模块添加到:/etc/modules-load.d/modules.conf

https://www.freedesktop.org/software/systemd/man/modules-load.d.html#

答案2

所以现在我只是用lsmod它进行轮询,但它有点脏:

while ! lsmod | grep -q intel_rapl_msr;
do
  echo "intel_rapl_msr not loaded yet... sleeping for 5 seconds"
  sleep 5
done
echo "found intel_rapl_msr"
rmmod intel_rapl_msr
modprobe intel_rapl_msr

相关内容