web-dev-qa-db-ja.com

Linuxソースツリーの外部でモジュールをコンパイルするときに使用できるビルドスクリプトはありません

Linuxソースツリー(3.18.0-rc6)の外部で基本モジュールを構築しようとしています。ビルドすると、スクリプトが見つからないというエラーが表示されます/ ...

私のディレクトリ設定は次のようになります

_mymodule/
  src/
    file.c
linux/
  .git/
  # rest of the source tree
_

私は実行しています:make -C ../linux SUBDIRS=$(pwd)/src modules mymoduleから。

実際のエラーは次のとおりです。

_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 /でスクリプトを探すようにする設定はありますか?

3
David

カーネルモジュールをビルドするには、解凍されたカーネルソース以上のものが必要です。カーネルのビルド中に生成されるいくつかの関連プログラムとヘッダーファイルが必要です。 makefileは適切な場所でmodpostを探していますが、まだありません。ディストリビューションは通常、これをlinux-headers-VERSIONまたはkernel-headers-VERSIONまたは同様のものと呼ばれるパッケージで出荷します。

まず、カーネルを設定する必要があります。カーネルバージョンとカーネル構成は、モジュールを実行するカーネルと一致している必要があります。どこかに.configファイルがある場合は、それをカーネルディレクトリにコピーします。次に、必要なファイルをビルドして追加モジュールをビルドし、カーネルソースディレクトリで次のコマンドを実行します。

make modules_prepare

次に、モジュールのソースディレクトリに移動して実行できます

make -C ../linux M=$PWD/src

詳細については、カーネルドキュメント(Documentation/kbuild/modules.txt)の 外部モジュールの構築 を参照してください。

カスタムカーネルを構築するとき、ほとんどの人はソースtarball内のソースをビルドしないでください。ソフトリンクの使用を検討してください:

User Source Directory Listing

ご覧のとおり、/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
0
eyoung100