systemd-modules-load não pode encontrar módulos

Sep 01 2020

Dado um módulo do kernel, my-module.ko, executei as seguintes etapas para tentar carregar automaticamente o módulo na inicialização:

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

Não importa que variação eu tente, o erro é sempre o mesmo:

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

Especificamente " Falha ao localizar o módulo ." Posso executar modprobe my-modulee o módulo é descoberto e carregado perfeitamente. Eu encostei as fontes de systemd e libkmod, e o diretório de módulo padrão é /lib/modules/$(uname -r)o esperado. Também o nome é comparado com os vários arquivos modules.dep, modules.aliasetc. para que o serviço tecnicamente deve ser capaz de encontrá-lo.

O que mais posso tentar para fazer isso funcionar? Eu preferiria usar o serviço systemd-modules-load ao invés de escrever meu próprio serviço que faz virtualmente a mesma coisa.

Especificações do sistema: ARMv7, Debian, Linux Kernel v4.9.37, Systemd v241-7 ~ deb10u2; Nota: depmod é um simlink para busybox

Respostas

TekuConcept Sep 02 2020 at 23:13

Após uma inspeção mais detalhada de dentro do libkmod, descobri que modules.dep.binestava sendo usado como o arquivo fonte de referência, conforme o proposto modules.dep.

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

Mudando as coisas:

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

Agora tudo está funcionando perfeitamente! Acontece que a versão busybox do depmod não estava atualizando o module.dep.binarquivo corretamente - por isso que o systemd " Falha ao localizar o módulo ."