Linux内核驱动程序Hello

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目标文件依赖hello.o

开始写代码:

/*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文件

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

执行make

 

补充:

1,Makefile的编写:

注意clean:

  make -C $(KERNELDIR) SUBDIRS=$(PWD) clean

这样可以全部清除其他文件,只留下Makefile和my.c,呵呵!

 

 

 

1,Linux 驱动程序开发体验篇HELLO

http://www.cnblogs.com/xmphoenix/archive/2011/10/24/2223148.html

2,linux 系统 ko模块编译

http://blog.csdn.net/elfylin/article/details/5908265

Linux内核驱动程序Hello,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。