나는 최근에 경험했다커널 소스 코드 rpm을 시스템(OpenSuse) 외부에서 압축 해제하시겠습니까?;내 컴퓨터에서 10시간 이상을 보냈는데 거기에 설명된 프로세스를 거친 후 아무데도 없다는 것을 발견하고 놀랐습니다 Module.symvers
!
"모듈.symvers 생성"을 검색하면 다음과 같은 결과가 나타납니다.
참고:
"modules_prepare"는 CONFIG_MODVERSIONS가 설정된 경우에도 Module.symvers를 빌드하지 않습니다. 따라서
모듈 버전 관리가 작동하려면 전체 커널 빌드를 수행해야 합니다.
(Linux 커널 문서::kbuild:module.txt)
...하지만 정말 이해가 안 돼요. 이전 단계에서 커널이 빌드되지 않았나요(위에 제공된 링크에 설명되어 있나요? CC에서 여러 *.o 파일과 LD를 생성하는 데 10시간 이상이 걸렸을 것입니다). 그들과 연결되어 있으므로 무언가가 구축되었을 것입니다. 그렇다면 어디에 있습니까 Module.symvers
?
좀 더 구체적으로, Module.symvers를 생성하려면 정확히 무엇을 호출해야 합니까? 나는 이것이 make prepare
작동하지 않는다는 것을 알고 있습니다. 그러나 작동하는 명령은 무엇입니까?
답변1
Module.symvers
모듈을 (재)컴파일할 때 (재)생성됩니다. 실행 하면 커널 트리 루트에 파일이 생성 make modules
됩니다 .Module.symvers
make
을 실행하지 않고 그냥 실행했다면 make modules
모듈이 빌드되지 않은 것입니다. 커널 자체( vmlinux
또는 아키텍처에 따른 이미지 형식 중 하나)의 기호는 System.map
.
답변2
Derek Molloy의 예제 LKM을 컴파일할 때 얻은 경고를 검색하여 이를 발견한 경우: touch Modules.symvers
커널이 modversion을 사용하지 않고(운영 체제는 모듈이 커널과 일치하는지 확인하기 위해 CRC를 사용함) 간단히 . 다른 모듈에 대한 종속성이 없으면 경고를 억제하기에 충분합니다.
WARNING: Symbol version dump ./Module.symvers
is missing; modules will have no dependencies and modversions.
0x00000000
빈 파일은 modversion이 없는 시스템에서 동일한 CRC 값을 가진 기호만 포함하는 gcc에서 생성된 파일만큼 좋습니다 .
답변3
CentOS 및 기타 RedHat 변형에서는 실행 중인 커널에 해당하는 파일을 추출하세요.
zcat /boot/symvers-$(uname -r).gz > ./Module.symvers
Ubuntu 및 기타 Debian 변형에서는 이 파일이 자동으로 발견됩니다. 그러나 필요한 경우 파일은 다음과 같습니다.
/usr/src/linux-headers-$(uname -r)/Module.symvers