日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

dmesg与printk命令

發(fā)布時間:2025/3/15 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dmesg与printk命令 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

用于檢測和控制內(nèi)核環(huán)緩沖。程序用來助用戶了解系統(tǒng)的啟動信息

Linux命令dmesg用來顯示開機信息,kernel會將開機信息存儲在ring buffer中

開機信息保存在/var/log目錄中名稱為dmesg的文件里

dmesg [ -c ] [ -n 級別 ] [ -s 緩沖區(qū)大小 ]
  • 1

-c?
清除環(huán)緩沖內(nèi)的內(nèi)容?

-s 緩沖區(qū)大小?

定義一個大小為”緩沖區(qū)大小”的緩沖區(qū)用于查詢內(nèi)核環(huán)緩沖區(qū)。默認(rèn)大小為 8196(此大小與 2.0.33 和 2.1.103 內(nèi)核的默認(rèn)syslog 緩沖區(qū)大小一致),如果你設(shè)置了一個大于默認(rèn)值的環(huán)緩沖區(qū),那你就可以用這個選項定義一個相當(dāng)?shù)木彌_區(qū)來查看完整的環(huán)緩沖區(qū)內(nèi)容?

-n級別?
設(shè)置級別為記錄控制臺啟動信息的級別。比如,-n 1指的就是將此級別設(shè)為最低級,除了內(nèi)核恐慌信息之外不會向控制臺顯示信息。所有級別的啟動信息還將記錄到/proc/kmsg,文件中,因此,syslogd(8)同樣可以用來對信息的輸出進(jìn)行控制。當(dāng)使用-n選項時,dmesg將不會清除內(nèi)核環(huán)緩沖區(qū)中的內(nèi)容。當(dāng)同時使用以上兩個選項時,只有最后一個選項才會產(chǎn)生效果。

要將linux內(nèi)核的帶級別控制的printk內(nèi)容打印出來,在命令行 輸入 dmesg -n 8 就將所有級別的信息都打印出來

printk() 使用說明

內(nèi)核通過 printk() 輸出的信息具有日志級別,日志級別是通過在 printk() 輸出的字符串前加一個帶尖括號的整數(shù)來控制的,如 printk("<6>Hello, world!/n");。內(nèi)核中共提供了八種不同的日志級別,在 linux/kernel.h 中有相應(yīng)的宏對應(yīng)。

#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 */??
#define KERN_INFO?????? "<6>"??? /* informational */??
#define KERN_DEBUG????? "<7>"??? /* debug-level messages */?
#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 */
#define KERN_INFO?????? "<6>"??? /* informational */
#define KERN_DEBUG????? "<7>"??? /* debug-level messages */


所以 printk() 可以這樣用:printk(KERN_INFO "Hello, world!/n");。

未指定日志級別的 printk() 采用的默認(rèn)級別是 DEFAULT_MESSAGE_LOGLEVEL,這個宏在 kernel/printk.c 中被定義為整數(shù) 4,即對應(yīng)KERN_WARNING。

在 /proc/sys/kernel/printk 會顯示4個數(shù)值(可由 echo 修改),分別表示當(dāng)前控制臺日志級別、未明確指定日志級別的默認(rèn)消息日志級別、最小(最高)允許設(shè)置的控制臺日志級別、引導(dǎo)時默認(rèn)的日志級別。當(dāng) printk() 中的消息日志級別小于當(dāng)前控制臺日志級別時,printk 的信息(要有/n符)就會在控制臺上顯示。但無論當(dāng)前控制臺日志級別是何值,通過 /proc/kmsg (或使用dmesg)總能查看。另外如果配置好并運行了 syslogd 或 klogd,沒有在控制臺上顯示的 printk 的信息也會追加到 /var/log/messages.log 中。

通過讀寫/proc/sys/kernel/printk文件可讀取和修改控制臺的日志級別。查看這個文件的方法如下:

#cat /proc/sys/kernel/printk 6 4 1 7

上面顯示的4個數(shù)據(jù)分別對應(yīng)控制臺日志級別、默認(rèn)的消息日志級別、最低的控制臺日志級別和默認(rèn)的控制臺日志級別。

可用下面的命令設(shè)置當(dāng)前日志級別:

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

另外為了防止 printk() 瞬時被調(diào)用次數(shù)過多,可以通過 printk_ratelimit() 來控制速度。printk_ratelimit() 通過跟蹤發(fā)送到控制臺的消息數(shù)量工作,當(dāng)輸出速度超過一個臨界值,就返回零。可通過修改 /proc/sys/kernel/{printk_ratelimit, printk_ratelimit_burst} 來調(diào)節(jié) printk_ratelimit() 的計算。

printk_ratelimit() 的典型用法如下:
if (printk_ratelimit())
??? printk(KERN_INFO "Hello, world!/n");


參看:

http://blog.csdn.net/zhenwenxian/article/details/4336211

http://blog.csdn.net/zhangxuechao_/article/details/50783298

總結(jié)

以上是生活随笔為你收集整理的dmesg与printk命令的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。