Linux裝置驅動程式 驅動除錯printk

2021-06-18 01:08:06 字數 2335 閱讀 4351

前一段時間學了一下,printk()列印語句,現在用起來又忘了,看了一下前一段時間做的筆記,不是很詳細,所以決定再寫一下和printk相關的除錯的東西。算是複習一下吧。

首先,先熟悉一下printk函式,這個函式和printf函式很類似。只不過乙個執行在使用者態,乙個執行在核心態。此外還是要熟悉一下終端,和控制台等幾個概念

首先需要說的是可以通過以下幾種途徑檢視printk()函式的列印資訊

1、直接在終端中使用dmesg命令來檢視   這個我自己試了一下這個裡面所有級別訊息的都能看見

2、檢視/var/log/messages   這個裡面除了最後乙個級別的其他級別的都能看見,7應該就是控制台級別。

3、檢視/proc/kmsg  這個試了一下,打不開呀,不知道為什麼

1、printk及控制台的日誌級別

printk是在核心中執行的像控制台輸出顯示的函式。核心會先在核心空間中分配一靜態緩衝區,作為顯示用的空間,然後呼叫sprintf,格式換顯示字串,最後呼叫tty_write函式向終端列印資訊。

#define kern_emerg 0/*緊急事件訊息,系統崩潰之前提示,表示系統不可用*/

#define kern_alert 1/*報告訊息,表示必須立即採取措施*/

#define kern_crit 2/*臨界條件,通常涉及嚴重的硬體或軟體操作失敗*/

#define kern_err 3/*錯誤條件,驅動程式常用kern_err來報告硬體的錯誤*/

#define kern_warning 4/*警告條件,對可能出現問題的情況進行警告*/

#define kern_notice 5/*正常但又重要的條件,用於提醒*/

#define kern_info 6/*提示資訊,如驅動程式啟動時,列印硬體資訊*/

#define kern_debug 7/*除錯級別的訊息*/

extern  int   console_printk;

#define  console_loglevel  (consle_printk[0])

#define default_message_loglevel (consle_printk[0])

#define minmum_console_loglevel (consle_printk[1])

#define  default_console_loglevel(consle_printk[2])

在沒有指定日誌級別的情況下:printk語句採用的是級別是default_message_loglevel它的定義如下:

#define  default_message_lgolevel4 /*其實通過這裡可以看的出來,這個級別是和警告條件的級別是一致的*/

為了更好的控制不同級別的資訊顯示在控制台上面,核心設定了控制台的日誌級別consle_loglevel,printk日誌級別的作用是列印一定級別的訊息,與之類似控制台值顯示一定級別的訊息。當日誌的級別小於console_loglevel時,訊息才能顯示出來。控制台日誌的級別定義如下:

#define  minmum_consle_lgolevel1  /*這裡是可以使用的最小日誌的級別*/

#define  default_consle_lgolevel7 /*比這個級別小的訊息都會列印出來 */

int consle[_printk[4]=

default_consle_lgolevel, /*控制台日誌級別*/

default_message_lgolevel , /*沒有定義級別的時候,這個是預設的值*/

minmum_consle_lgolevel ,/*最小的級別,也即是最高的級別*/

default_consle_lgolevel /*預設的控制台級別*/

通過讀寫/proc/sys/kernel/printk檔案可以讀取和修改控制台檔案的級別。方法

# cat  /proc/sys/kernel/printk。

這上面顯示的4個資料分別對應控制台日誌級別、預設的訊息日誌級別、最低的控制台日誌級別、預設的控制台日誌級別\

用下面的命令來設定當前的日誌級別.

#echo 8 > /proc/sys/kernel/printk

實驗表明

(1)是否列印到messages 檔案和console_loglevel 無關,訊息重要性為kern_debug

7時不列印到messages 檔案,否則就列印。

(2)不管訊息重要性是否小於console_loglevel,只要重要性不為kern_emerg,就

不會列印到console,說明在gnome 圖形介面下訊息只會發到messages 檔案,一般是不會

到console 上的。(這個應該是在x-window下面的吧,要不就和上面的矛盾了)

linux裝置驅動程式除錯

一 寫linux裝置驅動程式最難的地方就是沒有強大的除錯工具,一般間接或者直接的除錯手段 1.利用printk 2.檢視oop訊息 3.利用strace 4.利用核心內建的hacking選項 5.利用ioctl方法 6.利用 proc檔案系統 7.使用kgdb 8.使用systemtap 二 1,利...

除錯裝置驅動程式

linux核心沒有整合對偵錯程式的支援。指令級的kdb kernel debudgger 核心偵錯程式 源 級偵錯程式kgdb kernel gnu debugger 核心gnu偵錯程式 udev 工作 1.核心中的sysfs支援,sysfs是linux裝置模型的重要組成部分。位於記憶體中,在啟動時...

linux裝置驅動程式 字元裝置驅動程式

先留個 有一起學習驅動程式的加qq295699450 字元裝置驅動 這篇比較惱火。載入成功,但是讀不出來資料,有知道怎麼回事的,留個言,一起討論下 資料結構 struct scull mem struct scull dev dev 整個驅動程式 如下 include include include...