Android內核開發:如何統計系統的啓動時間

本文是《Android內核開發》系列的第七篇文章,通過上一篇文章《Android內核開發:圖解Android系統的啓動過程》我們大致瞭解了Android系統的啓動過程,那麼本文就從實踐的角度,簡單介紹一下如何統計Android系統的啓動時間。


這裏所說的統計系統的啓動時間,並不是簡單地用秒錶和肉眼來統計,而是通過分析系統輸出的log信息來統計,這樣才顯得更加專業。


首先了解2個概念:


(1) Android是基於Linux內核的系統,因此Android的啓動過程是分爲兩個階段的,第一個階段就是Linux內核的啓動,第二個階段就是Android框架的啓動(包括核心服務和程序)。


(2)Android的log系統是獨立於Linux內核的log系統的。Linux內核通過printk打印的log信息,這些log寫入到了/dev/kmsg文件中,在Shell終端可以通過dmesg命令查看這些log信息。Android框架則是通過Logger驅動打印log信息,這些log並沒有歸併到kmesg文件中,而是單獨存儲的,位於/dev/log目錄下,在Shell終端可以通過logcat命令來查看。


下面我們分別從兩種log信息中找到如何統計系統啓動時間的方法。


1.  通過dmesg信息統計系統啓動時間


首先,我們通過dmesg命令抓取Linux內核的log信息(部分系統可能需要先執行 adb root):


$ adb shell dmesg > dmesg.txt


Linux內核啓動完成,一般都有如下的標準輸出信息:


<6> [ 6.613861] Freeing init memory: 176K


因此,只要我們在dmesg.txt文件中找到“Freeing init memory”這一行即可,從上面的log可以看出,Linux內核啓動只用了6.613861s。


那麼,如何找到Android系統啓動完成的標誌呢?


很多Android設備在系統啓動完成後,會在內核log中打印如下信息:


<6>[ 29.913726] init: processing action 0x96bb8 (property:sys.boot_completed=1)


因此,找到“boot_completed”這一行也就得到了整個系統的啓動時間了,從這一行可以看出,整個系統啓動用了29.913726s。


當然,並不是所有的Android設備都會打印出這條log,因此,我們一般用下面介紹的方法來專門統計Android系統的啓動時間,


2.  通過logcat統計系統的啓動時間


文章開頭我們已經介紹過,Android的log系統是獨立於Linux內核log系統的,通過在終端輸入adb shell 進入Android系統,cd到/dev/log目錄,你會發現裏面有四個文件,分別是:events,main,radio,system.


Android系統把Log分爲了四類,不同的類別記錄不同的Log信息:


main - 主要的Log信息,大部分應用級別的Log信息都在這裏

events - 系統事件相關的Log信息

radio   - 無線/電話相關的Log信息

system - 低級別的系統調試Log信息


默認通過logcat抓取的是main信息,如果想抓取指定類別的log信息的方法,在logcat命令後加-b參數,例如:


1
2
3
4
$ adb logcat -d -v time -b "main"   >  main.txt
$ adb logcat -d -v time -b "events" >  events.txt
$ adb logcat -d -v time -b "system" >  system.txt
$ adb logcat -d -v time -b "radio"  >  radio.txt


關於Android Log系統的分類,你可以訪問如下頁面詳細瞭解: 《Android Logging System》


那麼,如何統計Android系統的啓動時間呢?


我們可以重點關注events類別的log信息,通過如下命令:


$ adb logcat -d -b events | grep "boot"


如圖所示,這是我在高通的APQ8064開發板上抓取的log信息:


wKioL1V5fk2zyWfUAAHv186gKeI487.jpg


“boot_progress_start”代表着Android屏幕點亮,開始顯示啓動動畫,即15.492s開始閃爍Android字樣。


“boot_progress_enable_screen”代表着整個系統啓動結束,即用了29.986s,用這個總時間減去Linux Kernel的啓動時間即可得到Android OS部分的時間。


3.  小結


由於本文重點關注如何統計Android系統的啓動時間,因此,很多啓動log文件的分析就不做詳細展開了,下一篇文章將會對系統啓動的log做稍微詳細的分析。有任何疑問或者建議歡迎留言或者來信[email protected]交流,或者關注我的新浪微博 @盧_俊 獲取最新的文章和資訊。

發佈了8 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章