抓 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 //打開跟蹤器
操作設(shè)備,復(fù)現(xiàn)問題。
echo 0 > /sys/kernel/debug/tracing/tracing_on//關(guān)閉跟蹤器
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 是一個循環(huán),i2c_reply 是 i2c 傳輸完成,并且重新被 CPU 調(diào)度,返回到調(diào)用線程的時間點,i2c_result 則是兩次 i2c 傳輸?shù)臅r間間隔。
每一筆 i2c 傳輸?shù)拈L度,內(nèi)容,也都會打印出來。
因為博主一開始只在 events 里面 enable 了 i2c,因此只抓除了 i2c 部分,我們可以同時 enable 其他事件:
如果我們同時 enable i2c 和 irq ,我們將在 trace 中看到更詳細的內(nèi)容,足夠分析 i2c 傳輸慢的問題。
-
Linux
+關(guān)注
關(guān)注
87文章
11511瀏覽量
213837 -
I2C
+關(guān)注
關(guān)注
28文章
1541瀏覽量
127878
發(fā)布評論請先 登錄
I2C Guid I2C指南
I2C總線及EEPROM的Linux驅(qū)動程序的設(shè)計

linux自帶i2c工具使用
Linux的I2C驅(qū)動架構(gòu)
Linux驅(qū)動中的I2C驅(qū)動架構(gòu)詳細分析

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

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

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

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

硬件I2C與模擬I2C

Linux I2C驅(qū)動入門知識科普
Linux ftrace簡介與分析
Linux ftrace工具宏定義
I2C子系統(tǒng)SW Architecture

評論