systemd:在启动时自动执行modprobe命令


20

我的发行版是Fedora 17 Gnome。每次重新启动/重新启动计算机时,我都需要以root用户身份运行以下命令:

modprobe rt2800usb

我如何使其永久化?


1
嗨,谢谢您的第一个问题。如果您能提到您所指的是哪个Linux发行版,那就太好了:)
Bonsi Scott

1
@BonsiScott发行版也可能也应该添加到问题文本中,但是标签显示为Fedora。
2013年

(还删除了我自己的答案,因为它不是特定于软呢帽的)
Bonsi Scott

@BonsiScott,您的回答可能对其他人很有用……
vonbrand

Answers:


34

在任何发行版上,systemd您都可以通过modules-load.d以下方式自动加载模块:

  • 创建配置文件:

    /etc/modules-load.d/rt2800usb.conf

  • 打开它并进行如下编辑(添加模块名称):

    rt2800usb

  • 下次重新启动模块时,应自动加载


故障排除:

检查systemd服务是否加载了模块:

systemctl status systemd-modules-load.service

输出应如下所示:

systemd-modules-load.service - Load Kernel Modules
  Loaded: loaded (/usr/lib/systemd/system/systemd-modules-load.service; static)
  Active: active (exited) since Wed, 03 Apr 2013 22:50:57 +0000; 46s ago
        Docs: man:systemd-modules-load.service(8)
              man:modules-load.d(5)
 Process: 260 ExecStart=/usr/lib/systemd/systemd-modules-load (code=exited, status=0/SUCCESS)

最后一行包含PID(进程ID)和退出代码。status=0/SUCCESS表示模块已成功插入,并通过以下方式确认:

journalctl -b _PID=260

输出为:

Apr 03 22:50:57 mxhst systemd-modules-load[260]: Inserted module 'rt2800usb'

如果失败,systemctl输出如下所示:

systemd-modules-load.service - Load Kernel Modules
  Loaded: loaded (/usr/lib/systemd/system/systemd-modules-load.service; static)
  Active: failed (Result: exit-code) since Wed, 03 Apr 2013 22:50:59 +0000; 43s ago
        Docs: man:systemd-modules-load.service(8)
              man:modules-load.d(5)
 Process: 260 ExecStart=/usr/lib/systemd/systemd-modules-load (code=exited, status=1/FAILURE)

journalctl -b报告:

Apr 03 22:50:59 mxhst systemd-modules-load[260]: Failed to find module 'fakert2800usb'

当退出代码为0时0/SUCCESS,表示您的模块已成功插入。跑步

lsmod | grep rt2800

应确认:

rt2800usb              26854  0 
rt2x00usb              19757  1 rt2800usb
rt2800lib              64762  1 rt2800usb
rt2x00lib              66520  3 rt2x00usb,rt2800lib,rt2800usb
mac80211              578735  3 rt2x00lib,rt2x00usb,rt2800lib

如果lsmod输出未确认(尽管服务退出代码为0/SUCCESS),则表示某些内容在通过加载后已从模块中删除modules-load.service。一个可能的原因是另一个*.conf文件将该模块列入了黑名单。寻找类似的行:

blacklist rt2800usb

在中/etc/modprobe.d/*.conf/usr/lib/modprobe.d/*.conf或将/run/modprobe.d/*.conf其注释掉/删除。


我已经做到了,但是模块没有在重启时加载。
somethingSomething

是因为root是文件的所有者吗?
somethingSomething

重新启动后,我仍然必须执行modprbe命令。列出是因为我运行了modprobe命令之后才列出它吗?
somethingSomething

5

要在启动时加载模块,请在中创建文件/etc/modules-load.d/;该文件可以有任何名称,但必须以结尾.conf。对于wifi驱动程序,您可以例如创建文件/etc/modules-load.d/rt2800.conf

在文件中,添加一行,并添加要加载的模块名称,如下所示:

rt2800usb

内核模块上的Arch Wiki页面上有更多信息。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.