本文主要講述嵌入式Linux啟動時(shí)間優(yōu)化的秘密,我們繼續(xù)上篇沒有講完的嵌入式Linux啟動時(shí)間優(yōu)化方法,本文主要會講Bootloader。想看上一篇的請查看本文結(jié)尾的鏈接。
Bootloader
1. 裁剪
刪除不必要的功能。
通常引導(dǎo)加載程序包括許多僅用于開發(fā)所需的功能。用較少的功能編譯您的bootloader。
優(yōu)化所需的功能。調(diào)整引導(dǎo)加載程序以獲得最快的性能。
U-Boot是事實(shí)上的嵌入式bootloader標(biāo)準(zhǔn),對于U-Boot而言,以下一些功能在產(chǎn)品中可能不需要:
在include / configs / 《soc》-《board》 .h中禁用盡可能多的功能
示例:MMC,USB,以太網(wǎng),dhcp,ping,命令行版本,命令完成提示。
較小且更簡單的U-Boot加載速度更快,初始化速度更快。
移除啟動延時(shí):
消除啟動延遲,這樣通??梢怨?jié)省幾秒鐘?。?/p>
setenv引導(dǎo)延遲0
在執(zhí)行此操作之前,請先使用
CONFIG_ZERO_BOOTDELAY_CHECK重新編譯U-Boot,
參考文檔在doc / README.autoboot中。即使啟動延遲設(shè)置為0,它也可以通過敲鍵來停止自動啟動過程。
2. 簡化腳本
有些情況,腳本很復(fù)雜,如:
在ARM9(400MHz)可節(jié)省大約56ms
3. 拷貝準(zhǔn)確大小的內(nèi)核
將內(nèi)核從ROM復(fù)制到RAM時(shí),仍然看到許多系統(tǒng)復(fù)制了太多無用字節(jié),而沒有考慮確切的內(nèi)核大小。
在U-Boot中,使用nboot命令:
nboot ramaddr 0 nandoffset
U-Boot使用存儲在uImage標(biāo)頭中的內(nèi)核大小信息來知道要復(fù)制多少字節(jié)。
4. 優(yōu)化內(nèi)核加載
將內(nèi)核uImage復(fù)制到RAM之后,U-Boot始終將其移動到uImage標(biāo)頭中指定的加載地址。還執(zhí)行CRC檢查。
可以通過將uImage直接加載到正確的地址來使U-Boot跳過memmove操作。
計(jì)算此地址:
Addr = Load Address - uImage header size
Addr = Load Address - (size(uImage) - size(zImage))
Addr = 0x20008000 - 0x40 = 0x20007fc0
在生產(chǎn)中時(shí)數(shù)據(jù)一般不會損壞將內(nèi)核復(fù)制到RAM時(shí),可以考慮禁用CRC檢查
禁用帶有U-boot環(huán)境變量的CRC檢查:
setenv verify no
關(guān)閉U-Boot控制臺輸出。需要使用以下命令編譯U-Boot
CONFIG_SILENT_CONSOLE和setenv silent yes.
有關(guān)詳細(xì)信息,請參見doc / README.silent。
5. 跳過bootloader直接啟動內(nèi)核
原理:立即加載內(nèi)核,而不是先加載引導(dǎo)加載程序,再加載內(nèi)核!
例如在Microchip AT91上,使用at91bootstrap v3即可輕松實(shí)現(xiàn)。
您只需要使用linux或linux_dt配置之一進(jìn)行配置:
make at91sama5d3xeknf_linux_dt_defconfig
make
對于 U-Boot Falcon 模式:
U-Boot分為兩部分:SPL(二級程序加載程序)和U-Boot映像。 然后,U-Boot可以配置SPL來直接加載Linux內(nèi)核,而不是U-Boot映像。
有關(guān)詳細(xì)信息,請參見doc / README.falcon和
http://schedule2012.rmll.info/IMG/pdf/LSM2012_UbootFalconMode_Babic.pdf進(jìn)行原始演示。
所有支持SPL的U-Boot板上均以相同的方式支持此功能。
編輯連載推薦:嵌入式Linux啟動時(shí)間優(yōu)化的秘密之一工具鏈/應(yīng)用程序優(yōu)化
編輯連載推薦:嵌入式Linux啟動時(shí)間優(yōu)化的秘密之二文件系統(tǒng)
評論
查看更多