Module.symvers를 생성하는 방법? 최근에 Unpacking kernel-source rpm off-system (OpenSuse)을

최근에 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


답변