systemd: automate modprobe command at boot time
My distribution is Fedora 17 Gnome.
Every time I reboot/restart my computer I need to run this command as root:
modprobe rt2800usb
How can I make it permanent?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
On any distro using systemd
you can automatically load the module via modules-load.d
:
-
create the config file:
/etc/modules-load.d/rt2800usb.conf
-
open it and edit like this (add the module name):
rt2800usb
- next time you reboot the module should be automatically loaded
Troubleshooting:
Check if systemd
service loaded the module:
systemctl status systemd-modules-load.service
The output should look like this:
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)
The last line contains the PID
(process id) and the exit code. status=0/SUCCESS
means the module was successfully inserted, confirmed by:
journalctl -b _PID=260
output being:
Apr 03 22:50:57 mxhst systemd-modules-load[260]: Inserted module 'rt2800usb'
In case of failure, systemctl
output looks like this:
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)
with journalctl -b
reporting:
Apr 03 22:50:59 mxhst systemd-modules-load[260]: Failed to find module 'fakert2800usb'
When the exit code is 0/SUCCESS
it means your module has been successfully inserted; running
lsmod | grep rt2800
should confirm that:
rt2800usb 26854 0 rt2x00usb 19757 1 rt2800usb rt2800lib 64762 1 rt2800usb rt2x00lib 66520 3 rt2x00usb,rt2800lib,rt2800usb mac80211 578735 3 rt2x00lib,rt2x00usb,rt2800lib
If
lsmod
output doesn’t confirm (despite the service exit code being 0/SUCCESS
) it means something removed the module after being loaded by modules-load.service
. One possible cause is another *.conf
file that blacklisted the module. Look for a line like:blacklist rt2800usb
in
/etc/modprobe.d/*.conf
, /usr/lib/modprobe.d/*.conf
or /run/modprobe.d/*.conf
and comment it out / delete it.Method 2
To load a module on boot, you create a file in /etc/modules-load.d/
; this file can have any name, but must end in .conf
. In the case of your wifi driver, you could for example create the file /etc/modules-load.d/rt2800.conf
.
In the file, add a single line with the name of the module you want to load like so:
rt2800usb
The Arch Wiki page on Kernel modules has more information.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0