加速啟動的方法 以上流程中每一步都可以進行優化,每步的優化方法如下: 1. 為加快從Flash 讀取內核的速度可以做以下工作: 1) 根據自己使用的Flash 的用戶手冊,修改其參數配置,使其讀寫速度盡可能的達到最快。 2) 裁剪內核,減小內核體積。在編譯內核時去掉不需要的硬件驅動、文件系統、調試信息,使內核盡可能地達到最小。比如可以去掉內核對鍵盤、鼠標等硬件的支持,去掉RomFs、RamDisk 等文件系統的支持。內核中的文件系統占了相當大的部分,因此應盡量去掉那些根本不需要文件系統。 3) 把內核中一些模塊直接編譯成模塊的方式,而不是與內核編譯在一起,在內核啟動之后再裝載那些模塊,這樣也能減小內核體積。比如網卡驅動,USB 驅動,這些都不是內核啟動所必需的模塊,因此不必與內核編譯一起,而是編譯成單獨的模塊,當內核啟動之后再加載這些模塊即可。 2. 為加快在內存中運行內核的速度,可以完全屏蔽掉printk 函數的輸出,去掉了在運行內核時的所有的調試輸出信息,這樣也能縮短解壓并運行內核的時間。printk函數的輸出對啟動時間影響很大,在項目剛開始時系統啟動時間居然需要4 分鐘左右,后來把printk 的輸出屏蔽掉之后啟動時間就驟降到40 秒左右,所以printk對系統的啟動時間影響很大。 3. 為加快裝載根文件系統和主應用程序到內存中可以采取以下措施: 1) 根文件系統的格式采用cramfs 格式。嵌入式系統中的文件系統有許多,比如romfs,ramfs,jffs2,cramfs,yaffs 等,通過對各種文件系統進行比較,最后確定使用cramfs 文件系統,該文件系統在從Flash 加載到內存中的速度比較理想。剛開始時我們采用的是jffs2 文件格式,且應用程序和根文件系統放在兩個不同的分區,此時的系統的啟動時間是30 秒左右,一直無法降下去。后來技術支持建議用cramfs 文件系統,且把根文件系統和應用程序放在一直做成一個鏡像文件一起加載,結果啟動時間就降了五六秒左右。 2) 用動態庫代替靜態庫來縮小主應用程序的體積,這樣也能加快加載主應用 程序到內存的速度。 4. 為加快啟動腳本的運行,可以把該啟動腳本中的任務最大限度的刪減,把所有無關的任務都去掉;另外還把一些能并行啟動的任務都做成并行執行,這樣就加快了加載系統中各任務的速度。 5. 在運行主程序這一步中,可以優化應用程序中各任務的啟動時機,把播放電視節目 的任務盡可能的提前,這樣用戶開機之后就能很快看到電視節目,在開始播放電視節目之后,才在后臺對其它任務進行初始化。 通過以上各種方法的組合應用,我們項目把啟動時間控制在了22 秒左右。 學習技能三步: 不懂就問; 想了再問; 做了再問。 |