커널 모듈 my-module.ko가 주어지면 부팅 시 모듈을 자동 로드하기 위해 다음 단계를 수행했습니다.
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
어떤 변형을 시도해도 오류는 항상 동일합니다.
● 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.
구체적으로"모듈을 찾을 수 없습니다실행할 수 modprobe my-module
있고 모듈이 잘 발견되어 로드됩니다. systemd 및 libkmod의 소스를 무시했으며 기본 모듈 디렉터리는 /lib/modules/$(uname -r)
예상대로 작동했습니다. 또한, 그 이름은 다양한 파일 modules.dep
등과 비교되므로 modules.alias
서비스가 기술적으로 이를 찾을 수 있어야 합니다.
작동시키려면 또 무엇을 시도해야 합니까? 나는 거의 동일한 작업을 수행하기 위해 직접 작성하는 것보다 systemd-modules-load 서비스를 사용하는 것을 선호합니다.
시스템 사양: ARMv7, Debian, Linux Kernel v4.9.37, Systemd v241-7~deb10u2 참고: depmod는 busybox의 simlink입니다.
답변1
modules.dep.bin
libkmod의 내부를 면밀히 조사한 결과 .lib 파일이 아닌 참조 소스 파일로 사용되는 것을 발견했습니다 modules.dep
.
ls -al /sbin | grep depmod
생산depmod -> /bin/busybox
몇 가지 사항을 변경하세요.
rm /sbin/depmod
apt install kmod
ln -s /usr/bin/kmod /sbin/depmod
depmod
이제 모든 것이 잘 진행되고 있습니다! depmod의 busybox 버전이 파일을 올바르게 업데이트하지 못하는 것으로 밝혀졌습니다 module.dep.bin
. 이것이 바로 systemd의 이유입니다."모듈을 찾을 수 없습니다".