抓 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文章
10994浏览量
206772 -
I2C
+关注
关注
28文章
1348浏览量
120890
发布评论请先 登录
相关推荐
stm32f401re i2c使用
HAL_ERR和HAL_BUSY,只能通过复位I2C和软重启解决。后来改用模拟I2C,在抓包时发现又是会出现10ns的毛刺信号,头疼。初步怀疑是因为用杜邦线飞线导致的,后来打的样板回来后焊接调试发现果然好了。希望亲们下次调试
发表于 03-05 19:02
迅为-iMX6ULL开发板-i2c测试工具
本章节使用的资料已经放到了开发板网盘资料中,路径为:11_Linux 系统开发进阶\95_章节使用资料。1移植I2c 测试工具下载地址 https://mirrors.edge.kernel.org
发表于 09-25 10:57
迅为-iMX6ULL开发板-i2c测试工具
本章节使用的资料已经放到了开发板网盘资料中,路径为:11_Linux 系统开发进阶\95_章节使用资料。95.1移植I2c 测试工具下载地址 https
发表于 10-23 10:56
RT-Thread的i2c例程示波器抓不到波形
读到了虚拟的温湿度。但是发现对应引脚通信时,示波器抓不到信号。这是为什么呢?是一定要接硬件嘛?另外想问一下,rtt开发i2c,能否从机是i2c信号转电流芯片,只发不收?
发表于 05-21 18:01
如何仿照Linux内核去编写I2C驱动
仿照Linux内核编写MCU的I2C驱动I2C是很常用的串行通信接口,用于连接各种外设,传感器等器件。在单片机开发中,I2C驱动程序通常和硬件相关,不利于升级和代码复用。而
发表于 08-23 08:03
分享一个嵌入式linux读写24c02的i2c程序
这里分享一个嵌入式linux读写24c02的i2c程序ioctl函数的使用:原型:struct ioctl(struct file *file,unsigned int cmd,unsigned
发表于 11-04 07:53
linux I2C子系统的相关资料分享
文章目录linux I2C子系统框架在设备树中添加从设备信息,mpu5060I2C driver 程序的编写mpu6050 I2C程序具体实现lin
发表于 02-10 06:06
linux移植MPU6050的I2C驱动过程分享
上次移植了0.96寸的oled到linux上,用到的是SPI协议,这次买了一个I2C协议的模块,MPU-6050。到手焊好,先在我先前买的pico上面测试了一下,因为pico的I2C例子里面刚好
发表于 02-10 06:48
I2C通信简介
文章目录I2C简介i2c-dev.hi2c.hTSC2007代码测试设备树I2C简介ls /dev这里拿我们的七寸LVDS屏幕的触摸芯片为例子,通过底座的原理图,可以看到LVDS使用了I2C
发表于 02-23 06:28
Linux内核ftrace的学习
后的blk_update_request 5.2 设定trace函数blk_update_request 6. 钩子函数的替换过程 7.总结 参考文档 1. 前言 本文主要是根据阅码场 《Linux内核
Linux ftrace简介与分析
最近遇到 i2c 传输慢的问题,正常一笔 i2c 传输 52 bytes 应该在 1ms 内返回,但是偶尔出现 6 ~ 7ms 才返回,不满足要求,因此研究一下 ftrace 工具,分
Linux ftrace工具宏定义
宏定义 在使用 ftrace 之前,需要确保内核配置编译了其配置选项。 CONFIG_FTRACE=y CONFIG_HAVE_FUNCTION_TRACER
评论