天天看點

linux下的兩種層次的控制台及列印級别

在嵌入式調試過程中檢視各種log是十分重要的,而序列槽控制終端能夠顯示核心log,但是通過網絡或adb shell連接配接的控制台隻能顯示使用者空間的log,這兩種控制台有什麼差別呢?今天來區分一下kernel層log與應用層log,及列印級别。

linux控制台分為兩種:

一種是kernel級别的控制台,一般為uboot啟動時通過cmdline傳遞給kernel的,這個kernel級别控制台能夠列印啟動log,在運作過程中顯示printk的列印資訊。

另一種為user級别的控制台,就是我們使用的各種shell,在運作過程中顯示printf的列印資訊。

這兩種控制台實作原理上是不同的,kernel層的控制台是直接對driver裝置的輸出和簡單處理;而user層的控制台都是tty的執行個體,最終通過bash等shell與使用者互動。 

如果希望在使用者級别的控制台上看到實時的kernel層log可以使用cat /dev/kmsg。這是kernel log的實時資訊流檔案。

列印級别控制:

在使用printk時可以指定其列印級别,如

printk(KERN_EMERG "hello key probe\n");
           

這樣可以通過更改控制台允許的最低列印級别控制kernel層列印資訊量,按需調整十分友善。

所有列印級别如下(編号越小級别越高):

#define KERN_EMERG	KERN_SOH "0"	/* system is unusable */
#def
           

繼續閱讀