抓 i2c trace
adb root
echo nop > /sys/kernel/debug/tracing/current_tracer //清空以前的跟踪信息
echo 1 > /sys/kernel/debug/tracing/events/i2c/enable
echo 1 > /sys/kernel/debug/tracing/trasing_on //打开跟踪器
操作设备,复现问题。
echo 0 > /sys/kernel/debug/tracing/tracing_on//关闭跟踪器
adb pull /sys/kernel/debug/tracing/trace
如下目录也可以操作:
/sys/kernel/tracing/
adb pull 出来的 trace 文件如下:
# tracer: nop
#
# entries-in-buffer/entries-written: 1203/1087390 #P:6
#
# _-----= > irqs-off
# / _----= > need-resched
# | / _---= > hardirq/softirq
# || / _--= > preempt-depth
# ||| / delay
# TASK-PID CPU# |||| TIMESTAMP FUNCTION
# | | | |||| | |
kworker/u12:0-6 [003] ...1 253.195437: i2c_reply: i2c-1 #1 a=038 f=0001 l=63 [00-00-01-81-68-03-72-00-00-ff-ff-ff-ff-00-00-ff-ff-ff-ff-00-00-ff-ff-ff-ff-00-00-ff-ff-ff-ff-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00]
kworker/u12:0-6 [003] ...1 253.195440: i2c_result: i2c-1 n=2 ret=2
kworker/u12:0-6 [003] ...1 253.257546: i2c_write: i2c-1 #0 a=038 f=0000 l=1 [00]
kworker/u12:0-6 [003] ...1 253.257550: i2c_read: i2c-1 #1 a=038 f=0001 l=63
kworker/u12:0-6 [003] ...1 253.263708: i2c_reply: i2c-1 #1 a=038 f=0001 l=63 [00-00-01-81-68-02-d0-00-00-ff-ff-ff-ff-00-00-ff-ff-ff-ff-00-00-ff-ff-ff-ff-00-00-ff-ff-ff-ff-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00]
kworker/u12:0-6 [003] ...1 253.263711: i2c_result: i2c-1 n=2 ret=2
kworker/u12:5-223 [003] ...1 254.632061: i2c_write: i2c-1 #0 a=038 f=0000 l=1 [00]
kworker/u12:5-223 [003] ...1 254.632064: i2c_read: i2c-1 #1 a=038 f=0001 l=63
kworker/u12:5-223 [003] ...1 255.728473: i2c_result: i2c-1 n=1 ret=1
kworker/u12:5-223 [003] ...1 255.728499: i2c_write: i2c-1 #0 a=01a f=0000 l=3 [63-a8-10]
kworker/u12:4-222 [003] ...1 266.944488: i2c_write: i2c-1 #0 a=038 f=0000 l=1 [00]
kworker/u12:4-222 [003] .n.1 266.944492: i2c_read: i2c-1 #1 a=038 f=0001 l=63
kworker/u12:1-53 [003] ...1 268.822588: i2c_reply: i2c-1 #1 a=038 f=0001 l=63 [00-00-00-40-00-01-c4-00-00-ff-ff-ff-ff-00-00-ff-ff-ff-ff-00-00-ff-ff-ff-ff-00-00-ff-ff-ff-ff-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00]
kworker/u12:1-53 [003] ...1 268.822591: i2c_result: i2c-1 n=2 ret=2
kworker/u12:1-53 [003] ...1 268.822650: i2c_write: i2c-1 #0 a=038 f=0000 l=1 [00]
kworker/u12:1-53 [003] ...1 268.822651: i2c_read: i2c-1 #1 a=038 f=0001 l=63
kworker/u12:0-6 [003] ...1 271.457514: i2c_write: i2c-1 #0 a=038 f=0000 l=1 [00]
kworker/u12:0-6 [003] ...1 271.457518: i2c_read: i2c-1 #1 a=038 f=0001 l=63
这里看出,是哪个 task,PID 是多少,用的 I2C-1 进行通信,传输过程是跑在 CPU3 上面,并且有 kernel 时间戳。
i2c_write、i2c_read、i2c_reply、i2c_result 是一个循环,i2c_reply 是 i2c 传输完成,并且重新被 CPU 调度,返回到调用线程的时间点,i2c_result 则是两次 i2c 传输的时间间隔。
每一笔 i2c 传输的长度,内容,也都会打印出来。
因为博主一开始只在 events 里面 enable 了 i2c,因此只抓除了 i2c 部分,我们可以同时 enable 其他事件:
如果我们同时 enable i2c 和 irq ,我们将在 trace 中看到更详细的内容,足够分析 i2c 传输慢的问题。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
Linux
+关注
关注
87文章
11221浏览量
208882 -
I2C
+关注
关注
28文章
1481浏览量
123246
发布评论请先 登录
相关推荐
I2C Guid I2C指南
I2C Guid I2C指南
The I2C bus is used in a wide rangeof applications because it is simpleand
发表于 04-23 13:55
•36次下载
I2C总线在Linux系统中的驱动设计
介绍I2C总线的基本概念和工作原理,叙述I2C总线扩展器件ZLG7290的功能特点。在以S3C2410为微控制器,ZLG7290为I2C总线扩展器件的基础上,介绍通过
发表于 12-29 16:52
•40次下载
linux自带i2c工具使用
平台管理总线),DDC(显示数据通道)以及ATCA(高级电信架构).如果没记错的话,linux中的I2C框架是完全支持SMBus的.
发表于 05-13 09:23
•3969次阅读
Linux的I2C驱动架构
1. Linux的I2C驱动架构Linux中I2C总线的驱动分为两个部分,总线驱动(BUS)和设备驱动(DEVICE)。其中总线驱动的职责,是为系统中每个
发表于 04-02 14:38
•666次阅读
Linux驱动中的I2C驱动架构详细分析
其实I2C接口非常的简单,即使用51单片机的gpio来模拟I2C,编写一个e2prom或者其他I2C接口的驱动程序,也不是什么难事,几百行代码就能搞定。但是
发表于 08-01 17:35
•3次下载
嵌入式linux应用读写i2c示例
这里分享一个嵌入式linux读写24c02的i2c程序ioctl函数的使用:原型:struct ioctl(struct file *file,unsigned int cmd,unsigned
发表于 11-01 16:57
•12次下载
linux I2C子系统(及相关程序设计MPU6050)
文章目录linux I2C子系统框架在设备树中添加从设备信息,mpu5060I2C driver 程序的编写mpu6050 I2C程序具体实现lin
发表于 12-06 13:36
•9次下载
linux移植MPU6050的I2C驱动
上次移植了0.96寸的oled到linux上,用到的是SPI协议,这次买了一个I2C协议的模块,MPU-6050。到手焊好,先在我先前买的pico上面测试了一下,因为pico的I2C例子里面刚好
发表于 12-06 14:21
•10次下载
Linux应用开发【第十二章】I2C编程应用开发
4:传输速率 5) 特性5:负载和距离 12.2.3 协议层 1) 数据有效性 2) 起始和结束条件 3) 应答 4) 数据帧格式 12.2 在linux系统下操作I2C总线的外设 12.2.1 概述
硬件I2C与模拟I2C
硬件I2C对应芯片上的I2C外设,有相应I2C驱动电路,其所使用的I2C管脚也是专用的,因而效率要远高于软件模拟的I2C;一般也较为稳定,但
发表于 12-28 19:14
•81次下载
Linux ftrace简介与分析
最近遇到 i2c 传输慢的问题,正常一笔 i2c 传输 52 bytes 应该在 1ms 内返回,但是偶尔出现 6 ~ 7ms 才返回,不满足要求,因此研究一下 ftrace 工具,分
Linux ftrace工具宏定义
宏定义 在使用 ftrace 之前,需要确保内核配置编译了其配置选项。 CONFIG_FTRACE=y CONFIG_HAVE_FUNCTION_TRACER=y
I2C子系统SW Architecture
I2C SW Architecture 【driver 驱动层】由普通驱动工程师负责,【i2c 核心层】由 Linux 提供,【i2c 核心层】以下由芯片原厂负责。
评论