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コマンドが実行されたときに生成された出力は元のソースを汚染しないビルドツリーの最上位ディレクトリに配置されます。リンクの問題をビルドするには(root):

ln -sf /usr/src/linux-_some-kernel-version_ /usr/src/linux && cd /usr/src/linux

完了したら、Gilesの回答を参照して作業を完了してください。


引用する

  1. カーネル/アップグレード - Gentoo Wiki

関連情報