自分のLinuxカーネルをコンパイルする場合、Linuxカーネルヘッダーが必要であることはわかっていますが、正確には何がいいのでしょうか。
/usr/src/
数十のCヘッダーファイルがあるようです。しかし、それらの目的は何ですか?それらはカーネルソースに直接含まれていませんか?
ヘッダーファイルは、インターフェイスを定義します。これらは、ソースファイル内の関数の定義方法を指定します。
これらは、ヘッダーファイルに関数のシグネチャ(戻り値とパラメーター)が存在するため、コンパイラーが関数の使用法が正しいかどうかを確認できるようにするために使用されます。このタスクでは、関数の実際の実装は必要ありません。
完全なカーネルソースでも同じことができますが、不要なファイルをたくさんインストールします。
例:関数を使用したい場合
int foo(double param);
プログラムでは、foo
の実装がどのようであるかを知る必要はありません。単一のパラメーター(double
)を受け入れ、整数を返すことだけを知っている必要があります。
すでに述べたように、ヘッダーファイルは関数へのインターフェイスとプログラムで使用される構造を定義します。
カーネルヘッダーファイルの場合、これらの関数と構造はカーネル自体にあります。
完全なカーネルを構築している場合は、ヘッダーだけでなく、完全なソースファイルが必要です。ただし、カーネルにリンクするデバイスドライバーまたはその他のロード可能なモジュールをコンパイルする場合は、ヘッダーファイルのみが必要なので、完全なソースをインストールしないことでスペースを節約できます。
ヘッダーファイルのみをインストールできるようにするためのパッケージの分離は、ディスクが小さかったときにディスク使用量の違いが重要な考慮事項であったため、部分的に歴史的です。最近では、ソース全体をディスク上に(不必要に)持つことは、主要なディスク領域の考慮事項ではありません。
ヘッダーファイルという用語は、Linuxカーネルの記述に使用される[〜#〜] c [〜#〜]プログラミング言語に由来します。
非常に高いレベルから説明すると...
Cでは、使用する前に関数の前方宣言が必要です。言い換えると、関数、そのパラメーター、およびどのようなデータが返されるかについての説明です。すべての前方宣言をheaderと呼ばれる単一のファイルに入れるのが一般的です。他のプログラムのソースコードファイルは、このヘッダーをinclude
し、コンパイルされた結果のプログラム実行可能ファイルのすべての関数にアクセスできます。
Linuxヘッダーファイルはすべて.h
他のプログラムから呼び出すことができるLinuxカーネルが提供する関数を含むファイル。