如果正常配置了輸入輸出終端,則核心啟動過程中會將很多資訊輸出到控制台上。這些資訊中有些表示嚴重錯誤,有些只是一般的提示資訊。
在平台成熟後,繼續保留這些資訊既不美觀,也會影響啟動速度(串列埠的波特率很低)。因此要盡量遮蔽不重要的資訊。這需要對核心進行一些改造。
核心啟動過程中的列印都是通過printk()輸出的,按照重要程度,核心把這些列印分類為8個級別:
**********==== include/linux/printk.h 7
14 ***************====
#define kern_emerg "<0>"
/* system is unusable */
#define kern_alert "<1>"
/* action must be taken immediately */
#define kern_crit "<2>"
/* critical conditions */
#define kern_err "<3>"
/* error conditions */
#define kern_warning "<4>"
/* warning conditions */
#define kern_notice "<5>"
/* normal but significant condition */
#define kern_info "<6>"
/* informational */
#define kern_debug "<7>"
/* debug-level messages */
此外,核心還定義了一些巨集來表示要輸出到控制台上的級別、printk函式的預設級別等,在乙個陣列中描述:
*************** kernel/printk.c 60
74 ********************=
/* printk's without a loglevel use this.. */
#define default_message_loglevel 4 /* kern_warning */
/* we show everything that is more important than this.. */
#define minimum_console_loglevel 1 /* minimum loglevel we let people use */
#define default_console_loglevel 7 /* anything more serious than kern_debug */
declare_wait_queue_head(log_wait);
int console_printk[4] = ;
瀏覽核心**可以看到,基本上啟動過程中的列印都是以預設級別kern_warning及以下級別輸出,因此要控制這些資訊,只需要修改上面幾個巨集即可,尤其是將default_console_loglevel修改為4即可遮蔽大部分資訊。
重新編譯核心後嘗試啟動,可見大部分輸出都被遮蔽了。
改造後大部分的列印資訊消失,但是啟動後一些模組的正常printk也會被遮蔽,這會漏失掉很多重要資訊,為此在啟動完成後要恢復列印,方法是在啟動指令碼中執行一句:
echo 7 4 1 7 > /proc/sys/kernel/printk
就能恢復預設列印級別。
如果啟動過程異常,是不是列印就找不回來呢?當然不是,核心的printk除了向控制台輸出外,還將一些資訊輸出到了/proc/kmsg中,可以在啟動後通過dmsg命令全部找回。
如果需要臨時恢復列印,並不需要重新編譯核心。在啟動引數中配置一項ignore_loglevel即可:
*************** kernel/printk.c 471
479 ***************===
static
int__init ignore_loglevel_setup(char *str)
early_param("ignore_loglevel", ignore_loglevel_setup);
在輸出時會判斷ignore_loglevel變數,如果為真則無論如何都會將資訊輸出到控制台上。 控制Linux核心啟動中的列印
如果正常配置了輸入輸出終端,則核心啟動過程中會將很多資訊輸出到控制台上。這些資訊中有些表示嚴重錯誤,有些只是一般的提示資訊。在平台成熟後,繼續保留這些資訊既不美觀,也會影響啟動速度 串列埠的波特率很低 因此要盡量遮蔽不重要的資訊。這需要對核心進行一些改造。核心啟動過程中的列印都是通過printk 輸...
linux核心列印級別
1.printk 是乙個核心的乙個記錄日誌的機制,經常用來記錄資訊或者警告。printk可以指定輸出日誌的優先順序,在include linux kern levels.h中有相應的巨集定義 1 define kern soh 001 ascii start of header 2 define k...
linux 核心 核心啟動流程
cs是 段暫存器,ip是指令指標暫存器 相當於偏移位址 儲存的是 指令的位址。cs ip共同作用生成了 位址,具體演算法是cs左移4位 ip即是 位址。例如cs 0xf000,ip 0xfff0,則 位址為0xffff0.global globl 命令 global symbol global 使得...