天天看點

Linux核心 printk知多少

Linux核心 printk知多少

linux核心中的 "printk"看似簡單其實不然,但是我們在平時開發,完成功能階段也沒有必要了解的特别細緻,如果想更深入的學習,我轉載的另一片博文:http://blog.csdn.net/linux_rookie/article/details/71908317

一、printk列印級别:

print顧名思義列印資訊,承擔的對外顯示以及核心調試功能,熟悉應用的開發的朋友對“printf”太有感情了。一直充當Debug大法中的那個又笨又有用的角色。有的人用了很多年卻也僅僅是用來列印簡單的資訊,其實printf也是一個博大精深的函數,有精力的朋友可以自行查閱,今後有精力一定整理一片博文出來。今天我們的主角是Linux核心printk。

我們可以以核心源碼為線索這裡給出索引:

在Kernel.h (include\linux) 中可以發現

Linux核心 printk知多少
Linux核心 printk知多少

#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. 有的時候我們也會在核心中看到沒有填寫列印機别的printk那麼這時核心會選用DEFAULT_MESSAGE_LOGLEVEL,這個定義位于kernel/printk.c:
  2. Linux核心 printk知多少
  3. Linux核心 printk知多少
  4. 二、怎麼用
  5.     我們最初使用printk的時候第一個目的就是輸出列印資訊,以此來幫助我們調試。當你還想挖掘其它功能時你已經是牛人了,此貼對你無用。
  6.    通過上面的内容我們知道預設的列印級别是“4”那麼這個列印級别是在哪裡輸出呢?
  7.    我們先來看Linux系統中的一個檔案:
  8. Linux核心 printk知多少
  9. ①控制台日志級别:優先級高于該值的消息将被列印至控制台。②預設的消息日志級别:将用該值來列印沒有優先級的消息。③最低的控制台日志級别:控制台日志級别可能被設定的最小值。④預設的控制台:控制台日志級别的預設值。
  10. 目前我們關心的是一個:
  11. 隻有級别比他高的資訊才能在控制台上列印出來,既 0-3級别的資訊。
  12. 我們再看看一般arm開發闆上的設定:
  13. [[email protected]/]# cat /proc/sys/kernel/printk
    7       4       1       7
               
    也就是說幾乎所有的資訊又要打出來,因為不同的裝置有不同的用途,對于開發裝置來說能更多的列印資訊才能更好調試。
  14. 另外想要看到所有的列印資訊,還有一個指令:dmesg 
  15. 由于dmesg顯示的資訊太多請自行嘗試。

繼續閱讀