抓 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文章
11521瀏覽量
214049 -
I2C
+關注
關注
28文章
1541瀏覽量
128073
發布評論請先 登錄
相關推薦
熱點推薦
I2C Guid I2C指南
I2C Guid I2C指南
The I2C bus is used in a wide rangeof applications because it is simpleand
發表于 04-23 13:55
?36次下載
I2C總線及EEPROM的Linux驅動程序的設計
筆者在開發基于MPC8250的嵌入式Linux系統的過程中發現I2C總線在嵌入式系統中應用廣泛,I2C總線控制器的類型比較多,對系統提供的操作接口差別也很大
發表于 01-06 16:35
?3704次閱讀

linux自帶i2c工具使用
平臺管理總線),DDC(顯示數據通道)以及ATCA(高級電信架構).如果沒記錯的話,linux中的I2C框架是完全支持SMBus的.
發表于 05-13 09:23
?4161次閱讀
Linux的I2C驅動架構
1.???? Linux的I2C驅動架構Linux中I2C總線的驅動分為兩個部分,總線驅動(BUS)和設備驅動(DEVICE)。其中總線驅動的職責,是為系統中每個
發表于 04-02 14:38
?797次閱讀
Linux驅動中的I2C驅動架構詳細分析
其實I2C接口非常的簡單,即使用51單片機的gpio來模擬I2C,編寫一個e2prom或者其他I2C接口的驅動程序,也不是什么難事,幾百行代碼就能搞定。但是
發表于 08-01 17:35
?3次下載

嵌入式linux應用讀寫i2c示例
這里分享一個嵌入式linux讀寫24c02的i2c程序ioctl函數的使用:原型:struct ioctl(struct file *file,unsigned int cmd,unsigned
發表于 11-01 16:57
?12次下載

linux I2C子系統(及相關程序設計MPU6050)
文章目錄linux I2C子系統框架在設備樹中添加從設備信息,mpu5060I2C driver 程序的編寫mpu6050 I2C程序具體實現lin
發表于 12-06 13:36
?9次下載

linux移植MPU6050的I2C驅動
上次移植了0.96寸的oled到linux上,用到的是SPI協議,這次買了一個I2C協議的模塊,MPU-6050。到手焊好,先在我先前買的pico上面測試了一下,因為pico的I2C例子里面剛好
發表于 12-06 14:21
?10次下載

Linux應用開發【第十二章】I2C編程應用開發
4:傳輸速率 5) 特性5:負載和距離 12.2.3 協議層 1) 數據有效性 2) 起始和結束條件 3) 應答 4) 數據幀格式 12.2 在linux系統下操作I2C總線的外設 12.2.1 概述

硬件I2C與模擬I2C
硬件I2C對應芯片上的I2C外設,有相應I2C驅動電路,其所使用的I2C管腳也是專用的,因而效率要遠高于軟件模擬的I2C;一般也較為穩定,但
發表于 12-28 19:14
?81次下載

Linux ftrace簡介與分析
最近遇到 i2c 傳輸慢的問題,正常一筆 i2c 傳輸 52 bytes 應該在 1ms 內返回,但是偶爾出現 6 ~ 7ms 才返回,不滿足要求,因此研究一下 ftrace 工具,分
Linux ftrace工具宏定義
宏定義 在使用 ftrace 之前,需要確保內核配置編譯了其配置選項。 CONFIG_FTRACE=y CONFIG_HAVE_FUNCTION_TRACER=y
I2C子系統SW Architecture
I2C SW Architecture 【driver 驅動層】由普通驅動工程師負責,【i2c 核心層】由 Linux 提供,【i2c 核心層】以下由芯片原廠負責。

評論