Linux 소스 트리(3.18.0-rc6) 외부에서 기본 모듈을 빌드하려고 합니다. 빌드할 때 스크립트를 찾을 수 없다는 오류가 발생합니다/...
내 디렉토리 설정은 다음과 같습니다
mymodule/
src/
file.c
linux/
.git/
# rest of the source tree
나는 실행 중입니다: make -C ../linux SUBDIRS=$(pwd)/src modules
내 모듈에서.
실제 오류는 다음과 같습니다.
make: Entering directory '/home/me/linux'
Building modules, stage 2.
MODPOST 1 modules
/bin/sh: scripts/mod/modpost: No such file or directory
scripts/Makefile.modpost:90: recipe for target '__modpost' failed
make[1]: *** [__modpost] Error 127
Makefile:1384: recipe for target 'modules' failed
make: *** [modules] Error 2
make: Leaving directory '/home/me/linux'
Make가 linux/에서 스크립트를 찾도록 하는 설정이 있습니까?
답변1
커널 모듈을 빌드하려면 압축을 푼 커널 소스 코드 이상이 필요합니다. 커널 빌드 중에 생성되는 일부 동반 프로그램과 헤더 파일이 필요합니다. makefile이 올바른 위치를 찾고 있지만 modpost
아직 찾지 못했습니다. 배포판은 일반적으로 이름이 지정된 패키지에 넣습니다.linux-headers-VERSION
kernel-headers-VERSION
먼저 커널을 구성해야 합니다. 커널 버전과 커널 구성은 모듈을 실행하려는 커널과 일치해야 합니다. 이 파일을 어딘가에서 가져온 경우 .config
커널 디렉터리에 복사하세요. 그런 다음 추가 모듈을 빌드하는 데 필요한 파일을 빌드하려면 커널 소스 디렉터리에서 다음 명령을 실행합니다.
make modules_prepare
그런 다음 모듈의 소스 디렉토리로 이동하여 실행할 수 있습니다.
make -C ../linux M=$PWD/src
바라보다외부 모듈 구축커널 문서( ) Documentation/kbuild/modules.txt
에서 자세히 알아보세요 .
답변2
사용자 정의 커널을 구축할 때 대부분의 사람들은짓지 마소스 tarball 내의 소스 코드. 소프트 링크 사용을 고려해 보십시오.
보시 /usr/src/linux
다시피 링크는 디렉터리를 가리키 /usr/src/linux-3.12.21-gentoo-r1
므로 make 명령이 실행될 때 생성된 출력은 원래 소스를 오염시키지 않는 빌드 트리의 최상위 디렉터리에 배치됩니다. 링크 문제를 빌드하려면(루트로):
ln -sf /usr/src/linux-_some-kernel-version_ /usr/src/linux && cd /usr/src/linux
완료되면 Giles의 답변을 참조하여 작업을 완료하세요.