1. 程式人生 > >【Linux核心】Ubuntu下printk函式無法在終端顯示

【Linux核心】Ubuntu下printk函式無法在終端顯示

在Ubuntu下使用insmod安裝模組的時候,發現預設的除錯資訊並沒有輸出,但是使用dmesg命令可以看到在日誌中確實有除錯資訊,下面分析一下可能的情況。

printk資訊的輸出去向

這是在核心的命令列引數console=ttyXXX裡指定死了,比如console=tty1表示printk的資訊輸出到終端1。如果是這種情況,你需要使用Ctrl+Alt+(F1-F6)來切換終端。

日誌輸出級別過低

用printk,核心會根據日誌級別,可能把訊息列印到當前控制檯上,這個控制檯通常是一個字元模式的終端、一個串列埠印表機或是一個並口印表機。這些訊息正常輸出的前提是──日誌輸出級別高於console_loglevel(在核心中數字越小優先順序越高)。

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

0 #define KERN_EMERG
1 #define KERN_ALERT
2 #define KERN_CRIT
3 #define KERN_ERR
4 #define KERN_WARNING
5 #define KERN_NOTICE
6 #define KERN_INFO
7 #define KERN_DEBUG

檢視當前控制檯的列印級別

cat /proc/sys/kernel/printk 6 4 1 7

上面顯示的4個數據分別對應控制檯日誌級別

預設的訊息日誌級別最低的控制檯日誌級別預設的控制檯日誌級別

修改printk當前控制檯日誌級別(三個方法):
1. dmesg -n 8
2. echo 8 > /proc/sys/kernel/printk
3. 修改kernel/printk.c,把MINIMUM_CONSOLE_LOGLEVEL定義為7