当前位置: 首页 > news >正文

linux驱动调试方法整理

一般我喜欢把linux驱动的调试按矛盾分为几大类:1.驱动工程师和内核/自己的 2.应用工程师和驱动工程师的。其中我们需要掌握linux众多的调试控件才能灵活运用。

驱动工程师和内核/自己的

1.驱动加载和驱动调试信息

使用printk(per_log)打印需求

使用动态打印,即需要手动开启的打印模式,减少运行使用资源。(需要手动输入需要打印的内容 -p 至 /sys/kernel/debug/dynamic_debug/control文件)

2.CPU相关的问题

这类问题排查方法及其重要

首先使用top查看 用户cpu使用概率 平均使用负载 软中断使用率。

如果用户cpu使用概率升高,可以通过pidstat查看用户/系统cpu使用率排查特定线程

如果平均负载高的话可以使用vmstat查看不可中断以及运行进程,如果是不可中断,就要查看io的分析,如果是运行状态可以使用toppidstat查看分别是哪些进程

如果是软件中断,需要使用/proc/softirqs文件找出各种类型,perf的event也可找出软中断函数,如果定位在网络可以使用专用工具。

做性能优化可以用到perf的stat命令

3.IO问题

和cpu一样排查方法很总要

首先使用iostat或者iotop(各个线程io吞吐量)查看IO设备的性能瓶颈,然后根据pidstat定位瓶颈出现的原因,找出拼劲线程,通过分析线程的瓶颈(分析应用程序和驱动之间的调用,以及一些列方法)排查出来

有时候也可以cat一下文件

4.软中断问题

使用dstat查看软中断中的一些吞吐量、中断之类的数据,如果数据有一场可以分别查看硬中断和软中断:cat /proc/interrupts(差中断和频率)查看中断亲和性cat /proc/irq/中断号/smp_affinity 查看软中断:cat /proc/softirqs

找到了发生源可以使用相关指令查看软件中断的频率和执行时间等等如下:

/sys/kernel/debug/tracing/events/irq/softirq_entry /sys/kernel/debug/tracing/events/irq/softirq_exit

5.线程问题

对于线程问题的排查一般都是通过监视的方法(strace ltrace ftrace ptrace)

其中ptrace和ftrace是系统调用,ltrace和strace建立在ptrace上的。

ptrace可以获取制定进程的制定调试指令下的寄存器值和地址空间

ltrace可以跟踪应用程序对共享库的调用

ftrace可以跟踪内核中的函数的调用过程,一般使用ftrace-cmd多一点

strace可以跟踪用户程序和内核函数的调用过程

6.内存问题

oops打印也可看出

内存问题可以分为应用层问题、内核、内存优化的问题

应用

使用例如:Valgrind(泄露之类的问题)

内核
调试方案

dump_stack(调试)

WARN_ON(驱动使用) --- 警告 ---- 定位谁调度

BUG_ON(驱动使用) --- 严重缺陷 ----- 定位缺陷 ---- 可以进行判断

panic(驱动使用)----- 没有判断条件

Page Cache问题

查看/proc/vmstat 和 /sys/kernel/debug/tracing/trace_pipe

内存优化

内存泄露(Androd Profiler 和 MAT)

bitmap(统一图片库 统一监控)

设备分级(设备分级 缓存 进程 安装包)

7.其他工具

blktrace vmstat sar .proc/meminfo df slabtop biosoop biotop uptime(cpu负载) Cgroup

调节cpu工作频率

/sys/devices/system/cpu/cpufreq/policy0下节点

(调度策略:Performance Powersave Userspace SchedInteractiveConservative

  • cpuinfo_max_freq

  • cpuinfo_min_freq

  • scaling_available_governors :支持策略集合

  • scaling_governor:当前的策略(需要你后期来配置)

应用工程师和驱动工程师的

1.排查:用户调用了,但是驱动没调用的效果

使用strace ./指定应用程序

http://www.cnnetsun.cn/news/1810885.html

相关文章:

  • 技术视角:Behdad字体 - 波斯语开源字体的现代化设计与工程实践
  • 国家中小学智慧教育平台电子课本解析工具:快速获取教材资源的完整方案
  • OpenClaw 横向评测|对比 AutoGPT、CoPaw、NanoClaw 等主流 AI Agent,谁更适合你?
  • CVPR 2023论文CDDFuse实战:用Python复现多模态图像融合的双分支特征分解模型
  • x64汇编之从程序编辑到系统调用
  • MySQL优化全攻略:索引、SQL与分库分表的最佳实践纠
  • Concept HDL高效网络名批量互换:基于脚本的Pin Swap自动化实现
  • Windows系统下Mamba-SSM避坑指南:从WSL配置到编译成功
  • 3分钟上手PVZ Toolkit:解锁植物大战僵尸无限潜能的专业修改器
  • 终极虚拟游戏控制器驱动:让你收藏的手柄重获新生
  • 图像梯度检测实战:Sobel、Scharr与Laplacian算子的性能对比与应用场景
  • LangGraph实战指南:从核心概念到复杂工作流构建
  • 别再让后端背锅了!前端独立搞定文件上传:华为云OBS + Vue/Element-UI保姆级配置
  • 别再手动传日志了!用Flume+Spark Streaming搭建实时数据管道(保姆级避坑指南)
  • 小马智行发布PonyWorld世界模型2.0,如何改变市场?
  • VMware Cloud Foundation 9.0 自动化实验室部署教程
  • 解锁游戏控制新维度:ViGEmBus虚拟手柄驱动深度解析
  • C# ASP.NET学生信息管理系统源代码,基于SQL Server实现学生管理、课程管理、成...
  • CHARLS认知数据修正实战:如何用教育程度调整不同波次测试分数(附Stata代码)
  • 缠论可视化插件:5分钟快速掌握通达信智能分析工具
  • Windows大数据开发环境搭建完整指南:使用winutils解决Hadoop兼容性问题
  • 如何用tiny11builder快速打造轻量级Windows 11系统:终极精简指南
  • 【2026 AI原生研发技术雷达图】:基于全球412家科技企业实测数据,定位你团队的技术坐标与升级路径
  • Unity 3D新手必看:5分钟掌握Scene窗口视角调整与Main Camera同步技巧
  • Phi-3-mini-4k-instruct-gguf入门指南:中文标点智能补全、引号嵌套处理与段落空行控制
  • 2026 云南 GEO 优化服务商深度测评:5 家实力对比
  • 海外项目实战:用uniapp搞定谷歌登录,绕过网络限制的纯前端方案(附完整代码)
  • ANOVA事后检验怎么选?Tukey-Kramer/Bonferroni/Scheffé全对比指南
  • 从电子琴到智能家居:无源蜂鸣器如何玩出花样?附ESP32播放《超级玛丽》主题曲代码
  • KMS_VL_ALL_AIO:如何在3分钟内智能激活Windows与Office?