有时,将内核模块分成多个源文件是有意义的。
这是一个这样的内核模块的例子。
示例 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 哪些对象文件是该模块的一部分。