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