国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Linux > 正文

1 秒內(nèi)啟動(dòng)Linux的方法

2024-08-28 00:02:28
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

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

背景知識(shí)

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

硬件重置
啟動(dòng)引導(dǎo)程序(bootloader)
操作系統(tǒng)初始化
應(yīng)用程序執(zhí)行
其中硬件非常關(guān)鍵,但是硬件一般難以更改。后續(xù)的優(yōu)化,主要針對(duì)引導(dǎo)程序、Linux內(nèi)核和應(yīng)用程序展開(kāi)。

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

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

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

刪除不不要的功能:如網(wǎng)絡(luò)加載等,如果不需要,那么直接移除這些代碼吧;
關(guān)閉不需要的功能
關(guān)閉內(nèi)核鏡像驗(yàn)證
關(guān)閉引導(dǎo)程序輸出
關(guān)閉啟動(dòng)延遲

將通用功能的引導(dǎo)程序修改成一個(gè)優(yōu)化后的初始程序加載器(Initial Program Loader,IPL),對(duì)于U-Boot,可以通過(guò)SPL(Second Program Loader,第二階段程序加載器)來(lái)實(shí)現(xiàn)。

內(nèi)核優(yōu)化

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

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

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

復(fù)制代碼 代碼如下:
dmesg | perl scripts/bootgraph.pl > output.svg

生成的圖表如下圖,

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

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

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

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

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

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

LD_PRELOAD環(huán)境變量指定的路徑(一般對(duì)應(yīng)文件/etc/ld.so.preload);
ELF .dynamic節(jié)中DT_RPATH入口指定的路徑,若DT_RUNPATH入口不存在的話;
環(huán)境變量LD_LIBRARY_PATH指定的路徑,但如果可執(zhí)行文件有setuid/setgid權(quán)限,則忽略這個(gè)路徑;編譯時(shí)指定--library-path會(huì)覆蓋這個(gè)路徑;

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 蒙城县| 高清| 连江县| 建平县| 高平市| 宁强县| 方山县| 云安县| 法库县| 甘孜县| 永年县| 寿光市| 黄平县| 北票市| 武义县| 清流县| 新平| 西乌| 怀化市| 晋宁县| 望城县| 晋宁县| 曲沃县| 克山县| 乳山市| 峨眉山市| 安仁县| 烟台市| 宜春市| 尉氏县| 门头沟区| 元阳县| 同仁县| 桃园市| 肇东市| 遵义市| 昌黎县| 开化县| 墨江| 黄大仙区| 吉木乃县|