首页 | 考研 | MBA | 专升本 | 成考 | 自考 | 高考 | 中考 | 出国 | 外语 | 电脑 | 公务员 | 司法 | 财考 | 资格考试 | 论文写作
 
 淘学考试计算机 正文


一个最简单的Linux2.6内核驱动模块
编辑:sunl 时间:2007-11-27 来源:淘学考试网 推荐好友

 

/* hello.c */
#include <linux/module.h> /* Needed by all modules */

#include <linux/config.h> /* Needed for KERN_ALERT */

#include <linux/init.h> /* Needed for the module-macros */

static int __init hello_init(void) // Module entry function specified by module_init()

{

printk(KERN_ALERT "Hello,world!\n");

return 0;

}

static void __exit hello_exit(void) //Module exit function specified by module_exit()

{

printk(KERN_ALERT "Goodbye,cruel world!\n");

}

module_init(hello_init);

module_exit(hello_exit);

MODULE_LICENSE("Dual BSD/GPL"); //should always exist or you’ll get a warning

MODULE_AUTHOR("BENSON"); //optional

MODULE_DESCRIPTION("STUDY_MODULE"); //optional

/* Makefile */

# Makefile 2.6

obj-m += hello.o

KDIR:=/lib/modules/$(shell uname -r)/build

#PWD=$(shell pwd)

all:

make -C $(KDIR) M=$(PWD) modules

clean:

make -C $(KDIR) M=$(PWD) clean

obj-m := hello.o表示编译后生成hello.o模块。
$(KDIR) 指定了内核源码的路径,“M=”表示这是个外部模块,M=$(PWD) 指定了该模块文件所在的路径。

注: makefile预定义了$(PWD)变量,此处可以不必重复定义。

执行#make编译成功后

加载模块

#insmod hello.ko

#lsmod 输出内核已加载模块信息,可以查看到刚刚加载成功的hello模块

……

Module Size Used by

hello 5632 0

可以在日志里查看加载模块时的信息

#vi /var/log/messages

……

Sep 27 13:25:21 localhost kernel: Hello,world!

卸载模块

#rmmod hello.ko

#lsmod 发现hello模块已经被卸载

查看日志信息

#vi /var/log/messages……

…………

Sep 27 13:26:58 localhost kernel: Goodbye,cruel world!

  

 

 

 

 

 

 

 

 

 

 

 相 关 内 容



.

  推荐课程
 
 
 
 
 
 
 最近更新
 综合辅导
 经验技巧
版权信息 - 关于我们 - 联系方式 - 服务承诺 - 客户投诉 - 广告服务 - 网站合作 - 会员服务 - 友情链接 - 站长统计3
1 不良信息
举报中心
文明办网文明上网举报电话:15964542668
举报邮箱:topej@163.com
2 网络110
报警服务
服务热线:15964542668 电子邮件:guoyong@topej.com 服务 QQ:350125289
淘学之家(www.topej.com)旗下网站 ICP注册号:鲁ICP备07016860号