zoukankan      html  css  js  c++  java
  • Linux驱动开发 -- 打开dev_dbg()

     Linux驱动开发 -- 打开dev_dbg() 2012-10-23 19:21:54
    
    分类: LINUX
    
    linux设备驱动调试,我们在内核中看到内核使用dev_dbg来控制输出信息,这个函数的实质是调用printk(KERN_DEBUG )来输出打印信息。要打开这个开关需要下面两步。
    
         1、打开调试开关:你调试的文件中必然包含了<linux/device.h>,或者<linux /paltforam_device.h>,后者包含了前者,在包含此头文件之前,使用#define DEBUG 1 来打开调试开关:例如
    #include <linux/kernel.h>
    #include <linux/init.h>
    #include <linux/clk.h>
    #include <linux/module.h>
    #define DEBUG    1
    #include <linux/platform_device.h>
    
         在linux/device.h文件中:
    #define dev_printk(level, dev, format, arg...)    
        printk(level "%s %s: " format , dev_driver_string(dev) , (dev)->bus_id , ## arg)
    
    #ifdef DEBUG
    #define dev_dbg(dev, format, arg...)        
        dev_printk(KERN_DEBUG , dev , format , ## arg)
    #else
    static inline int __attribute__ ((format (printf, 2, 3)))
    dev_dbg(struct device * dev, const char * fmt, ...)
    {
        return 0;
    }
    #endif
        但是这个打开了之后,也不能顺利的输出信息,原因是printk有默认的信息级别。
        linux/kern_levels.h文件中
    #define KERN_EMERG      KERN_SOH "0"    /* system is unusable */
    #define KERN_ALERT      KERN_SOH "1"    /* action must be taken immediately */
    #define KERN_CRIT       KERN_SOH "2"    /* critical conditions */
    #define KERN_ERR        KERN_SOH "3"    /* error conditions */
    #define KERN_WARNING    KERN_SOH "4"    /* warning conditions */
    #define KERN_NOTICE     KERN_SOH "5"    /* normal but significant condition */
    #define KERN_INFO       KERN_SOH "6"    /* informational */
    #define KERN_DEBUG      KERN_SOH "7"    /* debug-level messages */
    #define KERN_DEFAULT    KERN_SOH "d"    /* the default kernel loglevel */
    可以看到KERN_DEBUG是级别最低的。
    
    
    2、修改文件kernel/printk.h文件
    
    #define console_loglevel (console_printk[0])
    #define default_message_loglevel (console_printk[1])
    #define minimum_console_loglevel (console_printk[2])
    #define default_console_loglevel (console_printk[3])
    其中 default_console_loglevel 为终端console输出的最低级别,比这严重的都将输出。原来该值为7,则调试信息无法输出,修改为0则全部有输出。
  • 相关阅读:
    0806 c#总复习
    0804 递归
    0808 html基础
    0803结构体,枚举类型
    0801out传值
    0731函数
    0730特殊集合
    0728多维数组,ArrayList集合
    js 获取url链接的任意参数
    jq dom操作
  • 原文地址:https://www.cnblogs.com/timssd/p/4468598.html
Copyright © 2011-2022 走看看