抓 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)注
88文章
11761瀏覽量
219054 -
I2C
+關(guān)注
關(guān)注
28文章
1556瀏覽量
131246
發(fā)布評論請先 登錄
I2C Guid I2C指南
I2C總線在Linux系統(tǒng)中的驅(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
Linux ftrace工具抓 i2c trace
評論