国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁技術(shù)文章
文章詳情頁

怎樣在1秒內(nèi)啟動Linux

瀏覽:3日期:2024-04-18 15:50:04

盡可能快的啟動系統(tǒng),對于自動化設(shè)備是非常重要的。系統(tǒng)能夠在用戶無法感知的時間內(nèi)啟動,也就意味著在不需要工作時,可以完全切斷電源,而不是掛起進入休眠狀態(tài)。本文基于Atmel AT91系列片上系統(tǒng)和NAND閃存,經(jīng)過一系列的優(yōu)化,將Linux系統(tǒng)啟動時間,從最初的11秒,降低到最終的656毫秒。

怎樣在1秒內(nèi)啟動Linux

背景知識

系統(tǒng)從上電到完全啟動,需要經(jīng)過許多過程。一個簡化的啟動流程大概包含:

硬件重置啟動引導(dǎo)程序(bootloader)操作系統(tǒng)初始化應(yīng)用程序執(zhí)行

其中硬件非常關(guān)鍵,但是硬件一般難以更改。后續(xù)的優(yōu)化,主要針對引導(dǎo)程序、Linux內(nèi)核和應(yīng)用程序展開。

引導(dǎo)程序優(yōu)化

引導(dǎo)程序主要完成對CPU的基礎(chǔ)設(shè)置,處理ARM標記(ATAGS,ARM TAGS)或設(shè)備樹(device trees),切換存儲管理單元(MMU,Memory Management Unit)等工作。

對于U-Boot,常用的優(yōu)化方式有:

刪除不不要的功能:如網(wǎng)絡(luò)加載等,如果不需要,那么直接移除這些代碼吧;關(guān)閉不需要的功能關(guān)閉內(nèi)核鏡像驗證關(guān)閉引導(dǎo)程序輸出關(guān)閉啟動延遲將通用功能的引導(dǎo)程序修改成一個優(yōu)化后的初始程序加載器(Initial Program Loader,IPL),對于U-Boot,可以通過SPL(Second Program Loader,第二階段程序加載器)來實現(xiàn)。內(nèi)核優(yōu)化

Linux內(nèi)核被設(shè)計的非常靈活,可以針對需要的功能做各種配置優(yōu)化。因此,優(yōu)化內(nèi)核對于系統(tǒng)啟動速度是至關(guān)重要的。

首先,移除一切不要的驅(qū)動,盡可能的減少內(nèi)核加載的內(nèi)容,能夠大大縮短系統(tǒng)啟動時間。其次,還有很多內(nèi)核選擇可能需要進一步嘗試,比如內(nèi)核壓縮方式,對于嵌入式系統(tǒng)來說,LZO壓縮方式,通常會是一個不錯的選擇。最后,還可以通過定制一些啟動參數(shù),達到加快啟動的目的。例如可以通過“lpj=”參數(shù),預(yù)設(shè)每個循環(huán)需要的節(jié)拍數(shù)(loops per jiffy,lpj)的值,避免系統(tǒng)在啟動時自動推算。這樣在基于ARMv5的系統(tǒng)中,可以節(jié)省100ms以上的時間。

對于內(nèi)核啟動的優(yōu)化,可以通過bootgraph.pl腳本(位于內(nèi)核源碼的script/bootgraph.pl)來繪制內(nèi)核啟動耗時圖表,用以分析啟動最耗時的地方。這個腳本使用非常簡單,直接將dmesg的輸出作為其輸入,即可生成svg圖表:

dmesg | perl scripts/bootgraph.pl > output.svg

生成的圖表如下圖,

怎樣在1秒內(nèi)啟動Linux

圖中每一個色段表示一個功能的初始化耗時。可以簡單的關(guān)閉不需要的功能,或者針對功能進行特定的優(yōu)化。

除了內(nèi)核本身之外,內(nèi)核所在的文件系統(tǒng)也對系統(tǒng)啟動有著非常大的影響。對于使用閃存芯片作為存儲的系統(tǒng)來說,UbiFS是一個很好的選擇。它能夠容忍意外斷電,有著出色的掛載速度,以確保系統(tǒng)快速啟動。

應(yīng)用程序優(yōu)化

內(nèi)核完成系統(tǒng)啟動之后,接來下就是執(zhí)行應(yīng)用程序。對于應(yīng)用程序的優(yōu)化,主要有兩部分,一部分是由應(yīng)用程序來接管啟動的INIT進程,另一部分是優(yōu)化應(yīng)用程序的鏈接方式。

標準的SystemV INIT程序,需要執(zhí)行一堆啟動腳本。對于嵌入式系統(tǒng)來說,大部分是沒有意義的。另一部分(比如掛載文件系統(tǒng)),可以由應(yīng)用程序自己來實現(xiàn)。然后,可以在內(nèi)核啟動參數(shù)中通過“init=”參數(shù),將INIT進程直接指定為應(yīng)用程序。

應(yīng)用依賴的動態(tài)鏈接庫,會按照以下順序查找:

LD_PRELOAD環(huán)境變量指定的路徑(一般對應(yīng)文件/etc/ld.so.preload);ELF .dynamic節(jié)中DT_RPATH入口指定的路徑,若DT_RUNPATH入口不存在的話;環(huán)境變量LD_LIBRARY_PATH指定的路徑,但如果可執(zhí)行文件有setuid/setgid權(quán)限,則忽略這個路徑;編譯時指定--library-path會覆蓋這個路徑;ELF .dynamic節(jié)中DT_RUNPATH入口指定的路徑;ldconfig緩存中的路徑(一般對應(yīng)/etc/ld.so.cache文件),若編譯時使用了-z nodeflib的鏈接選項,則此步跳過;/lib,然后/usr/lib路徑 ,若使用了-z nodeflib鏈接選項,則此步亦跳過;

因此,盡可能的將應(yīng)用程序依賴的動態(tài)鏈接庫放到優(yōu)先查找的路徑,可以加快鏈接速度。對于交叉編譯環(huán)境特別需要注意,主機上的動態(tài)鏈接庫位置和目標系統(tǒng)上的位置可能不一致,這會增加應(yīng)用程序執(zhí)行時動態(tài)鏈接庫的加載時間。

總結(jié)

基于上面提到的三個優(yōu)化點,可以將系統(tǒng)的啟動時間,從最初的11s降低到656ms(數(shù)據(jù)參考Jan Altenberg在都柏林舉行的嵌入式Linux會議上的演講稿)。從硬件到引導(dǎo)程序再到內(nèi)核最后到應(yīng)用程序,每個啟動步驟都有自己可優(yōu)化的地方,經(jīng)過一些簡單的優(yōu)化,就可以減少系統(tǒng)的啟動時間。

標簽: Linux系統(tǒng)
相關(guān)文章:
主站蜘蛛池模板: 延津县| 宁陕县| 绥中县| 遂川县| 舒城县| 雷州市| 玛曲县| 通道| 墨竹工卡县| 德清县| 山丹县| 马尔康县| 桃源县| 朝阳市| 江山市| 湖北省| 松滋市| 富裕县| 罗甸县| 临湘市| 邵阳市| 利辛县| 蒙阴县| 安溪县| 南投县| 海林市| 通道| 阿瓦提县| 板桥市| 冀州市| 新源县| 延川县| 荔波县| 长春市| 怀安县| 公主岭市| 汨罗市| 桑植县| 灵川县| 稷山县| 新晃|