新闻详情

新闻详情

首页 / 资讯中心 / 详情

17、显示调试工具:dmesg日志分析、trace_event追踪、drm_info工具、fps测量方法

发布时间:2026/9/7 1:44:33来源:尧图网络
17、显示调试工具:dmesg日志分析、trace_event追踪、drm_info工具、fps测量方法
17.1 dmesg日志分析驱动工程师的第一道防线dmesg说白了就是内核的“日记本”。驱动干了什么、报了什么错全记在里面。怎么用最基础的命令就这几个# 查看所有日志 dmesg # 只看DRM相关的 dmesg | grep drm # 只看MTK显示相关的 dmesg | grep -i mtk_drm # 实时监控像tail -f一样 dmesg -w我个人习惯在调试多屏时会同时开三个终端一个跑dmesg -w一个跑logcat一个留着敲命令。这样任何风吹草动都逃不过我的眼睛。关键日志解读多屏初始化成功时你会看到类似这样的输出[ 5.123456] mtk_drm: primary display initialized, width1080, height1920 [ 5.234567] mtk_drm: external display detected on HDMI [ 5.345678] mtk_drm: external display initialized, width1920, height1080如果出现timeout waiting for vsync或buffer underrun那基本就是时序或带宽问题。我的小技巧dmesg日志默认只保留最近的一圈。如果你要排查开机阶段的显示问题建议在init.rc里加上logcat -b all 或者用dmesg -n 7把级别调到最低。我曾经因为日志被冲刷掉多浪费了半天时间。17.2 trace_event追踪精准定位时序问题dmesg能看到“发生了什么”但看不到“什么时候发生的”。这时候就需要trace_event出马了。启用方法MTK平台下显示相关的trace点一般在/sys/kernel/debug/tracing/events/drm/目录下。# 挂载debugfs mount -t debugfs none /sys/kernel/debug # 查看可用的trace事件 ls /sys/kernel/debug/tracing/events/drm/ # 启用所有drm事件 echo 1 /sys/kernel/debug/tracing/events/drm/enable # 开始追踪 echo 1 /sys/kernel/debug/tracing/tracing_on # 跑你的测试用例... # 停止追踪 echo 0 /sys/kernel/debug/tracing/tracing_on # 查看结果 cat /sys/kernel/debug/tracing/trace你想想看当你要排查“副屏画面比主屏慢了两帧”这种问题时trace_event能精确告诉你每一帧的提交时间、完成时间、vsync时间点。这比靠肉眼盯着屏幕看靠谱多了。注意trace_event会带来一定的性能开销。生产环境不要开调试时用完记得关掉。我曾经在客户现场演示时忘了关trace结果帧率直接掉了一半...场面一度非常尴尬。17.3 drm_info工具显示状态的“体检报告”drm_info是DRM子系统自带的调试工具能帮你把显示链路的状态看得一清二楚。安装与使用在MTK平台上drm_info通常已经编译进系统。如果没有可以从external/drm_info编译。# 查看所有显示设备 drm_info # 查看指定connector的详细信息 drm_info -c 0 # 查看crtc状态 drm_info -p输出解读这是我之前在MTK8678开发板上跑出来的结果Connector 0 (HDMI-A-1) Status: connected Modes: 1920x108060Hz (preferred) 1280x72060Hz 720x48060Hz Encoder 0 (TMDS) CRTC 0 Mode: 1920x108060Hz Active: yes Vblank: enabled Connector 1 (DSI-1) Status: connected Modes: 1080x192060Hz (preferred) Encoder 1 (DSI) CRTC 1 Mode: 1080x192060Hz Active: yes Vblank: enabled看到没主屏是HDMI副屏是DSI两个都activevblank都开了。如果某个屏幕显示不正常先看这里——是不是connector没连上是不是crtc没激活实战经验有一次客户反馈副屏不亮我远程连上去跑了个drm_info发现connector状态是disconnected。再一查原来是HDMI的HPD引脚虚焊了。这种问题没有drm_info你根本不知道是硬件问题还是软件问题。17.4 FPS测量方法用数据说话做显示驱动帧率是硬指标。客户不会听你解释“感觉挺流畅的”他们要的是数字。方法一dumpsys SurfaceFlinger这是最常用的方法不需要root# 查看所有窗口的帧率 adb shell dumpsys SurfaceFlinger --latency # 只看某个特定窗口 adb shell dumpsys SurfaceFlinger --latency SurfaceView方法二使用perfettoMTK平台推荐用perfetto它能同时抓取CPU、GPU、显示三个维度的数据# 启动perfetto追踪 adb shell perfetto -o /data/misc/perfetto-traces/trace.perfetto \ -t 10s \ sched freq idle idle freq gpu_mem gpu_freq \ drm:* # 拉取到PC分析 adb pull /data/misc/perfetto-traces/trace.perfetto方法三自己写fps测量工具嗯这里要注意。有时候你需要精确到每一帧的时间戳这时候我会写一个简单的C程序#include stdio.h #include time.h #include unistd.h int main() { struct timespec ts; long long last_ns 0, current_ns; int frame_count 0; while (1) { clock_gettime(CLOCK_MONOTONIC, ts); current_ns ts.tv_sec * 1000000000LL ts.tv_nsec; if (last_ns ! 0) { long long delta current_ns - last_ns; double fps 1000000000.0 / delta; printf(Frame %d: %.2f FPS (interval: %.3f ms)\n, frame_count, fps, delta / 1000000.0); } last_ns current_ns; usleep(16667); // 模拟60fps的vsync间隔 } return 0; }我的测量心得测量fps时一定要在真实负载下测。空载时跑60fps不代表什么要在播放视频、滑动列表、打开相机这些场景下测。我一般会写一个自动化脚本让手机跑10分钟的各种场景然后取平均值和最低值。最低值才是用户体验的瓶颈。17.5 四件套配合使用一个真实案例最后我跟你分享一个真实案例看看这四个工具怎么配合使用。有一次客户说副屏播放视频时偶尔会卡顿。我是这么排查的先看dmesg发现mtk_drm: buffer underrun on external display的警告说明是buffer问题。再用trace_event追踪buffer的提交和释放时间发现GPU提交buffer的速度跟不上显示消耗的速度。然后用drm_info确认副屏的刷新率是60Hz但实际vblank间隔不稳定有时会跳到70Hz。最后测fps用perfetto抓了10秒数据发现副屏fps在45-60之间波动主屏稳定60fps。最终定位到问题副屏的clock源配置有误导致vblank时序不稳定。修改clock配置后问题解决。你看这四个工具就像医生的听诊器、CT机、血压计和心电图。单独用哪个都能发现问题但配合起来才能精准定位。下次遇到显示问题别急着改代码。先跑一遍这四件套让数据告诉你问题在哪。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

虚拟偶像翻唱MV制作全流程:从音频分离到多平台发布 2026/9/7 2:29:39

虚拟偶像翻唱MV制作全流程:从音频分离到多平台发布

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Three.js GLSLNodeFunction 解析:GLSL 着色器节点函数的解析与代码重组原理 2026/9/7 2:29:39

Three.js GLSLNodeFunction 解析:GLSL 着色器节点函数的解析与代码重组原理

Three.js GLSLNodeFunction 解析:GLSL 着色器节点函数的解析与代码重组原理 【免费下载链接】three.js JavaScript 3D Library. 项目地址: https://gitcode.com/GitHub_Trending/th/three.js 本文深入讲解 three.js 节点系统(TSL / Node Material…

阅读更多 →
Cap:免费开源录屏工具,停止录制的瞬间链接就在眼前 2026/9/7 2:29:39

Cap:免费开源录屏工具,停止录制的瞬间链接就在眼前

Cap:免费开源录屏工具,停止录制的瞬间链接就在眼前 【免费下载链接】Cap Open source Loom alternative. Beautiful, shareable screen recordings. 项目地址: https://gitcode.com/GitHub_Trending/cap1/Cap 要演示一次 bug 复现,约半…

阅读更多 →
rustc 错误 E0264 完全解读:`unknown external lang item` 的成因、复现与修复方案 2026/9/7 2:29:39

rustc 错误 E0264 完全解读:`unknown external lang item` 的成因、复现与修复方案

rustc 错误 E0264 完全解读:unknown external lang item 的成因、复现与修复方案 【免费下载链接】rust Empowering everyone to build reliable and efficient software. 项目地址: https://gitcode.com/GitHub_Trending/ru/rust E0264 是 rustc 在使用 #[l…

阅读更多 →
SpringCloud+Layui+AI大模型:智能政务老年卡办理微服务系统实践 2026/9/7 2:29:39

SpringCloud+Layui+AI大模型:智能政务老年卡办理微服务系统实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
计算机仿真设计报告全攻略:选题建模到PDF排版避坑指南 2026/9/7 2:26:39

计算机仿真设计报告全攻略:选题建模到PDF排版避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞