/sys/ kernel/debug/tracing/current_tracer //清空以前的跟蹤信息 echo 1 > /sys/ kernel/debug/tracing/events/i2c/enableecho 1 > /sys/ kernel/debug/tracing/trasing_on //打開(kāi)跟蹤器 操作設(shè)備,復(fù)現(xiàn)問(wèn)題。echo 0 > /sys/ kernel/debug/tracing/tracing_on //關(guān)閉跟蹤器 adb pull /sys/kernel/debug/tracing/trace 如下目錄也可以操作: /sys/ kernel /tracing/ adb pull 出來(lái)的 trace 文件如下: # tracer: nop # # entries-in-buffer/entries-written: 1203/1087390 #P:6 # # _-----= > irqs-off # / _----= > need-resched # | / _---= > hardirq/soft" />
0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux ftrace工具抓 i2c trace

麥辣雞腿堡 ? 來(lái)源:嵌入式Linux系統(tǒng)開(kāi)發(fā) ? 作者:嵌入式Linux系統(tǒng)開(kāi) ? 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  //打開(kāi)跟蹤器

操作設(shè)備,復(fù)現(xiàn)問(wèn)題。

echo 0 > /sys/kernel/debug/tracing/tracing_on//關(guān)閉跟蹤器

adb pull /sys/kernel/debug/tracing/trace

如下目錄也可以操作:

/sys/kernel/tracing/

adb pull 出來(lái)的 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

這里看出,是哪個(gè) task,PID 是多少,用的 I2C-1 進(jìn)行通信,傳輸過(guò)程是跑在 CPU3 上面,并且有 kernel 時(shí)間戳。

i2c_write、i2c_read、i2c_reply、i2c_result 是一個(gè)循環(huán),i2c_reply 是 i2c 傳輸完成,并且重新被 CPU 調(diào)度,返回到調(diào)用線程的時(shí)間點(diǎn),i2c_result 則是兩次 i2c 傳輸?shù)臅r(shí)間間隔。

每一筆 i2c 傳輸?shù)拈L(zhǎng)度,內(nèi)容,也都會(huì)打印出來(lái)。

因?yàn)椴┲饕婚_(kāi)始只在 events 里面 enable 了 i2c,因此只抓除了 i2c 部分,我們可以同時(shí) enable 其他事件:

圖片

如果我們同時(shí) enable i2c 和 irq ,我們將在 trace 中看到更詳細(xì)的內(nèi)容,足夠分析 i2c 傳輸慢的問(wèn)題。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11123

    瀏覽量

    207919
  • I2C
    I2C
    +關(guān)注

    關(guān)注

    28

    文章

    1452

    瀏覽量

    122261
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    I2C Guid I2C指南

    I2C Guid  I2C指南 The I2C bus is used in a wide rangeof applications because it is simpleand
    發(fā)表于 04-23 13:55 ?36次下載

    I2C總線在Linux系統(tǒng)中的驅(qū)動(dòng)設(shè)計(jì)

    介紹I2C總線的基本概念和工作原理,敘述I2C總線擴(kuò)展器件ZLG7290的功能特點(diǎn)。在以S3C2410為微控制器,ZLG7290為I2C總線擴(kuò)展器件的基礎(chǔ)上,介紹通過(guò)
    發(fā)表于 12-29 16:52 ?40次下載

    i2c

    單片機(jī)i2c總線操作;單片機(jī)i2c總線操作;單片機(jī)i2c總線操作;
    發(fā)表于 05-17 11:09 ?35次下載

    linux自帶i2c工具使用

    平臺(tái)管理總線),DDC(顯示數(shù)據(jù)通道)以及ATCA(高級(jí)電信架構(gòu)).如果沒(méi)記錯(cuò)的話,linux中的I2C框架是完全支持SMBus的.
    發(fā)表于 05-13 09:23 ?3909次閱讀

    LinuxI2C驅(qū)動(dòng)架構(gòu)

    1.???? LinuxI2C驅(qū)動(dòng)架構(gòu)LinuxI2C總線的驅(qū)動(dòng)分為兩個(gè)部分,總線驅(qū)動(dòng)(BUS)和設(shè)備驅(qū)動(dòng)(DEVICE)。其中總線驅(qū)動(dòng)的職責(zé),是為系統(tǒng)中每個(gè)
    發(fā)表于 04-02 14:38 ?626次閱讀

    Linux驅(qū)動(dòng)中的I2C驅(qū)動(dòng)架構(gòu)詳細(xì)分析

    其實(shí)I2C接口非常的簡(jiǎn)單,即使用51單片機(jī)的gpio來(lái)模擬I2C,編寫一個(gè)e2prom或者其他I2C接口的驅(qū)動(dòng)程序,也不是什么難事,幾百行代碼就能搞定。但是
    發(fā)表于 08-01 17:35 ?3次下載
    <b class='flag-5'>Linux</b>驅(qū)動(dòng)中的<b class='flag-5'>I2C</b>驅(qū)動(dòng)架構(gòu)詳細(xì)分析

    嵌入式linux應(yīng)用讀寫i2c示例

    這里分享一個(gè)嵌入式linux讀寫24c02的i2c程序ioctl函數(shù)的使用:原型:struct ioctl(struct file *file,unsigned int cmd,unsigned
    發(fā)表于 11-01 16:57 ?12次下載
    嵌入式<b class='flag-5'>linux</b>應(yīng)用讀寫<b class='flag-5'>i2c</b>示例

    linux I2C子系統(tǒng)(及相關(guān)程序設(shè)計(jì)MPU6050)

    文章目錄linux I2C子系統(tǒng)框架在設(shè)備樹(shù)中添加從設(shè)備信息,mpu5060I2C driver 程序的編寫mpu6050 I2C程序具體實(shí)現(xiàn)lin
    發(fā)表于 12-06 13:36 ?9次下載
    <b class='flag-5'>linux</b> <b class='flag-5'>I2C</b>子系統(tǒng)(及相關(guān)程序設(shè)計(jì)MPU6050)

    linux移植MPU6050的I2C驅(qū)動(dòng)

    上次移植了0.96寸的oled到linux上,用到的是SPI協(xié)議,這次買了一個(gè)I2C協(xié)議的模塊,MPU-6050。到手焊好,先在我先前買的pico上面測(cè)試了一下,因?yàn)閜ico的I2C例子里面剛好
    發(fā)表于 12-06 14:21 ?10次下載
    <b class='flag-5'>linux</b>移植MPU6050的<b class='flag-5'>I2C</b>驅(qū)動(dòng)

    Linux應(yīng)用開(kāi)發(fā)【第十二章】I2C編程應(yīng)用開(kāi)發(fā)

    4:傳輸速率 5) 特性5:負(fù)載和距離 12.2.3 協(xié)議層 1) 數(shù)據(jù)有效性 2) 起始和結(jié)束條件 3) 應(yīng)答 4) 數(shù)據(jù)幀格式 12.2 在linux系統(tǒng)下操作I2C總線的外設(shè) 12.2.1 概述
    的頭像 發(fā)表于 12-10 19:28 ?783次閱讀
    <b class='flag-5'>Linux</b>應(yīng)用開(kāi)發(fā)【第十二章】<b class='flag-5'>I2C</b>編程應(yīng)用開(kāi)發(fā)

    硬件I2C與模擬I2C

    硬件I2C對(duì)應(yīng)芯片上的I2C外設(shè),有相應(yīng)I2C驅(qū)動(dòng)電路,其所使用的I2C管腳也是專用的,因而效率要遠(yuǎn)高于軟件模擬的I2C;一般也較為穩(wěn)定,但
    發(fā)表于 12-28 19:14 ?81次下載
    硬件<b class='flag-5'>I2C</b>與模擬<b class='flag-5'>I2C</b>

    Linux I2C驅(qū)動(dòng)入門知識(shí)科普

    I2C 總線驅(qū)動(dòng), I2C總線驅(qū)動(dòng)就是SOC的 I2C控制器驅(qū)動(dòng),也叫做 I2C適配器驅(qū)動(dòng)。
    的頭像 發(fā)表于 12-29 13:59 ?1528次閱讀

    Linux ftrace簡(jiǎn)介與分析

    最近遇到 i2c 傳輸慢的問(wèn)題,正常一筆 i2c 傳輸 52 bytes 應(yīng)該在 1ms 內(nèi)返回,但是偶爾出現(xiàn) 6 ~ 7ms 才返回,不滿足要求,因此研究一下 ftrace 工具,分
    的頭像 發(fā)表于 07-20 11:17 ?743次閱讀

    Linux ftrace工具宏定義

    宏定義 在使用 ftrace 之前,需要確保內(nèi)核配置編譯了其配置選項(xiàng)。 CONFIG_FTRACE=y CONFIG_HAVE_FUNCTION_TRACER=y
    的頭像 發(fā)表于 07-20 11:18 ?544次閱讀

    I2C子系統(tǒng)SW Architecture

    I2C SW Architecture 【driver 驅(qū)動(dòng)層】由普通驅(qū)動(dòng)工程師負(fù)責(zé),【i2c 核心層】由 Linux 提供,【i2c 核心層】以下由芯片原廠負(fù)責(zé)。
    的頭像 發(fā)表于 07-22 16:01 ?796次閱讀
    <b class='flag-5'>I2C</b>子系統(tǒng)SW Architecture