linux debug開關 dev_dbg__linux

來源:互聯網
上載者:User

1、最近在寫I2C下EEPROM的驅動程式,但發現使用i2c_new_probed_device函數無法枚舉到裝置,於是想調試該函數(位於driver/i2c/i2c-core.c內),看到其中有些調試資訊如下:

i2c_new_probed_device(...)
{
    ...
 if (addr_list[i] == I2C_CLIENT_END) {
  dev_dbg(&adap->dev, "Probing failed, no device found\n");
  return NULL;
 }
 ...
}

但載入驅動模組,該類調試資訊並未列印出來(執行dmesg命令後同樣未找到調試資訊)。

2、列出dev_dbg源碼實現:(include/linux/device.h中)

#if defined(DEBUG)
#define dev_dbg(dev, format, arg...)  \
 dev_printk(KERN_DEBUG , dev , format , ## arg)

問題找出,只需在引用標頭檔#include/linux/device.h前定義DEBUG宏即可。
 
在include/linux/i2c.h中修改代碼如下:

#define DEBUG                  /* add for debug eeprom */
#include <linux/device.h> /* for struct device */
#undef DEBUG                  /* add for debug eeprom */

載入驅動驅動模組後,並沒有調試資訊列印出。如下圖:


但執行dmesg命令後Probing failed, no device found已經能夠列印出來,如下圖:

這是為什麼


    但是這個開啟了之後,也不能順利的輸出資訊,原因是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是層級最低的。

2、修改檔案kernel/printk檔案

#define DEFAULT_MESSAGE_LOGLEVEL 4

#define MINIMUM_CONSOLE_LOGLEVEL 1
#define DEFAULT_CONSOLE_LOGLEVEL 8
      其中DEFAULT_CONSOLE_LOGLEVEL 為終端console輸出的最低層級,比這嚴重的都將輸出。原來該值為7,則調試資訊無法輸出,修改為8則全部有輸出。 PS:這樣即可

echo 8 > /proc/sys/kernel/printk 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.