
sound/usb
실행 중인 커널에 대해 Ubuntu 18.10에서 모듈을 다시 컴파일하려고 합니다 . 컴파일 오류는 발생하지 않지만 모듈을 로드하려고 하면 다음 오류가 발생합니다.
Invalid module format
커널 을 실행 중입니다 4.18.0-21-lowlatency
.
이런 식으로 커널 소스를 얻습니다.
apt source linux
그러면 커널 소스가 폴더 4.18.0
에 다운로드되어 추출됩니다 linux-4.18.0
.
커널 소스 디렉토리의 루트에 .config
및 Module.symvers
파일을 복사합니다 ./lib/modules/4.18.0-21-lowlatency/build
나는 달리고 make EXTRAVERSION=-21-lowlatency modules_prepare
, 그리고 나서make EXTRAVERSION=-21-lowlatency M=sound/usb
실행 insmod
결과에 다음 오류가 기록됩니다.syslog
snd_usb_audio: version magic '4.18.20-21-lowlatency SMP preempt mod_unload ' should be '4.18.0-21-lowlatency SMP preempt mod_unload '
modinfo /lib/modules/
uname -r을 실행하면 /kernel/sound/usb/snd-usb-audio.ko | grep vermagic
다음이 반환됩니다.
vermagic: 4.18.0-21-lowlatency SMP preempt mod_unload
modinfo
새로 컴파일된 모듈을 실행 하면 다음이 반환됩니다.
vermagic: 4.18.20-21-lowlatency SMP preempt mod_unload
나는 문제의 처음 몇 줄을 추적했습니다.Makefile
VERSION = 4
PATCHLEVEL = 18
SUBLEVEL = 20
SUBLEVEL
를 변경한 0
다음 컴파일하면 모듈을 성공적으로 로드할 수 있습니다.
4.18.0
따라서 커널을 실행 중이고 커널 apt source linux
을 다운로드하는 것처럼 보이 더라도 4.18.0
다운로드한 파일의 버전은 4.18.20
.
이것이 정상입니까, 아니면 뭔가 빠졌습니까?
답변1
비슷한 문제가있었습니다. 문제는 커널 소스를 얻는 방법과 커널을 "구축"하는 방법에 있습니다. 공식적인 방법에 대한 링크가 있습니다. 나는 그것을 따랐다.https://help.ubuntu.com/community/Kernel/Compile. 겉보기에는 시대에 뒤떨어져 오래 읽은 것 같습니다.
상황에 따라 공식 출시된 Ubuntu 커널(다른 곳이 아닌)을 사용하고 싶습니다 apt-get source xxxxx
. 데비안 폴더와 타르볼이 들어있는 폴더입니다. 그런 다음 부분 지침을 따릅니다.18.04에서 커널을 빌드하려고 합니다. editconfigs 옵션 없음
커널 소스 다운로드(
deb-src
에서 주석 처리를 제거해야 함/etc/apt/sources.list
)$ apt-get install linux-source kernel-package
커널 소스가 있는 폴더로 이동하여 압축을 푼다
$ cd /usr/src/linux-source-x.x.x $ tar jxvf linux-source-x.x.x.tar.bz2
- 콘텐츠를 현재 폴더로 이동
$ mv linux-source-x.x.x/* . $ rm -rf linux-source-x.x.x/
- 필요한 패키지 받기
$ apt-get build-dep linux-source $ mkdir debian/stamps
그런 다음 실행할 수 fakeroot debian/rules clean
있습니다 fakeroot debian/rules binary-headers binary-generic binary-perarch
. 중간에 하나의 amd GPU 헤더 파일을 누락된 위치에 수동으로 복사해야 합니다. 그렇지 않으면 컴파일이 실패합니다. 이 방법은 fakeroot debian/rules
실행 중인 커널 구성( uname -r
)을 사용하고 있습니다.
및 .config를 사용하면 make menuconfigure
귀하와 동일한 문제가 발생합니다. 따라서 내 샘플을 사용하여 공식 출시된 Ubuntu 커널을 사용하고 fakeroot debian/rules
컴파일할 수 있습니다. 모듈 버전이 일치할 수 있습니다.
내 버전은 Ubuntu 18.04이고 uname -r
5.3.0-51입니다. 나는 apt-get을 사용하여 2020-4-15쯤에 소스를 얻습니다.
make
대신에 사용할 수 있는 다른 방법이 있다고 생각하며 fakeroot debian/rules
, 트리 내 모듈을 구축하는 데 도움이 될 수 있습니다.