systemd-modules-load nie może znaleźć modułów

Sep 01 2020

Biorąc pod uwagę moduł jądra, my-module.ko, podjąłem następujące kroki, aby spróbować automatycznie załadować moduł podczas rozruchu:

cp my-module.ko /lib/modules/$(uname -r)/my-module.ko echo my-module >> /etc/modules-load.d/my-module.conf # alt: echo my-module >> /etc/modules echo my-module.ko: >> /lib/modules/$(uname -r)/modules.dep
# alt: depmod
systemctl restart systemd-modules-load
# alt: reboot the machine

Bez względu na to, jaką odmianę próbuję, błąd jest zawsze ten sam:

● systemd-modules-load.service - Load Kernel Modules
   Loaded: loaded (/lib/systemd/system/systemd-modules-load.service; static; vendor preset: enabled)
   Active: failed (Result: exit-code) since <date>; 9s ago
     Docs: man:systemd-modules-load.service(8)
           man:modules-load.d(5)
  Process: 318 ExecStart=/lib/systemd/systemd-modules-load (code=exited, status=1/FAILURE)
 Main PID: 318 (code=exited, status=1/FAILURE)

Feb 14 03:19:58 localhost systemd[1]: Starting Load Kernel Modules...
Feb 14 03:19:58 localhost systemd-modules-load[318]: Failed to find module 'my-module'
Feb 14 03:19:58 localhost systemd[1]: systemd-modules-load.service: Main process exited, code=exited, status=1/FAILURE
Feb 14 03:19:58 localhost systemd[1]: systemd-modules-load.service: Failed with result 'exit-code'.
Feb 14 03:19:58 localhost systemd[1]: Failed to start Load Kernel Modules.

W szczególności „ Nie udało się znaleźć modułu ”. Mogę uruchomić, modprobe my-modulea moduł został poprawnie wykryty i załadowany. Przejrzałem źródła dla systemd i libkmod, a domyślny katalog modułu jest zgodny z /lib/modules/$(uname -r)oczekiwaniami. Również nazwa jest porównywana z różnych plików modules.dep, modules.aliasitp więc obsługa technicznie powinien być w stanie go znaleźć.

Co jeszcze mogę spróbować, aby to działało? Wolałbym korzystać z usługi systemd-modules-load zamiast pisać własną usługę, która robi praktycznie to samo.

Specyfikacje systemu: ARMv7, Debian, Linux Kernel v4.9.37, Systemd v241-7 ~ deb10u2; Uwaga: depmod to łącze simlink do busybox

Odpowiedzi

TekuConcept Sep 02 2020 at 23:13

Po bliższej inspekcji z poziomu libkmod odkryłem, że modules.dep.binbył używany jako plik źródłowy odniesienia, zgodnie z załącznikiem modules.dep.

ls -al /sbin | grep depmod wydany depmod -> /bin/busybox

Zmienianie rzeczy:

rm /sbin/depmod
apt install kmod
ln -s /usr/bin/kmod /sbin/depmod
depmod

Teraz wszystko pięknie działa! Okazuje się, że depmod w wersji busybox nie aktualizował poprawnie module.dep.binpliku - stąd dlaczego systemd „ Nie udało się znaleźć modułu ”.