抓 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
這里看出,是哪個(gè) task,PID 是多少,用的 I2C-1 進(jìn)行通信,傳輸過程是跑在 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度,內(nèi)容,也都會(huì)打印出來。
因?yàn)椴┲饕婚_始只在 events 里面 enable 了 i2c,因此只抓除了 i2c 部分,我們可以同時(shí) enable 其他事件:

如果我們同時(shí) enable i2c 和 irq ,我們將在 trace 中看到更詳細(xì)的內(nèi)容,足夠分析 i2c 傳輸慢的問題。
-
Linux
+關(guān)注
關(guān)注
88文章
11814瀏覽量
219527 -
I2C
+關(guān)注
關(guān)注
28文章
1562瀏覽量
131719
發(fā)布評(píng)論請先 登錄
I2C Guid I2C指南
I2C總線在Linux系統(tǒng)中的驅(qū)動(dòng)設(shè)計(jì)
linux自帶i2c工具使用
Linux的I2C驅(qū)動(dòng)架構(gòu)
Linux驅(qū)動(dòng)中的I2C驅(qū)動(dòng)架構(gòu)詳細(xì)分析
嵌入式linux應(yīng)用讀寫i2c示例
linux I2C子系統(tǒng)(及相關(guān)程序設(shè)計(jì)MPU6050)
linux移植MPU6050的I2C驅(qū)動(dòng)
Linux應(yīng)用開發(fā)【第十二章】I2C編程應(yīng)用開發(fā)
硬件I2C與模擬I2C
Linux I2C驅(qū)動(dòng)入門知識(shí)科普
Linux ftrace簡介與分析
Linux ftrace工具宏定義
I2C子系統(tǒng)SW Architecture
Linux ftrace工具抓 i2c trace
評(píng)論