ソースファイルの分割
ドライバを複数人で開発する場合など、ソースファイルを分割して開発したい場合もあります。
その場合は、Makefileで複数のソースファイルを指定します。
以下、ソースファイル分割のサンプルです。
main.c
#include <linux/module.h> #include <linux/init.h> MODULE_LICENSE("Dual BSD/GPL"); extern void sub(void); static int hello_init(void) { printk(KERN_ALERT "driver loaded\n"); sub(); return 0; } static void hello_exit(void) { printk(KERN_ALERT "driver unloaded\n"); } module_init(hello_init); module_exit(hello_exit);
sub.c
#include <linux/module.h> #include <linux/init.h> void sub(void) { printk("%s: sub() called\n", __func__); }
Makefile
CFILES = main.c sub.c obj-m += hello.o hello-objs := $(CFILES:.c=.o) all: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules clean: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
上記サンプルをビルドすると、main.cとsub.cのソースファイルから「hello.ko」が作成されます。
# ls main.c Makefile sub.c # make make -C /lib/modules/2.6.18-238.el5/build M=/root/Desktop/ksample/01 modules make[1]: Entering directory `/usr/src/kernels/2.6.18-238.el5-i686' CC [M] /root/Desktop/ksample/01/main.o CC [M] /root/Desktop/ksample/01/sub.o LD [M] /root/Desktop/ksample/01/hello.o Building modules, stage 2. MODPOST CC /root/Desktop/ksample/01/hello.mod.o LD [M] /root/Desktop/ksample/01/hello.ko make[1]: Leaving directory `/usr/src/kernels/2.6.18-238.el5-i686' # ls hello.ko hello.o main.o Module.markers hello.mod.c main.c Makefile Module.symvers sub.o hello.mod.o sub.c