make 명령 후에 명령을 호출하고 sudo insmod example1.ko
비밀번호를 입력하면 다음과 같은 오류가 발생합니다
insmod error: could not insert module example1.ko: Invalid module format
. 내 우분투 버전은 5.8.0-44-generic
이고 example1.ko 버전은 입니다 5.8.0-38-generic
. 어쩌면 이 버전이 내 버전과 같아야 할까요? Makefile을 에서 /lib/modules/($ shell uname -r)/build
로 변경하려고 시도했지만 /lib/modules/5.8.0.-38-generic/build
여전히 동일한 오류가 발생합니다. 이 문제를 해결하는 방법을 모르겠습니다.
dmesg
명령을 사용하여 문제에 대한 자세한 정보를 검색한 결과 몇 가지 오류가 발견되었습니다 .
example1: version magic '5.8.0-38-generic SMP mod_unload' should be '5.8.0-44-generic SMP mod_unload'
동일한 문제와 2개의 오류가 있는 행이 6개 더 있습니다 Failed to send host log message
.
내 Makefile은 다음과 같습니다.
obj-m := example1.o
default:
make -C /lib/modules/5.8.0-44-generic/build M=$(PWD) modules
clean
make -C /lib/modules/5.8.0-44-generic/build M=$(PWD) clean
나는 달렸 make clean ; make
지만 아무것도 효과가 없었습니다.
답변1
이 질문에 대한 의견을 통해 여기에 요약할 솔루션이 탄생했습니다.
OP는 Linux 커널 모듈을 빌드하려고 했습니다. 잘못된 버전의 커널 소스(즉, 실행 중인 커널과 다른 커널 소스 버전)에 대해 빌드했습니다. 이는 버퍼의 로그에 표시됩니다 dmesg
.
문제를 해결하려면 모듈을 로드하려는 커널에 해당하는 커널 소스 코드를 가리켜야 합니다. 명령줄에서 이 작업을 명시적으로 수행할 수 있습니다.
$ make -C <path_to_kernel_src> M=$PWD
또는 Makefile
동일한 기능을 가진 것을 만드십시오.
올바른 커널 소스에 대해 빌드를 시도하기 전에 이전 빌드의 기존 아티팩트를 모두 정리해야 합니다.