드라이버 설치: 모듈: x86/모듈: 잘못된 재배치 대상 건너뛰기

드라이버 설치: 모듈: x86/모듈: 잘못된 재배치 대상 건너뛰기

내 상황:

Fedora를 실행하는 사전 구축된 커널을 설치하고 실행했습니다. 이제 can-dev 드라이버 모듈에 의존하는 mcp251x 및 mcp25xfd 드라이버 모듈을 설치하려고 하므로 해당 모듈도 설치해야 합니다. 분명히 이 모듈의 소스 코드는 해당 버전의 커널 소스에 존재하지만 내 추측으로는 커널 컴파일 중에 .config 파일을 통해 "활성화"되지 않은 것 같습니다. 따라서 이것은 사후 드라이버 모듈 설치 시도입니다.

저는 이런걸 해본적이 없어서 더 쉬운 방법이 있으면 지도 부탁드립니다.

내가 시도한 것:

먼저 /lib/modules 디렉토리로 이동하여 3개의 모듈이 이미 존재하고 설치 가능한지 확인합니다. 그 중 하나를 찾았습니다: can-dev.ko.xz

그래서 설치합니다:

$ sudo insmod can-dev.ko.xz

그게 다입니다. 오류 메시지가 없습니다. 다른 2개 모듈의 경우 소스 코드와 makefile이 표시되지만 "make"를 호출하면 "대상 없음"이라는 메시지만 표시되고 빌드에 실패합니다.

그런 다음 uname -a를 사용하여 버전을 확인했습니다.

Linux fedora 5.11.3-300.fc34.x86_64

그래서 5.11.3의 소스 코드를 다운로드하러갔습니다.https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/refs/tags

현재 컴파일러 버전을 확인합니다.

$ gcc --version
$ gcc (GCC) 11.0.0 20210210 (Red Hat 11.0.0-0) 

커널을 빌드하는 데 사용된 gcc 버전과 동일한지 확인했습니다.

$ cat /proc/version
$ gcc (GCC) 11.0.0 20210210 (Red Hat 11.0.0-0)

그래서 분명히 드라이버 폴더에 가서 makefile이 있더라도 "make"를 호출할 수는 없습니다. 드라이버 makefile과 커널 makefile은 모두 서로 얽혀 있으므로 커널 소스 루트로 이동하여 Makefile을 수정합니다.

EXTRAVERSION = -300.fc34.x86_64

이렇게 하면 모듈의 "vermagic" 문자열이 현재 설치된 운영 체제 버전과 호환됩니다.

그런 다음 커널 소스 루트 디렉터리에서 다음을 호출합니다.

$ make oldconfig

그러면 .config 파일이 생성됩니다. .config 파일을 수동으로 편집하여 다음 줄을 추가했습니다.

CONFIG_CAN_MCP251X=m
CONFIG_CAN_MCP251XFD=m

이는 커널에 MCP251x 및 MCP251xfd를 모듈로 빌드하도록 지시합니다(기본값은 전혀 빌드하지 않는 것입니다).

그럼 내가 전화해

$ make prepare

그런 다음 빌드하려는 특정 드라이버 디렉토리(C 코드와 Makefile이 포함되어 있음)로 CD를 이동하고 다음을 호출합니다.

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

현재 디렉토리에 커널 모듈만 빌드됨을 나타내는 일부 특수 매개변수를 사용하여 kernel-source-root Makefile을 호출합니다. 이것은 작동하고 mcp251xfd.ko 및 mcp251x.ko 파일을 생성합니다.

다음 모듈을 설치하려고 합니다.

$ sudo insmod mcp251x.ko
$ sudo insmod mcp251xfd.ko

그러나 둘 다 다음 오류 메시지를 반환합니다.

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

그리고 전화해

$ dmesg

반품:

module: x86/modules: Skipping invalid relocation target, existing value is nonzero for type 1, loc 00000000abe7d4fb, val ffffffffc10b3a77

내가 확인해야 할 유일한 것은 매직 넘버가 uname -r number와 일치하는지 여부입니다.

$ uname -r
5.11.3-300.fc34.x86_64

모듈을 확인하십시오.

$ modinfo mcp251xfd.ko
vermagic: 5.11.3-300.fc34.x86_64

그래서 무엇을 해야 할지, 이 드라이버를 설치하려고 하는지 모르겠습니다.

답변1

이 커널은 linux-5.11.3배포판에서 제공하는 커널과 다르기 5.11.3-300.fc34때문에 -300.fc34큰 차이가 있습니다. RH 업데이트가 추가되었습니다.

Fedora 34로 보이는 커널 소스를 다운로드하려면 yum을 사용하세요.

디렉토리를 변경한 /usr/src/<source dir>다음 make oldconfig && make menuconfig또는 make oldconfig && make xconfig찾기를 실행 Networking Support->CAN bus subsystem support->CAN device drivers->CAN SPI Interfaces하면 나열된 장치를 찾아 선택합니다.

이 작업이 완료되면 실행할 수 make modules modules_install && depmod -a있으며 커널 모듈은 /lib/modules.

그러나 커널 모듈 서명이 제대로 되어 있으면 여전히 로드되지 않을 수 있습니다.

그렇다면 한 가지 옵션은 커널을 완전히 다시 빌드하고 설치하는 것입니다.

또 다른 방법은 다음 커널 업데이트에서 이러한 모듈을 활성화하도록 RH에 요청하는 것입니다.

또는 자체 CA 인증서와 코드 서명 인증서를 생성하고 새 모듈에 서명한 후 상위 인증서를 UEFI DB에 로드할 수 있습니다.

UEFI가 다음과 같이 구성되지 않았는지 확인할 수 있습니다.secure boot

손이 더러워지겠죠...

다 가린 것 같은데...

그런데, 당신의 컴퓨터에 이 모듈이 정말로 필요합니까?

관련 정보