내 상황:
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
손이 더러워지겠죠...
다 가린 것 같은데...
그런데, 당신의 컴퓨터에 이 모듈이 정말로 필요합니까?