深海的小鱼儿

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

申明:这些文章为原创,要转载的需要取得本人的许可,不然的话会追究相关责任,希望大家理解!(深海的小鱼儿)

开发平台:pc(xp),虚拟机vwmare6.5、Linux操作系统Fedora9

需要知道的知识:

1、printk打印输出的优先级

#define  KERN_EMERG     "<0>"/*紧急事件消息,系统崩溃之前提示,表示系统不可用*/
#define  KERN_ALERT      "<1>"/*报告消息,表示必须立即采取措施*/
#define  KERN_CRIT        "<2>"/*临界条件,通常涉及严重的硬件或软件操作失败*/
#define  KERN_ERR         " <3>"/*错误条件,驱动程序。常用KERN_ERR来报告硬件的错误*/
#define KERN_WARNING   "<4>"/*警告条件,对可能出现问题的情况进行警告*/
#define KERN_NOTICE   "<5>"/*正常但又重要的条件用于提醒常用于与安全相关的消息*/
#define KERN_INFO         "<6>"/*提示信息,如驱动程序启动时,打印硬件信息*/
#define KERN_DEBUG      "<7>"/*调试级别的消息*/

这些事内核打印出的基本消息,但是需要注意的不是那个宏定义都可以在终端上显示、但是可以肯定的一点是,你在调试的时候用到这些宏定义,一定在某些地方有显示,比喻在日志等一些文件下显示。

2、makefile几个关键的语句的解释

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

这句话的意思: -C是改变make的执行目录,$(KERNELDIR)是你本机的kernel的路径地址,

M=$(PWD) modules这个是使makefile在试图生成模块之前,回到模块源码目录,说的在直接点就是把该makefile同目录下的 modules 给到M,执行make指令。

KERNELDIR :=/usr/src/kernels/2.6.25-14.fc9.i686

这个目录地址是你虚拟机的正确地址注意2.6.25-14.fc9.i686这个是对应你的Linux主机的:=/usr/src/kernels下的文件夹的名称

obj-m :=hello.o目标文件依赖hell.o

好了先在开始驱动的旅巡吧:

驱动的.c文件

/*hello_module.c*/
#include<linux/init.h>
#include<linux/kernel.h>
#include<linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
	printk(KERN_EMERG "Hello ,Linux Driver!\n");
	return 0;	
}
static void hello_exit(void)
{
	printk(KERN_EMERG "Hello Diver Exit !\n");	
}
module_init(hello_init);
module_exit(hello_exit);
 

makefile文件

#hello_makefile
obj-m :=hello.o
KERNELDIR :=/usr/src/kernels/2.6.25-14.fc9.i686
PWD :=$(shell pwd)
all:
	make -C $(KERNELDIR) M=$(PWD) modules
	
.PHONY :clean
clean:
	rm -rf *.o *ko

 

注意你的.c文件和你的makefile要放在同一个目录里面

后执行make

2011-10-24-21-22

好了加载hello驱动

2011-10-24-21-23

看到了,出现你编写驱动的打印信息。当然你也可以在你的log里面看看

2011-10-24-21-24

或者用一些简单的命令

2011-10-24-21-25

这样你的简单的Linux下HELLO驱动你就写完了!要是大家还有什么疑问的话,请留言,嘿嘿!

posted on 2011-10-24 21:44  深海的小鱼儿  阅读(3199)  评论(2编辑  收藏  举报