有关 Linux 下内核模块的开发方式的记录 .

1、本文全文为半香仙笛(Woody.c)原创

2、如果需要转载本文,请注明出处:http://blog.csdn.net/mcg890414/archive/2010/09/10/5874943.aspx

3、如果需要和笔者交流,请邮件至mcg890414@163.com

 

Thinking in Linux C...

 

前几天照着《Linux设备驱动开发详解》上的 代码翘入了计算机一段内核模块代码,但是完全没有编译成功,gcc告诉我,这个不认识,那个也不认识……

 

内核模块代码如下:

  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 ENTER/n");  
  7.         return 0;  
  8. }  
  9. static void hello_exit(void)  
  10. {  
  11.         printk(KERN_ALERT " Hello World EXIT/n");  
  12.         return;  
  13. }  
  14. module_init(hello_init);  
  15. module_exit(hello_exit);  
  16. MODULE_AUTHOR("Woody.c");  
  17. MODULE_DESCRIPTION("A simple Hello world Module");  
  18. MODULE_ALIAS("a simplest module");  
  19. ~                                                                        

 

很郁闷。但是郁闷之余,还是需要找个途径来解决吧。

上网查了资料,网上牛人太多,写的东西虽然很给力,但是大多看不懂,所以决定还是问实验室同学。

 

同学告诉我,需要make,然后拷贝给我一个makefile的模板,很给力。

makefile(2.6内核)源码如下:

  1. # MakeFile 2.6:   
  2. obj-m += hello.o  
  3. # 产生对应的路径变量   
  4. CURRENT_PATH := $(shell pwd)  
  5. # 内核源码当前版本   
  6. LINUX_KERNEL := $(shell uname -r)  
  7. #内核源码绝对路径   
  8. LINUX_KERNEL_PATH := /usr/src/linux-headers-$(LINUX_KERNEL)  
  9. #编译对象   
  10. all:  
  11.         make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules  
  12. #清理工作   
  13. clean:  
  14.         make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) clean  
  15. ~                                                                           

 

很给力。

make之后产生了我要的东西。

然后,insmod ./hello.ko

却告诉我:insmod: error inserting './hello.ko': -1 Operation not permitted

我郁闷了。。。这神马情况?

原来要加sudo,因为这是在往内核插入模块。

OK,成功了,再lsmod能看到hello的模块已经装载成功了

想看看printk的结果?dmesg,看到输出的结果了

嗯,该卸载了。。。

rmmod hello

呀。。。ERROR: Removing 'hello': Operation not permitted
又忘了sudo,这可不是好习惯。。

好了,dmesg看到了,成功卸载模块。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值