濮阳杆衣贸易有限公司

主頁 > 知識(shí)庫 > 1 秒內(nèi)啟動(dòng)Linux的方法

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

熱門標(biāo)簽:外呼電話系統(tǒng)怎么操作 測繪地圖標(biāo)注名稱 鶴崗400電話申請 智能電銷機(jī)器人有用嗎 德陽400電話申請 怎么在百度地圖標(biāo)注公司的位置 百度地圖標(biāo)注直線距離 天津電話外呼系統(tǒng)排名 商機(jī)地圖標(biāo)注

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

背景知識(shí)

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

硬件重置
啟動(dò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標(biāo)記(ATAGS,ARM TAGS)或設(shè)備樹(device trees),切換存儲(chǔ)管理單元(MMU,Memory Management Unit)等工作。

對于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),對于U-Boot,可以通過SPL(Second Program Loader,第二階段程序加載器)來實(shí)現(xiàn)。

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

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

首先,移除一切不要的驅(qū)動(dòng),盡可能的減少內(nèi)核加載的內(nèi)容,能夠大大縮短系統(tǒng)啟動(dòng)時(shí)間。其次,還有很多內(nèi)核選擇可能需要進(jìn)一步嘗試,比如內(nèi)核壓縮方 式,對于嵌入式系統(tǒng)來說,LZO壓縮方式,通常會(huì)是一個(gè)不錯(cuò)的選擇。最后,還可以通過定制一些啟動(dòng)參數(shù),達(dá)到加快啟動(dòng)的目的。例如可以通過“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í)間。

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

復(fù)制代碼 代碼如下:

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

生成的圖表如下圖,

圖中每一個(gè)色段表示一個(gè)功能的初始化耗時(shí)??梢院唵蔚年P(guān)閉不需要的功能,或者針對功能進(jìn)行特定的優(yōu)化。

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

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

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

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

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

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)限,則忽略這個(gè)路徑;編譯時(shí)指定--library-path會(huì)覆蓋這個(gè)路徑;

ELF .dynamic節(jié)中DT_RUNPATH入口指定的路徑;
ldconfig緩存中的路徑(一般對應(yīng)/etc/ld.so.cache文件),若編譯時(shí)使用了-z nodeflib的鏈接選項(xiàng),則此步跳過;
/lib,然后/usr/lib路徑 ,若使用了-z nodeflib鏈接選項(xiàng),則此步亦跳過;

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

總結(jié)

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

ps:linux下啟動(dòng)和關(guān)閉網(wǎng)卡命令

ifup、ifdown:linux命令   
實(shí)時(shí)地手動(dòng)修改一些網(wǎng)絡(luò)接口參數(shù),可以利用ifconfig來實(shí)現(xiàn),如果是要直接以配置文件,亦即是在 /etc/sysconfig/network-scripts里面的ifcfg-ethx等文件的設(shè)置參數(shù)來啟動(dòng)的話,那就得要通過ifdown或ifup來實(shí)現(xiàn)了。   

復(fù)制代碼 代碼如下:

[root@linux ~]# ifup {interface}
[root@linux ~]# ifdown {interface}
[root@linux ~]# ifup eth0  
 

ifup與ifdown真是太簡單了。這兩個(gè)程序其實(shí)是script而已,它會(huì)直接到 /etc/ sysconfig/network-scripts目錄下搜索對應(yīng)的配置文件,例如ifup eth0,它會(huì)找出ifcfg-eth0這個(gè)文件的內(nèi)容,然后加以設(shè)置。關(guān)于ifcfg-eth0的設(shè)置請參考前一章連上Internet的說明。

  不過,由于這兩個(gè)程序主要是搜索設(shè)置文件(ifcfg-ethx)來進(jìn)行啟動(dòng)與關(guān)閉的,所以在使用前請確定ifcfg-ethx是否真的存在于正確的目錄內(nèi),否則會(huì)啟動(dòng)失敗。另外,如果以ifconfig eth0來設(shè)置或者是修改了網(wǎng)絡(luò)接口后,就無法再以ifdown eth0的方式來關(guān)閉了。因?yàn)閕fdown會(huì)分析比較目前的網(wǎng)絡(luò)參數(shù)與ifcfg-eth0是否相符,不符的話,就會(huì)放棄這次操作。因此,使用ifconfig修改完畢后,應(yīng)該要以ifconfig eth0 down才能夠關(guān)閉該接口。

如何讓LINUX網(wǎng)卡開機(jī)自動(dòng)啟動(dòng)

激活網(wǎng)卡的命令是:ifconfig eth0 up你既然知道了命令,自己做一個(gè)腳本,放在啟動(dòng)項(xiàng)目就可以了。

建議通過編輯網(wǎng)卡配置文件修改網(wǎng)卡配置文件保存在/etc/sysconfig/network-scripts目錄下面,第一塊網(wǎng)卡的文件是ifcfg-eth0,第二塊是ifcfg-eth1,以此類推,所以,如果如果你有一塊,那么你就輸入一下命令vi  /etc/sysconfig/network-scripts/ifcfg-eth0,打開之后,將ONBOOT=no,改為ONBOOT=yes,(如果沒有,手動(dòng)添加ONBOOT=yes),保存退出,重啟服務(wù)。

復(fù)制代碼 代碼如下:

echo "ONBOOT=yes" >> /etc/sysconfig/network-script/ifcfg-eth0

在/etc/sysconfig/network-scripts中添加ONBOOT=yes設(shè)置網(wǎng)絡(luò)開機(jī)自動(dòng)啟動(dòng)

以上內(nèi)容是大家介紹了1秒內(nèi)啟動(dòng)linux的方法,對啟動(dòng)linux相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧。

您可能感興趣的文章:
  • Linux下的Oracle啟動(dòng)腳本及其開機(jī)自啟動(dòng)
  • 程序中獲取linux系統(tǒng)啟動(dòng)時(shí)間方法
  • linux啟動(dòng)級別的含義(init 0-6)
  • linux停止和查看啟動(dòng)服務(wù)的命令使用方法
  • linux設(shè)置tomcat自啟動(dòng)的方法
  • 在Linux上用forever實(shí)現(xiàn)Node.js項(xiàng)目自啟動(dòng)
  • Linux下啟動(dòng)多個(gè)mysql服務(wù)器例子
  • Linux下php5.4啟動(dòng)腳本
  • Linux小技巧分享之如何重新啟動(dòng)tomcat

標(biāo)簽:優(yōu)質(zhì)小號(hào) 百色 丹東 六盤水 鎮(zhèn)江 自貢 武漢 滁州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《1 秒內(nèi)啟動(dòng)Linux的方法》,本文關(guān)鍵詞  秒內(nèi),啟動(dòng),Linux,的,方法,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《1 秒內(nèi)啟動(dòng)Linux的方法》相關(guān)的同類信息!
  • 本頁收集關(guān)于1 秒內(nèi)啟動(dòng)Linux的方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    南昌市| 乐东| 德江县| 丰宁| 麦盖提县| 周至县| 钟山县| 新宁县| 宝应县| 汾西县| 布拖县| 绿春县| 来安县| 新河县| 阿尔山市| 新源县| 永济市| 安乡县| 乐安县| 若尔盖县| 东乡族自治县| 玉溪市| 大埔县| 石柱| 云南省| 弥渡县| 堆龙德庆县| 高平市| 昭苏县| 庆城县| 桐梓县| 旌德县| 疏附县| 水城县| 长岭县| 奎屯市| 江西省| 乌鲁木齐市| 苏州市| 永春县| 遂溪县|