최근에 Unpacking kernel-source rpm off-system (OpenSuse)을 겪었 습니까? ; 내 컴퓨터에서> 10 시간이 걸렸을 때 여기에 설명 된 프로세스를 수행 한 후에도 아무 Module.symvers
곳도 찾을 수 없다는 것이 놀랍습니다 !
“generate Module.symvers”를 검색하면 다음과 같은 결과가 나타납니다.
참고 : “modules_prepare”는
CONFIG_MODVERSIONS가 설정되어 있어도 Module.symvers를 빌드하지 않습니다 . 따라서
모듈 버전 관리가 작동하려면 전체 커널 빌드를 실행 해야합니다 .
( 리눅스 커널 문서 :: kbuild : modules.txt )
…하지만 실제로는 얻지 못했습니다-이전 단계에서 커널을 빌드하지 않았습니까 (위의 링크에 설명되어 있습니까? CC가 * .o의 전체 무리를 생성하는 데 10 시간 이상 걸리는 것을 알고 있습니다. 파일과 LD를 연결하여 무언가를 만들었을 것입니다. 그렇다면 어디에 Module.symvers
있습니까?
보다 명시적인 용어로 Module.symvers를 생성하려면 정확히 어떤 명령을 호출해야합니까? 나는 그것이 make prepare
작동하지 않는다는 것을 알고 있지만 그 명령은 무엇입니까?
답변
는 Module.symvers
경우는 (재) 컴파일 모듈 생성 (재)입니다. 를 실행 하면 커널 트리의 루트에 파일 make modules
이 있어야합니다 Module.symvers
.
을 실행 make
하지 않고 make modules
아직 실행 하지 않은 경우 아직 모듈을 빌드하지 않았습니다. 커널 자체의 기호 ( vmlinux
또는 아키텍처 종속 이미지 형식 중 하나)는입니다 System.map
.
답변
Derek Molloy의 샘플 LKM 중 하나를 컴파일 할 때 발생하는 경고를 인터넷 검색하여이 질문을 찾은 사람들을 위해 :을 사용하여 빈 것을 만들 수 있습니다 touch Modules.symvers
. 커널이 modversions (운영 체제에서 모듈이 커널과 일치하도록하기 위해 사용하는 CRC)를 사용하지 않고 모듈에 다른 모듈에 대한 종속성이없는 경우 경고를 억제하기에 충분합니다.
WARNING: Symbol version dump ./Module.symvers
is missing; modules will have no dependencies and modversions.
빈 파일은 gcc에 의해 생성 된 파일과 동일합니다. gcc는 수정이 0x00000000
없는 시스템 에서 기호가 모두 동일한 CRC 값을 갖습니다.
답변
CentOS 및 기타 RedHat 변형에서 실행중인 커널에 해당하는 파일을 추출하십시오.
zcat /boot/symvers-$(uname -r).gz > ./Module.symvers
우분투 및 기타 데비안 변형에서 파일 이음새가 자동으로 발견됩니다. 그러나 필요한 경우 파일은 다음과 같습니다.
/usr/src/linux-headers-$(uname -r)/Module.symvers