systemd: автоматизировать команду modprobe во время загрузки


20

Мой дистрибутив Fedora 17 Gnome. Каждый раз, когда я перезагружаю / перезагружаю компьютер, мне нужно запустить эту команду от имени пользователя root:

modprobe rt2800usb

Как я могу сделать это постоянным?


1
Привет, спасибо за первый вопрос. Было бы неплохо, если бы вы упомянули, на какой дистрибутив Linux вы ссылаетесь :)
Bonsi Scott

1
@BonsiScott Распределение, вероятно, следует добавить и к тексту вопроса, но тег говорит о Fedora.
depquid

(Кроме того, я удалил свой собственный ответ, потому что он не относится к федорам)
Бонси Скотт,

@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.