Makeはモジュールをコンパイルしません。エラー:ビルディングブロック、ステップ2。 MODPOST 0モジュール

Makeはモジュールをコンパイルしません。エラー:ビルディングブロック、ステップ2。 MODPOST 0モジュール

私はバナナパイを持っていて、カーネル3.19.3-bananapiと一緒にDebianをインストールしました。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)、エラーが発生した場合は運がないことです。

関連情報