核心printk日誌資訊的級別

2021-06-09 07:33:13 字數 1551 閱讀 3760

日誌級別一共有8個級別,printk的日誌級別定義如下(在include/linux/kernel.h中):  

#define kern_emerg 0/*緊急事件訊息,系統崩潰之前提示,表示系統不可用*/  

#define kern_alert 1/*報告訊息,表示必須立即採取措施*/  

#define kern_crit 2/*臨界條件,通常涉及嚴重的硬體或軟體操作失敗*/  

#define kern_err 3/*錯誤條件,驅動程式常用kern_err來報告硬體的錯誤*/  

#define kern_warning 4/*警告條件,對可能出現問題的情況進行警告*/  

#define kern_notice 5/*正常但又重要的條件,用於提醒*/  

#define kern_info 6/*提示資訊,如驅動程式啟動時,列印硬體資訊*/  

#define kern_debug 7/*除錯級別的訊息*/

沒有指定日誌級別的printk語句預設採用的級別是:default_ message_loglevel(這個預設級別一般為<4>,即與kern_warning在乙個級別上),其定義在kernel/printk.c中可以找到。

核心可把訊息列印到當前控制台上,可以指定控制台為字元模式的終端或印表機等。預設情況下,「控制台」就是當前的虛擬終端。

為了更好地控制不同級別的資訊顯示在控制台上,核心設定了控制台的日誌級別console_loglevel。printk日誌級別的作用是列印一定級別的訊息,與之類似,控制台只顯示一定級別的訊息。

當日誌級別小於console_loglevel時,訊息才能顯示出來。控制台相應的日誌級別定義如下:

#define minimum_console_loglevel  1   

#define default_console_loglevel  7

int console_printk[4] = ;

如果系統執行了klogd和syslogd,則無論console_loglevel為何值,核心訊息都將追加到/var/log/messages中。如果klogd沒有執行,訊息不會傳遞到使用者空間,只能檢視/proc/kmsg。

變數console_loglevel的初始值是default_console_loglevel,可以通過sys_syslog系統呼叫進行修改。呼叫klogd時可以指定-c開關選項來修改這個變數。如果要修改它的當前值,必須先殺掉klogd,再加-c選項重新啟動它。

通過讀寫/proc/sys/kernel/printk檔案可讀取和修改控制台的日誌級別。檢視這個檔案的方法如下:

#cat /proc/sys/kernel/printk

6 4 1 7

上面顯示的4個資料分別對應控制台日誌級別、預設的訊息日誌級別、最低的控制台日誌級別和預設的控制台日誌級別。

可用下面的命令設定當前日誌級別:

# echo 8 > /proc/sys/kernel/printk

這樣所有級別<8,(0-7)的訊息都可以顯示在控制台上.

printk 核心除錯 訊息級別

核心除錯相比於使用者程式除錯難度就要大很多。linux 是 c 語言寫的,但不能使用 printf 來列印,原因很容易解釋,核心中不認識庫 檔案中的 printf 函式。最普通的除錯技術是監視,即在應用程式中的適當地方呼叫 printf 顯示監視資訊,這 是針對普通應用程式而言,對於 linux 核...

調整核心printk的列印級別

有時除錯核心模組,列印資訊太多了,可以通過修改 proc sys kernel printk檔案內容來控制。預設設定是6 4 1 7 cat proc sys kernel printk 7 4 1 7 該檔案有四個數字值,它們根據日誌記錄訊息的重要性,定義將其傳送到何處。關於不同日誌級別的更多資訊...

調整核心printk的列印級別

有時除錯核心模組,列印資訊太多了,可以通過修改 proc sys kernel printk檔案內容來控制。預設設定是7 4 1 7 cat proc sys kernel printk 7 4 1 7 該檔案有四個數字值,它們根據日誌記錄訊息的重要性,定義將其傳送到何處。關於不同日誌級別的更多資訊...