systemd: zautomatyzuj polecenie modprobe w czasie uruchamiania

20

Moja dystrybucja to Fedora 17 Gnome. Za każdym razem, gdy ponownie uruchamiam / restartuję komputer, muszę uruchomić tę komendę jako root:

modprobe rt2800usb

Jak mogę to zrobić na stałe?

coś Coś
źródło
1
Cześć, dziękuję za pierwsze pytanie. Byłoby miło, gdybyś mógł wspomnieć, do której dystrybucji linux się odwołujesz :)
Bonsi Scott
1
@BonsiScott Dystrybucja powinna być prawdopodobnie również dodana do tekstu pytania, ale tag mówi Fedora.
depquid
(Również
usunąłem
@BonsiScott, twoja odpowiedź może być przydatna dla innych ...
vonbrand,

Odpowiedzi:

34

Przy każdej dystrybucji systemdmożesz automatycznie załadować moduł poprzez modules-load.d:

  • utwórz plik konfiguracyjny:

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

  • otwórz i edytuj w ten sposób (dodaj nazwę modułu):

    rt2800usb

  • przy następnym uruchomieniu moduł powinien zostać automatycznie załadowany


Rozwiązywanie problemów:

Sprawdź, czy systemdusługa załadowała moduł:

systemctl status systemd-modules-load.service

Dane wyjściowe powinny wyglądać następująco:

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)

Ostatni wiersz zawiera PID(identyfikator procesu) i kod wyjścia. status=0/SUCCESSoznacza, że ​​moduł został pomyślnie wstawiony, potwierdzony przez:

journalctl -b _PID=260

wyjście jest:

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

W przypadku awarii systemctldane wyjściowe wyglądają następująco:

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)

z journalctl -braportowaniem:

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

Gdy kod zakończenia 0/SUCCESSoznacza, że ​​moduł został pomyślnie wstawiony; bieganie

lsmod | grep rt2800

powinien potwierdzić, że:

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

Jeśli lsmoddane wyjściowe nie potwierdzają (pomimo tego, że jest to kod wyjścia usługi 0/SUCCESS), oznacza to, że moduł został usunięty po załadowaniu modules-load.service. Jedną z możliwych przyczyn jest inny *.confplik, który umieścił moduł na czarnej liście. Poszukaj linii takiej jak:

blacklist rt2800usb

w /etc/modprobe.d/*.conf, /usr/lib/modprobe.d/*.conflub /run/modprobe.d/*.confi skomentuj / usuń.

don_crissti
źródło
Zrobiłem to, ale moduł nie załadował się przy ponownym uruchomieniu.
coś Coś
Czy to dlatego, że root jest właścicielem pliku?
somethingSomething
Po ponownym uruchomieniu nadal muszę wykonać polecenie modprbe. Nie ma go na liście, ponieważ lista jest po uruchomieniu komendy modprobe?
coś Coś
5

Aby załadować moduł podczas rozruchu, należy utworzyć plik w /etc/modules-load.d/; ten plik może mieć dowolną nazwę, ale musi kończyć się na .conf. W przypadku sterownika Wi-Fi możesz na przykład utworzyć plik /etc/modules-load.d/rt2800.conf.

W pliku dodaj pojedynczy wiersz z nazwą modułu, który chcesz załadować:

rt2800usb

Strona Arch Wiki na temat modułów jądra zawiera więcej informacji.

jasonwryan
źródło