insmod가 모듈을 삽입할 수 없습니다. 모듈 형식이 잘못되었습니다.

insmod가 모듈을 삽입할 수 없습니다. 모듈 형식이 잘못되었습니다.

mcp251xfd용 Linux 커널 드라이버를 빌드하고 설치하려고 합니다. 빌드가 성공한 것 같지만(.ko 파일을 얻음) insmod를 호출하여 설치하면 다음과 같은 결과가 나타납니다.

insmod: ERROR: could not insert module mcp251xfd.ko: Invalid module format

인터넷 검색에서 가장 일반적인 조언은 빌드하려는 정확한 커널 버전에 대해 정확히 동일한 소스 코드를 사용하는 것 같습니다. 따라서 uname -a는 다음을 반환합니다.

Linux fedora 5.11.3-300.fc34.x86_64 #1 SMP Thu Mar 4 19:03:18 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux.

그래서 버전 5.11.3용 커널 소스를 다운로드하고, make oldconfig를 실행하고, 드라이버를 포함하도록 .config 파일을 편집하고, make prepare를 실행한 다음 드라이버 소스 디렉토리로 이동하여 다음을 호출했습니다.

make -C ~/linux-5.11.3 -M=`pwd` modules

이는 mcp251xfd.ko 파일을 생성하므로 성공한 것입니다. insmod 직후에 오류가 나타납니다. dmesg를 호출하면 다음이 반환됩니다.

mcp251xfd: version magic '5.11.3 SMP mod_unload ' should be '5.11.3-300.fc34.x86_64 SMP mod_unload '

그래서 다음에 무엇을 해야할지 모르겠습니다. 5.11.3 올바른 버전인가요?

내 .config 파일에 "CONFIG_BUILD_SALT="5.11.3-300.fc34.x86_64"가 표시되는 것을 확인했습니다. 따라서 내 시스템 버전 번호와 일치하는 것 같습니다. "모듈 만들기" 중에 표시할 추가 명령줄 옵션이 있습니까? "솔트" 버전 번호를 사용합니까?

답변1

해결 방법은 Makefile(Linux 소스 트리의 Makefile)을 열고 다음 줄을 수정하는 것입니다.

EXTRAVERSION = -300.fc34.x86_64

설치된 운영 체제의 uname -r텍스트와 일치합니다 .

관련 정보