systemd: автоматизувати команду modprobe під час завантаження


20

Мій дистрибутив - Fedora 17 Gnome. Кожен раз, коли я перезавантажую / перезавантажую комп'ютер, мені потрібно запустити цю команду як root:

modprobe rt2800usb

Як я можу зробити його постійним?


1
Привіт, дякую за перше запитання. Було б добре, якщо ви могли б згадати, про який дистрибутив Linux ви маєте на увазі :)
Bonsi Scott

1
@BonsiScott Розподіл, ймовірно, також слід додати до тексту запитання, але тег говорить Fedora.
деквід

(Також видалили власну відповідь, оскільки вона не є специфічною для Fedora)
Бонсі Скотт

@BonsiScott, ваша відповідь цілком може бути корисною для інших ...
vonbrand

Відповіді:


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(ідентифікатор процесу) та вихідний код. 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/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і коментувати його / видалити його.


Я це зробив, але модуль не завантажувався при перезавантаженні.
щось щось

Це тому, що root є власником файлу?
щось щось

Коли я перезавантажуюсь, мені все одно потрібно виконати команду modprbe. Хіба це не в списку, тому що список є після того, як я запустив команду modprobe?
щось щось

5

Щоб завантажити модуль під час завантаження, ви створюєте файл у /etc/modules-load.d/; цей файл може мати будь-яке ім’я, але повинен закінчуватися .conf. У випадку з вашим драйвером Wi-Fi ви можете, наприклад, створити файл /etc/modules-load.d/rt2800.conf.

У файл додайте один рядок з назвою модуля, який ви хочете завантажити так:

rt2800usb

На сторінці Arch Wiki про модулі ядра є додаткова інформація.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.