ソースファイルの分割

ソースファイルの分割

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

タグ