Linux 소스 트리 외부에서 모듈을 컴파일할 때 사용 가능한 빌드 스크립트가 없습니다.

Linux 소스 트리 외부에서 모듈을 컴파일할 때 사용 가능한 빌드 스크립트가 없습니다.

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-VERSIONkernel-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의 답변을 참조하여 작업을 완료하세요.


인용하다

  1. 커널/업그레이드 - Gentoo Wiki

관련 정보