ソースファイルの分割
ドライバを複数人で開発する場合など、ソースファイルを分割して開発したい場合もあります。
その場合は、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