Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7687942
  • 博文数量: 961
  • 博客积分: 15795
  • 博客等级: 上将
  • 技术积分: 16612
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-07 14:23
文章分类

全部博文(961)

文章存档

2016年(1)

2015年(61)

2014年(41)

2013年(51)

2012年(235)

2011年(391)

2010年(181)

分类: LINUX

2012-07-23 16:05:04


点击(此处)折叠或打开

  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 工具来测试这个模块. 注意只有超级用户可以加载和卸载模块.


 

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