寫Linux 驅動的時候 在初始化和退出的時候加了printk 但是在終端沒有輸出
這個有輸出
這個沒有
原因是要加上一個輸出等級
0~3的等級可以再終端輸出
有一個人寫的很好借來用一下
printk無輸出
Q:
int init_module()
{
printk("Hello\n");
}
編譯成功後,也用insmod命令成功地載入。但並沒有任何輸出..
A:
1.同時在另一個窗口,用命令tail -f /var/log/messages察看日志文件,會看到log
2.用dmesg命令。
它的輸出是在內核log中,不是控制台
-----------------------------------------------------
printk()函數的總結
我們在使用printk()函數中使用日志級別為的是使編程人員在編程過程中自定義地進行信息的輸出,更加容易地掌握系統當前的狀況。
對程序的調試起到了很重要的作用。
(下文中的日志級別和控制台日志控制級別是一個意思)
printk(日志級別 "消息文本");這裡的日志級別通俗的說指的是對文本信息的一種輸出范圍上的指定。
日志級別一共有8個級別,printk的日志級別定義如下(在linux26/includelinux/kernel.h中):
#defineKERN_EMERG"<0>"/*緊急事件消息,系統崩潰之前提示,表示系統不可用*/
#defineKERN_ALERT"<1>"/*報告消息,表示必須立即采取措施*/
#defineKERN_CRIT"<2>"/*臨界條件,通常涉及嚴重的硬件或軟件操作失敗*/
#defineKERN_ERR"<3>"/*錯誤條件,驅動程序常用KERN_ERR來報告硬件的錯誤*/
#defineKERN_WARNING"<4>"/*警告條件,對可能出現問題的情況進行警告*/
#defineKERN_NOTICE"<5>"/*正常但又重要的條件,用於提醒。常用於與安全相關的消息*/
#defineKERN_INFO"<6>"/*提示信息,如驅動程序啟動時,打印硬件信息*/
#defineKERN_DEBUG"<7>"/*調試級別的消息*/
沒有指定日志級別的printk語句默認采用的級別是 DEFAULT_ MESSAGE_LOGLEVEL(這個默認級別一般為<4>,即與KERN_WARNING在一個級別上),其定義在linux26/kernel/printk.c中可以找到。
下面是一個比較簡單的使用
printk(KERN_INFO "INFO\n"); //這裡可以使用數字代替 KERN_INFO,即可以寫成printk(<6> "INFO\n");
在這個格式的定義中,日志級別和信息文本之間不能夠使用逗號隔開,因為系統在進行編譯的時候,將日志級別轉換成字符串於後面的文本信息進行連接。
在對系統輸出進行控制時,主要是討論控制台和偽終端的輸情況,以及系統日志等。