カーネルのコンパイルなしにカーネルモジュールをコンパイルする環境を作る

Linuxカーネル用のモジュールをコンパイルする際には、通常 /lib/modules/`uname -r`/build をカーネルのソースディレクトリとして指定し、それを make コマンドに引数として渡す必要があります. カーネルモジュールは、カーネル側の保持しているシンボルテーブルを知っている必要があるからです. シンボルテーブルは linux-src/Modules.symver に保持されています. また、このファイルの他にも、いくつかカーネルモジュール用に必要なファイルが存在します.

ところが、kernel.orgから直接ソースコードを落としてくる場合、上記のカーネルモジュールのコンパイルに必要なファイルが存在しません. これらはコンパイル時に動的に決定するからです. かといって、毎回ソースからカーネル本体をコンパイルするのも時間がかかってしょうがないです. こういったときには、以下のようなコマンドを使用します:

$ cd kernel-src
$ make modules_prepare

make modules_prepare は、先述の「カーネルモジュールをコンパイルに必要なファイル」のみを吐き出すことができます. このあと、kernel-src へのパスをカーネルモジュール側の Makefile に渡すことで、カーネルコンパイルすることなく、カーネルモジュールをコンパイルすることができます.