機器休眠後,按電源鍵喚醒,2s多螢幕才亮,檢視核心資訊,沒發現什麼報錯資訊。先檢查lcd的初始化**,去掉多餘的延時,喚醒時間依然很長。繼續分析核心資訊,從按下電源鍵到開背光,用時2s多,發現tp喚醒時間較長。直接修改tp的i2c位址(或者拔掉tp),讓tp驅動不跑,喚醒時間就正常了。繼續分析tp的喚醒函式。
通過如下方法,把tp的喚醒的每個函式的執行時間都列印出來。
long long int elapsed_ms;
ktime_t time_start;
time_start=ktime_get();
elapsed_ms = ktime_to_ms(ktime_sub(ktime_get(), time_start));
最終定位到該函式耗時較長。
int fts_wait_tp_to_valid(struct i2c_client *client)
else
cnt++;
msleep(interval_read_reg);
} while ((cnt * interval_read_reg) < timeout_read_reg);
return -eio;
}
tp喚醒後,會有復位操作,然後通過2c通訊判斷tp是否已經正常工作。邏輯沒有問題。但讀到的id跟fts_reg_chip_id不符,導致一直在循序,直到超時退出。最開始由於tp那邊沒有驅動**,說跟敦泰的tp協議相容,直接用了敦泰的驅動,最終導致了喚醒慢的問題。 記一次gpio喚醒除錯
使用tp的irq腳做手勢喚醒。雙擊螢幕後,從log看cpu已經被喚醒了,但很快又睡下去,通過log分析,發現沒有進入中斷處理函式。這裡使用的電平中斷。以前已分析過電平 邊沿喚醒cpu流程列印發現handle level irq只跑了一遍,第二次的handle level irq沒有過來導致無法進入中...
記一次Redis bitmap導致的miss問題
redis bitmaps 基礎概念 redis 記憶體淘汰機制 大致需求 指令碼批量匯入使用者資料到redis中,使用bitmap標記使用者是否在匯入的白名單中。使用者量級 億。key使用了分片處理,把key分成了10w個,每個key占用 1億 10w 1000 個bit。理想是key1用於標記u...
記一次Orika導致的OOM
有乙個專案執行一段時間後就會出現oom,下面梳理下尋找問題根源的方法 某一天,乙個好久沒動過的服務崩掉了,top檢視程序占用cpu高達700 按照top,jstack一條龍查詢導致異常的執行緒 這裡沒看到什麼異常,把堆檔案dump到本地進行分析 看到hashmap將近佔了記憶體大小的50 開始尋找專...