热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

dmesg為我們多用,mandmesg告知dmesg用來顯示和管理kernelringbuffer,那麼後者為何物,以及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的使用方法&#xff1a;

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

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

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

在Android系統中&#xff0c;printk輸出的日誌信息保存在/proc/kmsg中&#xff0c;使用查看命令&#xff1a;

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

或者&#xff1a;

USER-NAME&#64;MACHINE-NAME:~/Android$ adb shell

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

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

2.dmesg

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

小記錄下&#xff0c;希望能幫到需要的人&#xff1a;

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

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

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



推荐阅读
  • 深入解析Android 4.4中的Fence机制及其应用
    在Android 4.4中,Fence机制是处理缓冲区交换和同步问题的关键技术。该机制广泛应用于生产者-消费者模式中,确保了不同组件之间高效、安全的数据传输。通过深入解析Fence机制的工作原理和应用场景,本文探讨了其在系统性能优化和资源管理中的重要作用。 ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 本文对比了杜甫《喜晴》的两种英文翻译版本:a. Pleased with Sunny Weather 和 b. Rejoicing in Clearing Weather。a 版由 alexcwlin 翻译并经 Adam Lam 编辑,b 版则由哈佛大学的宇文所安教授 (Prof. Stephen Owen) 翻译。 ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • 普通树(每个节点可以有任意数量的子节点)级序遍历 ... [详细]
  • C#实现文件的压缩与解压
    2019独角兽企业重金招聘Python工程师标准一、准备工作1、下载ICSharpCode.SharpZipLib.dll文件2、项目中引用这个dll二、文件压缩与解压共用类 ... [详细]
  • 2022年2月 微信小程序 app.json 配置详解:启用调试模式
    本文将详细介绍如何在微信小程序的 app.json 文件中启用调试模式(debug),并通过实际案例展示其配置方法和应用场景。 ... [详细]
  • 机器学习算法:SVM(支持向量机)
    SVM算法(SupportVectorMachine,支持向量机)的核心思想有2点:1、如果数据线性可分,那么基于最大间隔的方式来确定超平面,以确保全局最优, ... [详细]
  • 深入解析 Lifecycle 的实现原理
    本文将详细介绍 Android Jetpack 中 Lifecycle 组件的实现原理,帮助开发者更好地理解和使用 Lifecycle,避免常见的内存泄漏问题。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • 本报告对2018年湘潭大学程序设计竞赛在牛客网上的时间数据进行了详细分析。通过统计参赛者在各个时间段的活跃情况,揭示了比赛期间的编程频率和时间分布特点。此外,报告还探讨了选手在准备过程中面临的挑战,如保持编程手感、学习逆向工程和PWN技术,以及熟悉Linux环境等。这些发现为未来的竞赛组织和培训提供了 valuable 的参考。 ... [详细]
  • 如何将Python与Excel高效结合:常用操作技巧解析
    本文深入探讨了如何将Python与Excel高效结合,涵盖了一系列实用的操作技巧。文章内容详尽,步骤清晰,注重细节处理,旨在帮助读者掌握Python与Excel之间的无缝对接方法,提升数据处理效率。 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
author-avatar
也曾悲摧过_192
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有