有时,将内核模块分成多个源文件是有意义的。
这是一个这样的内核模块的例子。
示例 2-8. start.c
/* * start.c - Illustration of multi filed modules */ #include <linux/kernel.h> /* We're doing kernel work */ #include <linux/module.h> /* Specifically, a module */ int init_module(void) { printk(KERN_INFO "Hello, world - this is the kernel speaking\n"); return 0; } |
下一个文件
示例 2-9. stop.c
/* * stop.c - Illustration of multi filed modules */ #include <linux/kernel.h> /* We're doing kernel work */ #include <linux/module.h> /* Specifically, a module */ void cleanup_module() { printk(KERN_INFO "Short is the life of a kernel module\n"); } |
最后,是makefile文件
示例 2-10. Makefile
obj-m += hello-1.o obj-m += hello-2.o obj-m += hello-3.o obj-m += hello-4.o obj-m += hello-5.o obj-m += startstop.o startstop-objs := start.o stop.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 |
这是我们目前为止看到的所有示例的完整makefile。前五行没有什么特别之处,但对于最后一个示例,我们需要两行。首先,我们为组合模块创建一个对象名称,其次,我们告诉 make 哪些对象文件是该模块的一部分。