0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux ftrace工具抓 i2c trace

麦辣鸡腿堡 来源:嵌入式Linux系统开发 作者:嵌入式Linux系统开 2023-07-20 11:23 次阅读

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
    I2C
    +关注

    关注

    28

    文章

    1348

    浏览量

    120890
收藏 人收藏

    评论

    相关推荐

    I2C规范,I2C总线原理

    I2C规范,I2C总线原理1 序言
    发表于 04-09 18:34

    LinuxI2C体系结构

     在Linux 系统中,I2C 驱动由3 部分组成,即I2C 核心、I2C 总线驱动和I2C 设备驱动,
    发表于 08-06 06:53

    stm32f401re i2c使用

    HAL_ERR和HAL_BUSY,只能通过复位I2C和软重启解决。后来改用模拟I2C,在包时发现又是会出现10ns的毛刺信号,头疼。初步怀疑是因为用杜邦线飞线导致的,后来打的样板回来后焊接调试发现果然好了。希望亲们下次调试
    发表于 03-05 19:02

    I2C不迷茫--系列文章讲透I2C

    ,和复杂性。但是,有时设计约束可能会使I 2 C实现复杂化。I 2 C缓冲区是一种可以使事情变得
    发表于 09-22 09:31

    迅为-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内核
    的头像 发表于 08-13 17:33 2836次阅读
    <b class='flag-5'>Linux</b>内核<b class='flag-5'>ftrace</b>的学习

    Linux ftrace简介与分析

    最近遇到 i2c 传输慢的问题,正常一笔 i2c 传输 52 bytes 应该在 1ms 内返回,但是偶尔出现 6 ~ 7ms 才返回,不满足要求,因此研究一下 ftrace 工具,分
    的头像 发表于 07-20 11:17 547次阅读

    Linux ftrace工具宏定义

    宏定义 在使用 ftrace 之前,需要确保内核配置编译了其配置选项。 CONFIG_FTRACE=y CONFIG_HAVE_FUNCTION_TRACER
    的头像 发表于 07-20 11:18 451次阅读