Make는 모듈을 컴파일하지 않습니다. 오류: 빌딩 블록, 2단계. MODPOST 0 모듈

Make는 모듈을 컴파일하지 않습니다. 오류: 빌딩 블록, 2단계. MODPOST 0 모듈

나는 바나나 파이를 가지고 있고 커널 3.19.3-bananapi와 함께 데비안을 설치했습니다.http://www.igorpecovnik.com/2014/09/07/banana-pi-debian-sd-image/

그래서 모듈을 컴파일하고 싶어서 kernel.org에서 커널을 다운로드했고, 예를 들어 모듈을 컴파일하려고 하면 커널 트리의 루트에 있고 다음을 실행합니다.sudo make M=drivers/android modules

오류가 발생합니다.

Building modules, stage 2.
  MODPOST 0 modules

V=1을 디버깅할 때의 출력입니다.

user1@bananapi:~/linux-3.19.3$ sudo make M=drivers/android modules V=1
test -e include/generated/autoconf.h -a -e include/config/auto.conf || (       \
        echo >&2;                                                       \
        echo >&2 "  ERROR: Kernel configuration is invalid.";           \
        echo >&2 "         include/generated/autoconf.h or include/config/auto.conf are missing.";\
        echo >&2 "         Run 'make oldconfig && make prepare' on kernel src to fix it.";      \
        echo >&2 ;                                                      \
        /bin/false)
mkdir -p drivers/android/.tmp_versions ; rm -f drivers/android/.tmp_versions/*
make -f ./scripts/Makefile.build obj=drivers/android
(cat /dev/null; ) > drivers/android/modules.order
make -f ./scripts/Makefile.modpost
  find drivers/android/.tmp_versions -name '*.mod' | xargs -r grep -h '\.ko$' | sort -u | sed 's/\.ko$/.o/' | scripts/mod/modpost   -i ./Module.symvers -I drivers/android/Module.symvers  -o drivers/android/Module.symvers -S -w  -s -T -

GREP_OPTIONS='--color=always'를 never 및 auto로 변경하려고 시도했지만 동일한 오류가 발생했습니다.

uname -r의 출력은 3.19.3-bananapi 내 헤더가 설치되었다는 것입니다.

dpkg -l linux*의 출력

user1@bananapi:~/linux-3.19.3$ dpkg -l linux\*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name           Version      Architecture Description
+++-==============-============-============-=================================
ii  linux-dtb-3.19 2.6          armhf        Linux DTB, version 3.19.3-bananap
un  linux-firmware <none>                    (no description available)
un  linux-headers  <none>                    (no description available)
un  linux-headers- <none>                    (no description available)
ii  linux-headers- 2.6          armhf        Linux kernel headers for 3.19.3-b
un  linux-image    <none>                    (no description available)
un  linux-image-2. <none>                    (no description available)
ii  linux-image-3. 2.6          armhf        Linux kernel, version 3.19.3-bana
un  linux-kernel-h <none>                    (no description available)
un  linux-kernel-l <none>                    (no description available)
ii  linux-libc-dev 2.6          armhf        Linux support headers for userspa
un  linux-modules- <none>                    (no description available)
un  linux-sound-ba <none>                    (no description available)
ii  linux-u-boot-3 2.6          all          Uboot loader
un  linux32        <none>                    (no description available)

답변1

외부 모듈인 경우 먼저 커널에 대해 빌드를 시도한 다음 modules_install아래 설명에 따라 설치하십시오. 커널 소스 코드에 대한 경로를 작성하고 있는지 확인하십시오.

~에서https://www.kernel.org/doc/Documentation/kbuild/modules.txt

--- 2.1 명령 구문

외부 모듈을 빌드하는 명령은 다음과 같습니다.

  $ make -C <path_to_kernel_src> M=$PWD

kbuild 시스템은 명령에 제공된 "M=" 옵션으로 인해 외부 모듈이 빌드되고 있음을 알고 있습니다.

실행 중인 커널에 대해 빌드하려면 다음을 사용하십시오.

  $ make -C /lib/modules/`uname -r`/build M=$PWD

그런 다음 방금 빌드한 모듈을 설치하려면 명령에 "modules_install" 대상을 추가하세요.

  $ make -C /lib/modules/`uname -r`/build M=$PWD modules_install

modules_install설명하다:

modules_install
외부 모듈을 설치합니다. 기본 위치는 이지만 /lib/modules/<kernel_release>/extra/INSTALL_MOD_PATH를 사용하여 접두사를 추가할 수 있습니다(섹션 5에서 설명).


기본 커널 디렉토리( 대신 /extra) 아래의 사용자 정의 디렉토리에 모듈을 설치하려는 경우 INSTALL_MOD_DIR.

--- 5.2 설치_MOD_디렉터리

외부 모듈은 기본적으로 /lib/modules/$(KERNELRELEASE)/extra/ 아래의 디렉터리에 설치되지만, 특정 기능에 대한 모듈은 별도의 디렉터리에서 찾을 수 있습니다. 이렇게 하려면 INSTALL_MOD_DIR을 사용하여 "extra"에 대한 대체 이름을 지정하십시오.

  $ make INSTALL_MOD_DIR=gandalf -C $KDIR \
         M=$PWD modules_install       
  => Install dir: /lib/modules/$(KERNELRELEASE)/gandalf/

답변2

/proc/config.gz바나나에 이물질이 있는지 확인해보세요시스템이 실행 중일 때(존재하지 않았다면 존재하지 않았을 것입니다). 아마도 존재할 것입니다. 1 소스 트리의 최상위 수준에 복사한 후 다음을 수행합니다.

make clean
gunzip -c config.gz > .config
make oldconfig

그런 다음 모듈을 다시 빌드해 보세요.


  1. 그렇지 않다면 sudo modprobe configs다시 확인해 보세요. 모듈이 존재하지 않아서 로드하려고 할 때(참고자료 참조 man modprobe) 오류가 발생하면 운이 없는 것입니다.

관련 정보