Kbuild ツリーで、単純な hello.ko プログラムを作成している場合、ビルド ルールで -C /lib/module/ を使用する必要があるのはなぜですか。なぜこれが必要なのですか?単独でビルドできますか?その目的は何ですか?
2 に答える
while building kernel modules why do we need /lib/modules?
上記のオプションを指定することは必須ではありません。つまり/lib/modules
、主な意図はget configured source-code directory
.
直接構成されたソースコードに設定するか、ビルドされたソースコードのソフトリンクを持つ /lib/modules/ などの上に提供することができます。
KDIR,
完全なカーネル ソース ディレクトリ (構成およびコンパイル済み) またはカーネル ヘッダー ディレクトリのみ (最低限必要) を設定できます。2 つのソリューション
1)Full kernel sources
2)Only kernel headers (linux-headers-* packages in
Debian/Ubuntu distributions)
どちらの場合も、ソースまたはヘッダーはconfigured
.Manyである必要がありますmacros or functions depend on the configuration
-C
オプションは を呼び出し、kernel Makefile
を渡しますmodule
directory in the M variable ,the kernel Makefile knows how to compile a module
。
たとえば、カーネルを構成するArm architecture or machine
とconfigured kernel Makefile
、コンパイル方法と、モジュールをビルドする必要があるアーキテクチャが通知されます。
コンパイルされる、カーネル モジュールneeds access to the kernel
headers, containing the defnitions of functions, types and
constants
.
Can it be build solely?
モジュールは、ビルドするカーネルと、モジュールを挿入するときにコンパイルする必要がある構成を知っている必要があるため、単独でビルドすることはできません。これにより、モジュールを挿入するときに、それぞれのシンボルと構成がすべて一致する必要があります。これはすべて、 を介して実行できますtoplevel Makefile of configured kernel
。
モジュールをビルドするには、通常、make ファイルに記述したコマンドに従います。
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
上記の -C は、makefile を読み取る前にディレクトリを変更するために使用されます。したがって、make を実行すると、ディレクトリ /lib/modules/$(shell uname -r)/build に移動します。
Linux では通常、ビルドはカーネル ソースへのソフト リンクであるか、モジュールをビルドする必要があるソースです。
そのソースから、make コマンドはカーネル make ファイルを読み取り、モジュールをビルドします。