【driver5】调用堆栈函数,printk,动态打印,ftrace,proc,sysfs

2024-05-07 00:20

本文主要是介绍【driver5】调用堆栈函数,printk,动态打印,ftrace,proc,sysfs,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1.内核函数调用堆栈:4个函数
  • 2.printk:cat /proc/cmdline查看console=ttyS0
  • 3.动态打印:printk是全局的且只能设打印等级,动态打印可控制选择模块的打印,在内核配置打开CONFIG_DYNAMIC_DEBUG
  • 4.ftrace:系统层面,功能需要打开,image大小会变大
  • 5.proc文件系统:/proc/cpuinfo,meminfo,net
  • 6.sysfs文件系统:设备树里所有信息在/sys/devices/platform里,class是不同驱动但相同行为事件如input汇总
  • 7.内核调试手段:debugfs.h中api建立目录/sys/kernel/debug
  • 8.性能优化:裸磁盘无法使用,一般都刷文件系统
  • 10.Valgrind内存泄漏排查案例:
  • 11.cpu瓶颈:
  • 12.主频设置
  • 13.驱动稳定性


1.内核函数调用堆栈:4个函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.printk:cat /proc/cmdline查看console=ttyS0

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.动态打印:printk是全局的且只能设打印等级,动态打印可控制选择模块的打印,在内核配置打开CONFIG_DYNAMIC_DEBUG

printk会关中断影响性能,如果在usb的read/write里printk,那么usb就没法直接用了。我想加很多调试信息,但是不想影响linux性能,所以用动态打印,调试时才打开,control节点默认不输出,如下操作才输出,+p是转为printk,相当于下面的define dev_dbg …。
在这里插入图片描述
在这里插入图片描述

4.ftrace:系统层面,功能需要打开,image大小会变大

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如下文件包含可追踪的所有场景。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如下是top命令,用户层us,内核sy,空闲id,硬中断hi,软中断si(如进行网络数据大量收发,si会升高,因为有tx软中断和rx软中断处理才能发数据)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如下案例:mpstat,perf(看函数执行次数),ftrace看函数执行时间。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如下sys_sync是系统调用。
在这里插入图片描述
如下可以打印出时间。
在这里插入图片描述
在这里插入图片描述

5.proc文件系统:/proc/cpuinfo,meminfo,net

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.sysfs文件系统:设备树里所有信息在/sys/devices/platform里,class是不同驱动但相同行为事件如input汇总

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.内核调试手段:debugfs.h中api建立目录/sys/kernel/debug

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.性能优化:裸磁盘无法使用,一般都刷文件系统

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
网络数据收发绕过cpu,用硬中断。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

驱动加上要考虑磁盘io,内存占用,cpu使用情况
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如下网络调试:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10.Valgrind内存泄漏排查案例:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如下malloc加个死循环就是内存泄漏。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
dmesg会显示不全,因为环形buffer会覆盖。在这里插入图片描述

11.cpu瓶颈:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
-p pid
在这里插入图片描述

12.主频设置

在这里插入图片描述
在这里插入图片描述

13.驱动稳定性

希望arg有多大
在这里插入图片描述
likely一般用在if判断里,cpu会把当前指令后面指令预取出来,等到执行时就去执行,效率提高,但是也要判断后面那条指令大概率执不执行,执行的话取出来,不执行则跳过。
在这里插入图片描述

这篇关于【driver5】调用堆栈函数,printk,动态打印,ftrace,proc,sysfs的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/965800

相关文章

Java调用Python脚本实现HelloWorld的示例详解

《Java调用Python脚本实现HelloWorld的示例详解》作为程序员,我们经常会遇到需要在Java项目中调用Python脚本的场景,下面我们来看看如何从基础到进阶,一步步实现Java与Pyth... 目录一、环境准备二、基础调用:使用 Runtime.exec()2.1 实现步骤2.2 代码解析三、

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

MySQL中REPLACE函数与语句举例详解

《MySQL中REPLACE函数与语句举例详解》在MySQL中REPLACE函数是一个用于处理字符串的强大工具,它的主要功能是替换字符串中的某些子字符串,:本文主要介绍MySQL中REPLACE函... 目录一、REPLACE()函数语法:参数说明:功能说明:示例:二、REPLACE INTO语句语法:参数

Python如何调用另一个类的方法和属性

《Python如何调用另一个类的方法和属性》在Python面向对象编程中,类与类之间的交互是非常常见的场景,本文将详细介绍在Python中一个类如何调用另一个类的方法和属性,大家可以根据需要进行选择... 目录一、前言二、基本调用方式通过实例化调用通过类继承调用三、高级调用方式通过组合方式调用通过类方法/静

python中update()函数的用法和一些例子

《python中update()函数的用法和一些例子》update()方法是字典对象的方法,用于将一个字典中的键值对更新到另一个字典中,:本文主要介绍python中update()函数的用法和一些... 目录前言用法注意事项示例示例 1: 使用另一个字典来更新示例 2: 使用可迭代对象来更新示例 3: 使用

C#控制台程序同步调用WebApi实现方式

《C#控制台程序同步调用WebApi实现方式》控制台程序作为Job时,需同步调用WebApi以确保获取返回结果后执行后续操作,否则会引发TaskCanceledException异常,同步处理可避免异... 目录同步调用WebApi方法Cls001类里面的写法总结控制台程序一般当作Job使用,有时候需要控制

Python用Flask封装API及调用详解

《Python用Flask封装API及调用详解》本文介绍Flask的优势(轻量、灵活、易扩展),对比GET/POST表单/JSON请求方式,涵盖错误处理、开发建议及生产环境部署注意事项... 目录一、Flask的优势一、基础设置二、GET请求方式服务端代码客户端调用三、POST表单方式服务端代码客户端调用四

Python lambda函数(匿名函数)、参数类型与递归全解析

《Pythonlambda函数(匿名函数)、参数类型与递归全解析》本文详解Python中lambda匿名函数、灵活参数类型和递归函数三大进阶特性,分别介绍其定义、应用场景及注意事项,助力编写简洁高效... 目录一、lambda 匿名函数:简洁的单行函数1. lambda 的定义与基本用法2. lambda

Python 函数详解:从基础语法到高级使用技巧

《Python函数详解:从基础语法到高级使用技巧》本文基于实例代码,全面讲解Python函数的定义、参数传递、变量作用域及类型标注等知识点,帮助初学者快速掌握函数的使用技巧,感兴趣的朋友跟随小编一起... 目录一、函数的基本概念与作用二、函数的定义与调用1. 无参函数2. 带参函数3. 带返回值的函数4.

MySQL中DATE_FORMAT时间函数的使用小结

《MySQL中DATE_FORMAT时间函数的使用小结》本文主要介绍了MySQL中DATE_FORMAT时间函数的使用小结,用于格式化日期/时间字段,可提取年月、统计月份数据、精确到天,对大家的学习或... 目录前言DATE_FORMAT时间函数总结前言mysql可以使用DATE_FORMAT获取日期字段