Chinaunix首页 | 论坛 | 博客
  • 博客访问: 650995
  • 博文数量: 1008
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 5175
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-31 09:44
文章分类
文章存档

2012年(1008)

我的朋友

分类:

2012-08-01 10:58:08


点击(此处)折叠或打开

  1. #include <linux/init.h>
  2. #include <linux/module.h>
  3. MODULE_LICENSE("Dual BSD/GPL");

  4. static int hello_init(void)
  5. {
  6.         printk(KERN_ALERT "Hello, world\n");
  7.         return 0;
  8. }
  9. static void hello_exit(void)
  10. {

  11.         printk(KERN_ALERT "Goodbye, cruel world\n");
  12. }

  13. module_init(hello_init);
  14. module_exit(hello_exit);

     这个模块定义了两个函数, 一个在模块加载到内核时被调用( hello_init )以及一个在模块被去除时被调用( hello_exit ). moudle_init module_exit 这几行使用了特别的内核宏来指出这两个函数的角色. 另一个特别的宏 (MODULE_LICENSE) 是用来告知内核, 该模块带有一个自由的许可证; 没有这样的说明, 在模块加载时内核会抱怨.

 

点击(此处)折叠或打开

  1. ifneq ($(KERNELRELEASE),)

  2. obj-m := hello.o

  3. else
  4. KDIR := /usr/src/linux-3.4.6
  5. all:
  6.         make -C $(KDIR) M=$(PWD) modules
  7. clean:
  8.         rm -f *.ko *.o *.mod.o *.mod.c *.symvers *.order
  9. endif

你可以用 insmod rmmod 工具来测试这个模块. 注意只有超级用户可以加载和卸载模块.


 

阅读(121) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~