一个简单的内核模块编程实例

714阅读 0评论2011-06-18 foreverdengwei
分类:LINUX

1 先编写一个简单的hello.c文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include < linux/module.h >
#include < linux/init.h >
 
static __init int hello_init(void)
 // __init 这是编译器的修饰符,也就是通知GCC(linux平台下),在这个函数执行之后,
其他的程序就可以去占用这个函数所占用的内存,这样就可以节省内存空间,如果没有
这个修饰符,这段内存直到你在rmmod的时候其他的程序采可以去占用这段内存。
 
{
    printk( "hello world\n" );
    return 0;
}
 
static __exit void hello_exit(void)
{
    printk( "godbye hello\n" );
    return ;
}
 
MODULE_LICENSE( "GPL" );    //内核模块要遵循的协议
MODULE_AUTHOR( "rhel007" );
module_init( hello_init );      //内核模块在插入后要执行的函数
module_exit( hello_exit );  //内核模块在退出前要执行的函数

2 编写makefile

1
2
3
4
5
6
7
8
obj-m := hello.o
 
Kernel_path=/usr/src/kernels/$(shell uname -r)-i686
 
all:
    make -C $(Kernel_path) M=$(PWD) modules
clean:
    make -C $(Kernel_path) M=$(PWD) clean

3 执行命令

1
2
3
4
make              //编译内核模块
insmod hello.ko   //插入内核模块
lsmod | grep hello //查看hello模块是否插入
dmesg              //检查内核信息

4 删除模块

1
2
rmmod hello
dmesg
上一篇:linux下C语言多线程编程实例
下一篇:MapReduce:一个重大的倒退