Linux驅動開發除錯 -- 開啟dev_dbg()【轉】
阿新 • • 發佈:2018-12-25
本文轉載自: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>
點選(此處)摺疊或開啟
- #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
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>"
1.2、修改檔案kernel/printk檔案
點選(此處)摺疊或開啟
- #define DEFAULT_MESSAGE_LOGLEVEL 4
- #define MINIMUM_CONSOLE_LOGLEVEL 1
- #define DEFAULT_CONSOLE_LOGLEVEL 8
原來該值為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 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
GSC3280_ADC_DEV_DEBUG巨集定義的除錯語句將被列印。