zoukankan      html  css  js  c++  java
  • Linux 驱动程序开发体验篇HELLO

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

    开发平台: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驱动你就写完了!要是大家还有什么疑问的话,请留言,嘿嘿!

  • 相关阅读:
    Delphi中三种方法获取Windows任务栏的高度
    Qt中QFtp获取带有中文的文件名称出现乱码的解决方法(比较巧妙,toLatin1压缩掉了QString自动给每个英文字符加上的那些00字节)
    Qt在Linux环境下应用程序字体模糊的解决方法(先改成使用默认字体,然后使用qtconfig配置)
    关于Qt信号与槽机制的传递方向性研究(结论其实是错误的,但是可以看看分析过程)
    RCP:如何把Preferences中的项从一个类别移动到另一个类别 2013-08-23 18:59 by Binhua Liu,
    服务端套接字类CxServerSocket的使用
    ASP.NET MVC原理
    jQuery 2.0.3 源码分析core
    CodeBlocks的下载安装、配置、简单编程
    ASP.NET MVC学习笔记-----Filter2
  • 原文地址:https://www.cnblogs.com/xmphoenix/p/2223148.html
Copyright © 2011-2022 走看看