Linux核心的列印除錯printk

2021-10-08 22:18:17 字數 1649 閱讀 2195

printkprintf在用法上的區別在於printk可以通過附加不同的日誌級別(loglevel 訊息優先順序),通過設定日誌的輸出級別來過濾列印在控制台上的訊息。linux核心中將日誌級別分成八個級別,分別為:

kern_emerg

用於緊急事件,一般是系統崩潰之前的提示訊息,核心拓展數字為<0>kern_alert

報警,需要立刻採取動作的情況,核心拓展數字為<1>kern_crit

臨界狀態,通常涉及嚴重的硬體或軟體的操作失敗,核心拓展數字為<2>kern_err

用於報告錯誤狀態,裝置驅動程式會使用此級別報告硬體的錯誤,核心拓展數字為<3>kern_warning

對可能出現的問題進行警告,但這類情況一般不會對系統造成嚴重的影響,核心拓展數字為<4>kern_noticekern_info

提示性資訊,大多數驅動程式在啟動時利用此級別進行硬體資訊的輸出,核心拓展數字為<6>kern_debug

除錯資訊,核心拓展數字為<7>未指定輸出級別的printk輸出,其等級採用核心的預設級別,default_message_loglevel,這個巨集在kernel/printk.c中被指定為乙個整數,在進行核心編譯時可以再menuconfig裁剪核心時,指定預設的輸出等級。其設定路徑為:

其預設等級為<4>,即對應kern_warning級別。

注意,printk的所有資訊都會記錄到系統的日誌檔案中(在開啟守護程序klogd時,核心訊息追加到/var/log/message中),此節主要是說明修改printk的終端顯示的列印等級。

首先檢視目前printk的輸出狀態,例如:

# cat /proc/sys/kernel/printk

# 44

17

四個數字從左到右依次對應:

當前的日誌級別

未明確指定日誌級別時的預設訊息級別(對應上一節)

最小允許的日誌級別

引導時的預設日誌級別

# echo 8

>

/proc/sys/kernel/printk

輸入上述指令改變輸出等級到最低模式,即kern_debug模式,所有等級的訊息均顯示在終端上。

SK BUFF 核心列印除錯

為了更方便的除錯報文,需要對sk buff的真正資料載荷進行除錯輸出,只需要在驅動中加入如下 就可以除錯了 static void qdmalib dump skb struct sk buff skb,struct net device dev netdev printk kern info,de...

linux 核心除錯

debug.hacks 一書中,介紹了如果除錯核心問題,在第五章的 實踐核心除錯 總體來說,有一下的方法來除錯核心 1.用kgdb單步除錯。具體請參見 2.加列印printk來定位。3.根據核心出錯的kernel panic oops資訊,反彙編,定位問題 4.編寫復現程式,或者創造復現條件。5.g...

讓adb logcat列印核心除錯資訊

在預設情況下,adb logcat只能顯示使用程式的除錯資訊,我把logcat.cpp修改了一下,讓它同時可以列印核心除錯資訊 system core logcat logcat.cpp static void readloglines int logfd while 1 else if ret n...