-
#include <linux/init.h>
-
#include <linux/module.h>
-
MODULE_LICENSE("Dual BSD/GPL");
-
-
static int hello_init(void)
-
{
-
printk(KERN_ALERT "Hello, world\n");
-
return 0;
-
}
-
static void hello_exit(void)
-
{
-
-
printk(KERN_ALERT "Goodbye, cruel world\n");
-
}
-
-
module_init(hello_init);
-
module_exit(hello_exit);
这个模块定义了两个函数, 一个在模块加载到内核时被调用( hello_init )以及一个在模块被去除时被调用( hello_exit ). moudle_init 和 module_exit 这几行使用了特别的内核宏来指出这两个函数的角色. 另一个特别的宏 (MODULE_LICENSE) 是用来告知内核, 该模块带有一个自由的许可证; 没有这样的说明, 在模块加载时内核会抱怨.
-
ifneq ($(KERNELRELEASE),)
-
-
obj-m := hello.o
-
-
else
-
KDIR := /usr/src/linux-3.4.6
-
all:
-
make -C $(KDIR) M=$(PWD) modules
-
clean:
-
rm -f *.ko *.o *.mod.o *.mod.c *.symvers *.order
-
endif
你可以用 insmod 和 rmmod 工具来测试这个模块. 注意只有超级用户可以加载和卸载模块.
阅读(1443) | 评论(0) | 转发(2) |