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

  • 相关阅读:
    Linux基础知识
    oracle用户及表空间基础
    渗透测试之目录扫描-Dirbuster
    oracle自定义函数身份证15位和18位的转换
    linux 网络带宽和延时测试
    LNMP(linux+nginx+mysql+php)服务器环境配置
    使用Medusa美杜莎暴力破解SSH密码
    暴力密码在线破解工具
    在linux下搭建NFS服务器实现文件共享
    Nginx是做什么的
  • 原文地址:https://www.cnblogs.com/xmphoenix/p/2223148.html
Copyright © 2011-2022 走看看