Chinaunix首页 | 论坛 | 博客
  • 博客访问: 96075
  • 博文数量: 38
  • 博客积分: 950
  • 博客等级: 准尉
  • 技术积分: 235
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-01 10:17
文章分类
文章存档

2011年(38)

我的朋友

分类: LINUX

2011-06-18 19:28:40

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
阅读(666) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~