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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux 内核dmesg,linux內核調試kmsg,dmesg

發布時間:2024/4/13 linux 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 内核dmesg,linux內核調試kmsg,dmesg 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

dmesg為我們多用,man dmesg告知dmesg用來顯示和管理kernel ring buffer,那麼後者為何物,以及dmesg顯示何類信息,是本文待闡述的內容。

documentation/trace/ring-buffer-design.txt包含了詳細的設計方案(看來documentation下的內容應是後續查找tutor的首選), 其中細節不是目前所需,但看起來卻是是設計無鎖(lockless)日誌系統的絕佳參考資料。

ring buffer(rb)和kernel ring buffer(krb)是不同的東西,前者泛指一類buffer設計方案,後者特指Linux內核使用的ring buffer。

rb有兩種模式:

1、producer/consumer模式:如果生產的太多,沒有來得及消費,「倉庫」佔滿了,那麼就暫停生產--這種模式可能會丟失最近的事件記錄。

2、overwrite模式:生產者填滿「倉庫」的時候,它仍然繼續生產,並覆蓋最舊的事件記錄--這種模式可能會丟失最舊的事件記錄。

kernel日誌(如printk的數據)視情況發往不同的地方:

- 如果klogd和syslogd都在運行,kernel messages被寫到/var/log/messages的末尾(或者syslogd配置給定的地方),此時和級別無關,所有級別日誌信息都寫入。

- 如果klogd沒有運行,消息不會發往用戶空間(不會寫messages文件?),除非顯式讀取/proc/kmsg(一般通過kmsg)。

讀取krb的首選方案是dmesg,dmesg其實是通過系統調用syslog去讀取的。

1./proc/kmsg

在程序開發過程中,LOG是廣泛使用的用來記錄程序執行過程的機制,它既可以用於程序調試,也可以用於產品運營中的事件記錄。在Android系統中,提供了簡單、便利的LOG機制,開發人員可以方便地使用。在這一篇文章中,我們簡單介紹在Android驅動LOG的使用和查看方法。

Android內核是基於Linux?Kerne?2.36的,因此,Linux?Kernel的LOG機制同樣適合於Android內核,它就是有名的printk,與C語言的printf齊名。與printf類似,printk提供格式化輸入功能,同時,它也具有所有LOG機制的特點--提供日誌級別過慮功能。

printk()有一個控制日誌級別的字段,如果該字段的日記級別高於console默認的日誌級別那麼才會打印出來(數值越小日誌級別越高,分為從 0-7共計8個日誌級別)。

printk提供了8種日誌級別():

#define?KERN_EMERG??"<0>"

#define?KERN_ALERT??"<1>"

#define?KERN_CRIT???"<2>"

#deinfe?KERN_ERR????"<3>"

#deinfe?KERN_WARNING????"<4>"

#deinfe?KERN_NOTICE?"<5>"

#deinfe?KERN_INFO???"<6>"

#deinfe?KERN_DEBUG??"<7>"

printk的使用方法:

printk(KERN_ALERT"This?is?the?log?printed?by?printk?in?linux?kernel?space.");

KERN_ALERT表示日誌級別,後面緊跟著要格式化字符串。

有一種簡單的改變當前終端的日誌級別的方法:#echo 8 > /proc/sys/kernel/printk。理論上這樣printk就能輸出到終端了。

在Android系統中,printk輸出的日誌信息保存在/proc/kmsg中,使用查看命令:

adb?shell?cat?/proc/kmsg??|?grep?"alarm"?//grep?"alarm"表示只抓取alarm的信息

或者:

USER-NAME@MACHINE-NAME:~/Android$?adb?shell

root@android :/?#?cat??/proc/kmsg?|?grep?"alarm"?//grep?"alarm"表示只抓取alarm的信息

直接查看/proc/kmsg時讀取了緩衝區中的數據後,將緩衝區中的數據刪除

2.dmesg

今天想要調試android系統,串口debug沒接出來,最後想嘗試一直打印dmesg的方法,修改循環緩衝區的大小,打完dmesg後自動清空。

小記錄下,希望能幫到需要的人:

dmesg 在不刷新緩衝區的情況下獲得緩衝區的內容,並將內容返回給stdout。

dmesg -c 打印dmesg後清空循環緩衝區

dmesg -s 64 設置dmesg循環緩衝區大小為64

總結

以上是生活随笔為你收集整理的linux 内核dmesg,linux內核調試kmsg,dmesg的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。