函式printk的使用方法和printf相似,用於核心列印訊息。printk根據日誌級別(loglevel)對訊息進行分類。日誌級別用巨集定義,日誌級別巨集展開為乙個字串,在編譯時由預處理器將它和訊息文字拼接成乙個字串,因此printk 函式中日誌級別巨集和格式字串間不能有逗號。
下面是兩個printk的例子,乙個用於列印除錯資訊,另乙個用於列印臨界條件資訊。
printk(kern_debug "here i am: %s:%i/n", _ _file_ _, _ _line_ _);printk(kern_crit "i'm trashed; giving up on %p/n", ptr);
printk的日誌級別定義如下(在linux26/includelinux/kernel.h中):
#definekern_emerg"<0>"#definekern_alert"<1>"
#definekern_crit"<2>"
#definekern_err"<3>"
#definekern_warning"<4>"
#definekern_notice"<5>"
#definekern_info"<6>"
#definekern_debug"<7>"
extern int console_printk;
#define console_loglevel (console_printk[0])
#define default_message_loglevel (console_printk[1])
#define minimum_console_loglevel (console_printk[2])
#define default_console_loglevel (console_printk[3])
日誌級別的範圍是0~7,沒有指定日誌級別的printk語句預設採用的級別是 default_ message_loglevel,其定義列出如下(在linux26/kernel/printk.c中):
#define default_message_loglevel 4
核心可把訊息列印到當前控制台上,可以指定控制台為字元模式的終端或印表機等。預設情況下,「控制台」就是當前的虛擬終端。
為了更好地控制不同級別的資訊顯示在控制台上,核心設定了控制台的日誌級別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選項重新啟動它。
注:#ps -e 檢視所有程序pid,然後kill。
通過讀寫/proc/sys/kernel/printk檔案可讀取和修改控制台的日誌級別。檢視這個檔案的方法如下:
#cat /proc/sys/kernel/printk6 4 1 7
上面顯示的4個資料分別對應控制台日誌級別、預設的訊息日誌級別、最低的控制台日誌級別和預設的控制台日誌級別。
可用下面的命令設定當前日誌級別:
# echo 8 > /proc/sys/kernel/printk來自:
linux核心列印級別
1.printk 是乙個核心的乙個記錄日誌的機制,經常用來記錄資訊或者警告。printk可以指定輸出日誌的優先順序,在include linux kern levels.h中有相應的巨集定義 1 define kern soh 001 ascii start of header 2 define k...
隔離級別問題彙總
隔離級別分類 事務隔離級別 髒讀不可重複讀 幻讀讀未提交是是 是不可重複讀否是 是可重複讀否否 是序列化否否 否什麼是幻讀 事務a 按照一定條件進行資料讀取,期間事務b 插入了相同搜尋條件的新資料,事務a再次按照原先條件進行讀取時,發現了事務b新插入的資料稱為幻讀。如果事務a 按一定條件搜尋,期間事...
linux核心的列印printk的級別
有時除錯核心模組,列印資訊太多了,可以通過修改 proc sys kernel printk檔案內容來控制。預設設定是6 4 1 7 cat proc sys kernel printk 7 4 1 7 該檔案有四個數字值,它們根據日誌記錄訊息的重要性,定義將其傳送到何處。關於不同日誌級別的更多資訊...