Chinaunix首页 | 论坛 | 博客
  • 博客访问: 620021
  • 博文数量: 69
  • 博客积分: 1891
  • 博客等级: 上尉
  • 技术积分: 1359
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-20 23:38
文章分类

全部博文(69)

文章存档

2012年(46)

2011年(23)

分类: LINUX

2012-04-10 23:04:27

1、简单的helloword代码如下所示:

点击(此处)折叠或打开

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

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

  8. static int hello_exit(void){
  9.         printk(KERN_ALERT "Goodbye,cruel world\n");
  10.         return 0;
  11. }

  12. module_init(hello_init);
  13. module_exit(hello_exit);
2、hello_init函数是用来初始化模块的,用module_init(hello_init)来设置,同理module_exit(hello_exit)是退出时做一些清理工作的
3、编译该内核模块
  1) 内核模块里用到的函数以及符号都是来自内核源码的,所以编译的时候需要有一份内核源码,在上下载,解压即可;
  2) 直接编译
    编写Makefile文件

点击(此处)折叠或打开

  1. obj-m :=hello.o
   3)make -C /usr/src/linux/ SUBDIRS=$PWD modules
         这时,当前目录下会生成hello.mod.c  hello.o   modules.order
hello.ko  hello.mod.o  Makefile  Module.symvers,多个文件,其中hello.ko就是生成的内核模块
如果这步出错,请参考http://blog.csdn.net/sabalol/article/details/2076610
   4)将模块加入到内核中
     sudo insmod hello.ko
这时候报错:insmod: error inserting 'hello.ko': -1 Invalid module format
运行dmesg,可以看到这样的一行: hello: disagrees about version of symbol module_layout
使用

点击(此处)折叠或打开

  1. make -C /lib/modules/`uname -r`/build M=`pwd` modules
重新make,再sudo insmod hello.ko,没有报错
    5)查看信息,运行dmesg可以看到这样的一条输出
    [11104.240469] Hello, world
    6)移除hello.ko
     sudo rmmod hello.ko
     再次运行dmesg,可以看到
  [11211.257349] Goodbye,cruel world










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

虾米小2012-04-11 16:45:46

说的很详细,刚入门的的同学可以多多参考一下A~~