本文转载自:https://blog.csdn.net/kunkliu/article/details/78048618

转载地址:http://blog.chinaunix.net/uid-22841689-id-3924244.html

一、打印调试       
        linux设备驱动调试,我们在内核中看到内核使用dev_dbg来控制输出信息,这个函数的实质是调用
printk(KERN_DEBUG )来输出打印信息。要打开这个开关需要下面两步。

 

1.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/kernel文件中

    点击(此处)折叠或打开

  • #define KERN_EMERG "<0>"
  • #define KERN_ALERT "<1>" 
  • #define KERN_CRIT "<2>" 
  • #define KERN_ERR "<3>" 
  • #define KERN_WARNING "<4>" 
  • #define KERN_NOTICE "<5>" 
  • #define KERN_INFO "<6>" 
  • #define KERN_DEBUG "<7>"
  •         可以看到KERN_DEBUG是级别最低的。
    1.2、修改文件kernel/printk文件

    点击(此处)折叠或打开

  • #define DEFAULT_MESSAGE_LOGLEVEL 4
  • #define MINIMUM_CONSOLE_LOGLEVEL 1
  • #define DEFAULT_CONSOLE_LOGLEVEL 8
  •         其中DEFAULT_CONSOLE_LOGLEVEL 为终端console输出的最低级别,比这严重的都将输出。
    原来该值为7,则调试信息无法输出,修改为8则全部有输出。
    1.3、修改Makefile
            通过配置内核选项,修改Makefile实现显示打印调试信息。Kconfig内容如下:

    点击(此处)折叠或打开

  • config ADC_DEV_DEBUG
  •     bool "adc dev debugging messages"
  •     depends on ADC_INTF_DEV
  •     help
  •      Say Y here if you want the adc dev to produce a bunch of debug
  •      messages to the system log. Select thisif you are having a
  •      problem with adc core and want to see more of what is going on.
  •         Makefile内容如下:

    点击(此处)折叠或打开

  • #
  • # Makefile for the i2c bus drivers.
  • #
  • obj-$(CONFIG_GSC_SPI0_ADC_CORE)        += adc-core.o
  • obj-$(CONFIG_ADC_INTF_DEV)            += adc-dev.o
  • obj-$(CONFIG_ADC_INTF_PROC)            += adc-proc.o
  • obj-$(CONFIG_ADC_INTF_SYSFS)            += adc-sysfs.o
  • obj-$(CONFIG_GSC3280_ADC)            += gsc3280_adc.o
  • ccflags-$(CONFIG_GSC_ADC_DEV_DEBUG)+= -DGSC3280_ADC_DEV_DEBUG
  •         红色部分即是。当内核配置选中后,CONFIG_GSC_ADC_DEV_DEBUG即被定义,编译后,源码中使用
    GSC3280_ADC_DEV_DEBUG宏定义的调试语句将被打印。
     

    相关文章: