カーネルバイナリとカーネルモジュールのビルドソースはどこにありますか?

カーネルバイナリとカーネルモジュールのビルドソースはどこにありますか?

Linuxでカーネルモジュール開発環境を設定しようとしています。ホームフォルダにカーネルを構築し、適切なインクルードのためにソースとバイナリを正しい場所に配置したいと思います。

カーネルモジュールのビルドの例は次のとおりです。

#include <linux/init.h>
#include <linux/module.h>

リンカがこれらのヘッダを探す絶対パスは何ですか?

答え1

これが私が通常問題を扱う方法です。私はFedora 19を使用していますが、locateサービスを提供するすべてのディストリビューションで動作します。

$ locate "linux/init.h" | grep include
/usr/src/kernels/3.13.6-100.fc19.x86_64.debug/include/linux/init.h
/usr/src/kernels/3.13.7-100.fc19.x86_64.debug/include/linux/init.h
/usr/src/kernels/3.13.9-100.fc19.x86_64/include/linux/init.h
/usr/src/kernels/3.13.9-100.fc19.x86_64.debug/include/linux/init.h

パスはさまざまですが、キーは含まれlocateているエントリ( "linux / init.h")を見つけて、その結果をキーワードでフィルタリングすることですinclude

RPM(Redhat)またはAPT(Debian / Ubuntu)を使用してこれらの場所を検索するディストリビューション方法もあります。

湾岸協力協議会

ただし、C/C++ ファイルのパスは相対的であることに注意してください。

#include <linux/init.h>

これにより、コンパイラを呼び出すときにgcc使用したいインクルードファイルの場所を上書きできます。これはスイッチを介して制御されます-I <dir>

man gccからの抜粋

   -I dir
        Add the directory dir to the list of directories to be searched for 
        header files.  Directories named by -I are searched before the 
        standard system include directories.  If the directory dir is a
        standard system include directory, the option is ignored to ensure 
        that the default search order for system directories and the special 
        treatment of system headers are not defeated .  If dir
        begins with "=", then the "=" will be replaced by the sysroot 
        prefix; see --sysroot and -isysroot.

外部モジュール

独自のカーネルモジュール開発をLinuxカーネルに付属の「ビルド環境」に統合する方法を説明する記事があります。記事のタイトルは次のとおりです。ドライバ移植:外部モジュールのコンパイル。この記事では、カーネルmakefileの構成も紹介します。file.txtの生成

カーネル初心者のための次の記事もあります。カーネルヘッダファイルkernelnewbies.orgのウェブサイトで検索しました。

メモ:カーネルは、カーネルに付属のドキュメントの一部として、ここで説明されているKBuildシステムを使用します。

引用する

答え2

答えは通常、ディストリビューションによって異なります。これを行う特定のメカニズムがある可能性があるからです。 Debian の場合Debian Linux カーネルマニュアル。 Ubuntuは基本的にDebianなので、これはすべて適用する必要があります。私が正しく理解したら、カーネルのインストールについて尋ねることです。 1つのアプローチ、良いアプローチは、カーネルとカーネルヘッダ用のバイナリパッケージをビルドしてインストールすることです。このマニュアルではその方法を説明します。また、見ることができます「Debian Wheezyカーネルをオフラインにアップグレードする方法は?」への私の答え。この回答には少し整理が必要です。

既存のDebian / Ubuntuカーネルとカーネルヘッダーバイナリパッケージを使用するのは完全に合理的で、コンパイルは不要です。

答え3

カーネルにはdeb-pkg目標があります。 Debian では、生成された両方のパッケージ (in) をmake deb-pkg使用することが私にとって魅力的です。 Ubuntuでも同じように動作すると思います。これは、ビルドおよびインストール時に正しい場所に自動的に表示されます。sudo dpkg -i../

関連情報