linux-2.6になってMakefileがかなり改良されたみたい.いろいろ試してみる.
まず,linux-2.6用カーネルモジュール(ドライバ)の build に必要なファイルは,だいたい以下の通り.
/usr/src/linux/Makefile /usr/src/linux/arch/i386/Makefile /usr/src/linux/scripts/ /usr/src/linux/include/ /usr/src/linux/.config
たとえば,dummy.c から driver.ko を生成する場合だと,まず次のような Makefile を用意して
EXTRA_CFLAGS += -Wall obj-m += driver.o driver-objs := dummy.o
dummy.c をさくっと書く.
#include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> MODULE_AUTHOR("hoge FUGA <foo@example.com>"); MODULE_DESCRIPTION("dummy Driver"); MODULE_LICENSE("GPL"); static int __init dummy_init(void) { printk(KERN_DEBUG "dummy: init\n"); return 0; } static void __exit dummy_cleanup (void) { printk(KERN_DEBUG "dummy: cleanup\n"); } module_init(dummy_init); module_exit(dummy_cleanup);
あとは,build するだけ.
$ make -C /lib/modules/`uname -r`/build M=`pwd` modules
ついでに,make clean は次のようにする.
$ make -C /lib/modules/`uname -r`/build M=`pwd` clean
すげー便利.
また以下のようなオプションも提供される.
make V=0|1 [targets] 0 => quiet build (default), 1 => verbose build make O=dir [targets] Locate all output files in "dir", including .config make C=1 [targets] Check all c source with checker tool
デバッグ中は V=1 は必須.
$ make -C /lib/modules/`uname -r`/build M=`pwd` clean
詳細は make help でみることができる.