linux核心中的 "printk"看似簡單其實不然,但是我們在平時開發,完成功能階段也沒有必要了解的特别細緻,如果想更深入的學習,我轉載的另一片博文:http://blog.csdn.net/linux_rookie/article/details/71908317
一、printk列印級别:
print顧名思義列印資訊,承擔的對外顯示以及核心調試功能,熟悉應用的開發的朋友對“printf”太有感情了。一直充當Debug大法中的那個又笨又有用的角色。有的人用了很多年卻也僅僅是用來列印簡單的資訊,其實printf也是一個博大精深的函數,有精力的朋友可以自行查閱,今後有精力一定整理一片博文出來。今天我們的主角是Linux核心printk。
我們可以以核心源碼為線索這裡給出索引:
在Kernel.h (include\linux) 中可以發現
#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>"
- 有的時候我們也會在核心中看到沒有填寫列印機别的printk那麼這時核心會選用DEFAULT_MESSAGE_LOGLEVEL,這個定義位于kernel/printk.c:
- 二、怎麼用
- 我們最初使用printk的時候第一個目的就是輸出列印資訊,以此來幫助我們調試。當你還想挖掘其它功能時你已經是牛人了,此貼對你無用。
- 通過上面的内容我們知道預設的列印級别是“4”那麼這個列印級别是在哪裡輸出呢?
- 我們先來看Linux系統中的一個檔案:
- ①控制台日志級别:優先級高于該值的消息将被列印至控制台。②預設的消息日志級别:将用該值來列印沒有優先級的消息。③最低的控制台日志級别:控制台日志級别可能被設定的最小值。④預設的控制台:控制台日志級别的預設值。
- 目前我們關心的是一個:
- 隻有級别比他高的資訊才能在控制台上列印出來,既 0-3級别的資訊。
- 我們再看看一般arm開發闆上的設定:
-
也就是說幾乎所有的資訊又要打出來,因為不同的裝置有不同的用途,對于開發裝置來說能更多的列印資訊才能更好調試。[[email protected]/]# cat /proc/sys/kernel/printk 7 4 1 7
- 另外想要看到所有的列印資訊,還有一個指令:dmesg
- 由于dmesg顯示的資訊太多請自行嘗試。