專(zhuān)利名稱(chēng):一種加快嵌入式Linux系統(tǒng)啟動(dòng)的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,具體涉及一種加快嵌入式Linux系統(tǒng)啟動(dòng)的方法。
背景技術(shù):
Linux系統(tǒng)以其開(kāi)源的特性得到了廣泛的應(yīng)用,在嵌入式系統(tǒng)編程中也占有越來(lái) 越大的份量。Linux系統(tǒng)安全可靠、內(nèi)核可定制、源代碼開(kāi)放等這些都其優(yōu)點(diǎn),但Linux系統(tǒng)也 有不足之處,比如實(shí)時(shí)性不好,比如啟動(dòng)時(shí)間過(guò)長(zhǎng)等。嵌入式Linux要求定制的Linux快速、輕巧,而越來(lái)越多的服務(wù)應(yīng)用導(dǎo)致嵌入式 Linux系統(tǒng)啟動(dòng)和運(yùn)行變得越來(lái)越緩慢,很多Linux廠商都發(fā)行了加快Linux啟動(dòng)的優(yōu)化版 本,但是針對(duì)嵌入式Linux系統(tǒng)的啟動(dòng)優(yōu)化還未成熟。嵌入式Linux系統(tǒng)應(yīng)用環(huán)境復(fù)雜,各個(gè)版本的嵌入式Linux系統(tǒng)安裝的服務(wù)應(yīng)用 大都不同,需要尋找一種通用的優(yōu)化啟動(dòng)的方法。
發(fā)明內(nèi)容
本發(fā)明提供一種通用的加快嵌入式Linux系統(tǒng)啟動(dòng)的方法,能夠?yàn)榍度胧较到y(tǒng)提 供快速啟動(dòng)的能力。為了實(shí)現(xiàn)發(fā)明目的,本發(fā)明實(shí)施例公開(kāi)了一種加快嵌入式Linux系統(tǒng)啟動(dòng)的方 法,其特征在于,包括登錄嵌入式Linux系統(tǒng);基于嵌入式Linux系統(tǒng)優(yōu)化內(nèi)核處理速度;對(duì)Linux系統(tǒng)中的啟動(dòng)過(guò)程進(jìn)行跟蹤和分析,得到Linux啟動(dòng)時(shí)間消耗的詳細(xì)報(bào)
生 P=I ;根據(jù)Linux啟動(dòng)時(shí)間消耗的詳細(xì)報(bào)告優(yōu)化Linux系統(tǒng)中的進(jìn)程。所述基于嵌入式Linux系統(tǒng)優(yōu)化內(nèi)核處理速度包括優(yōu)化FLASH讀取內(nèi)核的速度,根據(jù)自己使用的Flash的用戶手冊(cè),修改其參數(shù)配 置,使其讀寫(xiě)速度盡可能的達(dá)到最快;裁剪內(nèi)核,減小內(nèi)核體積;把內(nèi)核中一些模塊直接編譯成模塊的方式;屏蔽掉printk函數(shù)的輸出;加快裝載根文件系統(tǒng)和主應(yīng)用程序到內(nèi)存中,根文件系統(tǒng)的格式采用cramfs格 式并用動(dòng)態(tài)庫(kù)代替靜態(tài)庫(kù)來(lái)縮小主應(yīng)用程序的體積;加快啟動(dòng)腳本的運(yùn)行,把該啟動(dòng)腳本中的任務(wù)最大限度的刪減,把所有無(wú)關(guān)的任 務(wù)都去掉。所述對(duì)Linux系統(tǒng)中的啟動(dòng)過(guò)程進(jìn)行跟蹤和分析,得到Linux啟動(dòng)時(shí)間消耗的詳 細(xì)報(bào)告包括
開(kāi)啟Linux Kernel PrintkTime 功能在 Linux 系統(tǒng)中提供 I^rintkTime 功能為啟 動(dòng)過(guò)程的所有內(nèi)核信息增加時(shí)間戳;對(duì)Linux啟動(dòng)過(guò)程的跟蹤和分析,生成詳細(xì)的啟動(dòng)時(shí)間報(bào)告。所述對(duì)根據(jù)Linux啟動(dòng)時(shí)間消耗的詳細(xì)報(bào)告優(yōu)化Linux系統(tǒng)中的進(jìn)程包括通過(guò)屏蔽啟動(dòng)過(guò)程中所進(jìn)行的RTC時(shí)鐘同步或者將這一過(guò)程放到啟動(dòng)后進(jìn)行;或 者通過(guò)在啟動(dòng)參數(shù)中強(qiáng)制指定LPJ值而跳過(guò)實(shí)際的計(jì)算過(guò)程。本發(fā)明具有以下優(yōu)點(diǎn)上述技術(shù)方案可以看出,本發(fā)明具有以下有益效果本發(fā) 明可以加快嵌入式Linux系統(tǒng)的啟動(dòng)速度。本發(fā)明提供的是一種通用的方法,能為不同的 嵌入式Linux系統(tǒng)提供啟動(dòng)優(yōu)化的方法。
為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本 發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可 以根據(jù)這些附圖獲得其他的附圖。圖1為本發(fā)明實(shí)施例中的Linux系統(tǒng)結(jié)構(gòu)示意圖;圖2是本發(fā)明實(shí)施例中的加快嵌入式Linux系統(tǒng)啟動(dòng)的方法流程圖;圖3是本發(fā)明實(shí)施例中的嵌入式Linux系統(tǒng)一般性啟動(dòng)優(yōu)化方法流程圖;圖4是本發(fā)明實(shí)施例中的嵌入式Linux系統(tǒng)特殊性啟動(dòng)優(yōu)化方法流程圖。
具體實(shí)施例方式下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完 整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;?本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其它 實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。本發(fā)明實(shí)施例提供一種通用的加快嵌入式Linux系統(tǒng)啟動(dòng)的方法,能夠?yàn)榍度胧?Linux系統(tǒng)提供快速啟動(dòng)的能力,其主要包括登錄嵌入式Linux系統(tǒng);基于嵌入式Linux 系統(tǒng)優(yōu)化內(nèi)核處理速度;對(duì)Linux系統(tǒng)中的啟動(dòng)過(guò)程進(jìn)行跟蹤和分析,得到Linux啟動(dòng)時(shí)間 消耗的詳細(xì)報(bào)告;根據(jù)Linux啟動(dòng)時(shí)間消耗的詳細(xì)報(bào)告優(yōu)化Linux系統(tǒng)中的進(jìn)程以下分別 進(jìn)行詳細(xì)說(shuō)明。如圖1所示,其為本發(fā)明實(shí)施例中的Linux系統(tǒng)結(jié)構(gòu)示意圖,本發(fā)明主要包括以下 單元嵌入式Linux系統(tǒng)一般性啟動(dòng)優(yōu)化平臺(tái)單元、嵌入式Linux系統(tǒng)特殊性啟動(dòng)優(yōu)化平臺(tái)單元。所述嵌入式Linux系統(tǒng)一般性啟動(dòng)優(yōu)化平臺(tái)為嵌入式Linux系統(tǒng)提供通用的啟動(dòng) 優(yōu)化方案。所述嵌入式Linux系統(tǒng)特殊性啟動(dòng)優(yōu)化平臺(tái)為嵌入式Linux系統(tǒng)的不同服務(wù)提供 針對(duì)性的優(yōu)化方案。圖2為本發(fā)明實(shí)施例中的加快嵌入式Linux系統(tǒng)啟動(dòng)的方法流程圖,包括步驟
步驟1 獲取嵌入式Linux系統(tǒng)。步驟2 建立嵌入式Linux系統(tǒng)一般性啟動(dòng)優(yōu)化平臺(tái)。步驟3 根據(jù)嵌入式Linux系統(tǒng)的不同性建立特殊性啟動(dòng)優(yōu)化平臺(tái)。圖3為嵌入式Linux系統(tǒng)一般性啟動(dòng)優(yōu)化方法流程圖,包括如下 盡管嵌入式Linux系統(tǒng)各不相同,但是啟動(dòng)流程還是一樣的,嵌入式Linux系統(tǒng)一 般性啟動(dòng)優(yōu)化平臺(tái)為不同的嵌入式Linux系統(tǒng)提供了相同的啟動(dòng)優(yōu)化。嵌入式Linux系統(tǒng) 啟動(dòng)流程如下從Flash讀取內(nèi)核到內(nèi)存、在內(nèi)存解壓并運(yùn)行內(nèi)核、加載根文件系統(tǒng)及應(yīng)用 程序鏡像到內(nèi)存、運(yùn)行根文件系統(tǒng)啟動(dòng)腳本運(yùn)行主程序、啟動(dòng)完成。加快嵌入式Linux的啟 動(dòng)就是要對(duì)啟動(dòng)步驟進(jìn)行優(yōu)化。步驟21 優(yōu)化FLASH讀取內(nèi)核的速度,根據(jù)自己使用的Flash的用戶手冊(cè),修改其 參數(shù)配置,使其讀寫(xiě)速度盡可能的達(dá)到最快。步驟22 裁剪內(nèi)核,減小內(nèi)核體積。在編譯內(nèi)核時(shí)去掉不需要的硬件驅(qū)動(dòng)、文件系 統(tǒng)、調(diào)試信息,使內(nèi)核盡可能地達(dá)到最小。比如可以去掉內(nèi)核對(duì)鍵盤(pán)、鼠標(biāo)等硬件的支持,去 掉RomFs、RamDisk等文件系統(tǒng)的支持。內(nèi)核中的文件系統(tǒng)占了相當(dāng)大的部分,因此應(yīng)盡量 去掉那些根本不需要文件系統(tǒng)。步驟23 把內(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)之后再加載這些模塊即可。步驟M 為加快在內(nèi)存中運(yùn)行內(nèi)核的速度,屏蔽掉printk函數(shù)的輸出,去掉了在 運(yùn)行內(nèi)核時(shí)的所有的調(diào)試輸出信息,這樣也能縮短解壓并運(yùn)行內(nèi)核的時(shí)間。步驟25 為加快裝載根文件系統(tǒng)和主應(yīng)用程序到內(nèi)存中,根文件系統(tǒng)的格式采用 cramfs格式并用動(dòng)態(tài)庫(kù)代替靜態(tài)庫(kù)來(lái)縮小主應(yīng)用程序的體積。步驟沈加快啟動(dòng)腳本的運(yùn)行,可以把該啟動(dòng)腳本中的任務(wù)最大限度的刪減,把 所有無(wú)關(guān)的任務(wù)都去掉;另外還把一些能并行啟動(dòng)的任務(wù)都做成并行執(zhí)行,這樣就加快了 加載系統(tǒng)中各任務(wù)的速度。圖4為本發(fā)明實(shí)施例中的嵌入式Linux系統(tǒng)特殊性啟動(dòng)優(yōu)化方法流程圖,包括如 下由于嵌入式Linux系統(tǒng)啟動(dòng)的服務(wù)并不完全相同,需要對(duì)啟動(dòng)的服務(wù)進(jìn)行分析, 為每個(gè)服務(wù)制定好優(yōu)化策略。步驟31 開(kāi)啟 Linux Kernel PrintkTime 功能在 Linux Kernel 2. 6. 11 版本及更 高級(jí)的版本中提供了 I^rintkTime功能為啟動(dòng)過(guò)程的所有內(nèi)核信息增加時(shí)間戳,如果低級(jí) 的Linux Kernel版本可以采取補(bǔ)丁的方式加入I^rintkTime功能。開(kāi)啟I^rintkTime功能 只需在內(nèi)核啟動(dòng)參數(shù)中增加“time”即可。步驟32 對(duì)Linux啟動(dòng)過(guò)程的跟蹤和分析,生成詳細(xì)的啟動(dòng)時(shí)間報(bào)告。完成步驟 21的配置后,重啟Linux,然后通過(guò)以下命令將內(nèi)核啟動(dòng)信息輸出到文件dmeSg-S 131072 > ktime,然后利用一個(gè)腳本“show_delta” (位于Linux源碼的scripts文件夾下)將上 述輸出的文件轉(zhuǎn)換為時(shí)間增量顯示格式/usr/src/linux-x. xx. xx/scripts/show_delta ktime > dtime。這樣就得到了一份關(guān)于Linux啟動(dòng)時(shí)間消耗的詳細(xì)報(bào)告。
步驟33 通過(guò)步驟32生成的啟動(dòng)時(shí)間報(bào)告,找出啟動(dòng)中相對(duì)耗時(shí)的過(guò)程。生成的 報(bào)告大致如下內(nèi)核啟動(dòng)總時(shí)間6. 188s關(guān)鍵的耗時(shí)部分1) 0. 652s-Timer, IRQ, Cache, Mem Pages 等核心部分的初始化2)0. 611s-內(nèi)核與RTC時(shí)鐘同步3)0. 328s-計(jì)算 Calibrating Delay (4 個(gè) CPU 核心的總消耗)4) 0. 144s-校準(zhǔn) APIC 時(shí)鐘5) 0. 312s-校準(zhǔn) Migration Cost6)3. 520s-Intel ElOOO 網(wǎng)卡初始化內(nèi)核關(guān)鍵部分(Timer、IRQ, Cache、Mem Pages......)的初始化目前暫時(shí)沒(méi)有比
較可靠和可行的優(yōu)化方案,可以先不考慮。第二項(xiàng)可以采用RTCNoSync方案,通過(guò)屏蔽啟動(dòng)過(guò)程中所進(jìn)行的RTC時(shí)鐘同步或 者將這一過(guò)程放到啟動(dòng)后進(jìn)行。第三項(xiàng)可以采用ft~esetLPJ方案,通過(guò)在啟動(dòng)參數(shù)中強(qiáng)制指定LPJ值而跳過(guò)實(shí)際 的計(jì)算過(guò)程,這是基于LPJ值在硬件條件不變的情況下不會(huì)變化的考慮。所以在正常啟動(dòng) 后記錄下內(nèi)核信息中的“Calibrating Delay”數(shù)值后就可以在啟動(dòng)參數(shù)中以下面的形式強(qiáng) 制指定 LPJ 值了 =Ipj = 9600700。其他的項(xiàng)可以根據(jù)不同的優(yōu)化方案進(jìn)行優(yōu)化,這里不詳細(xì)討論。以上對(duì)本發(fā)明實(shí)施例所提供的一種加快嵌入式Linux系統(tǒng)啟動(dòng)的方法進(jìn)行了詳 細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說(shuō) 明只是用于幫助理解本發(fā)明的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù) 本發(fā)明的思想,在具體實(shí)施方式
及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說(shuō)明書(shū)內(nèi)容不 應(yīng)理解為對(duì)本發(fā)明的限制。
權(quán)利要求
1.一種加快嵌入式Linux系統(tǒng)啟動(dòng)的方法,其特征在于,包括 登錄嵌入式Linux系統(tǒng);基于嵌入式Linux系統(tǒng)優(yōu)化內(nèi)核處理速度;對(duì)Linux系統(tǒng)中的啟動(dòng)過(guò)程進(jìn)行跟蹤和分析,得到Linux啟動(dòng)時(shí)間消耗的詳細(xì)報(bào)告; 根據(jù)Linux啟動(dòng)時(shí)間消耗的詳細(xì)報(bào)告優(yōu)化Linux系統(tǒng)中的進(jìn)程。
2.如權(quán)利要求1所述的加快嵌入式Linux系統(tǒng)啟動(dòng)的方法,其特征在于,所述基于嵌入 式Linux系統(tǒng)優(yōu)化內(nèi)核處理速度包括優(yōu)化FLASH讀取內(nèi)核的速度,根據(jù)自己使用的Flash的用戶手冊(cè),修改其參數(shù)配置,使 其讀寫(xiě)速度盡可能的達(dá)到最快; 裁剪內(nèi)核,減小內(nèi)核體積; 把內(nèi)核中一些模塊直接編譯成模塊的方式; 屏蔽掉printk函數(shù)的輸出;加快裝載根文件系統(tǒng)和主應(yīng)用程序到內(nèi)存中,根文件系統(tǒng)的格式采用cramfs格式并 用動(dòng)態(tài)庫(kù)代替靜態(tài)庫(kù)來(lái)縮小主應(yīng)用程序的體積;加快啟動(dòng)腳本的運(yùn)行,把該啟動(dòng)腳本中的任務(wù)最大限度的刪減,把所有無(wú)關(guān)的任務(wù)都去掉。
3.如權(quán)利要求1所述的加快嵌入式Linux系統(tǒng)啟動(dòng)的方法,其特征在于,所述對(duì)Linux 系統(tǒng)中的啟動(dòng)過(guò)程進(jìn)行跟蹤和分析,得到Linux啟動(dòng)時(shí)間消耗的詳細(xì)報(bào)告包括開(kāi)啟Linux Kernel I^rintkTime功能在Linux系統(tǒng)中提供I^rintkTime功能為啟動(dòng)過(guò) 程的所有內(nèi)核信息增加時(shí)間戳;對(duì)Linux啟動(dòng)過(guò)程的跟蹤和分析,生成詳細(xì)的啟動(dòng)時(shí)間報(bào)告。
4.如權(quán)利要求1所述的加快嵌入式Linux系統(tǒng)啟動(dòng)的方法,其特征在于,所述對(duì)根據(jù) Linux啟動(dòng)時(shí)間消耗的詳細(xì)報(bào)告優(yōu)化Linux系統(tǒng)中的進(jìn)程包括通過(guò)屏蔽啟動(dòng)過(guò)程中所進(jìn)行的RTC時(shí)鐘同步或者將這一過(guò)程放到啟動(dòng)后進(jìn)行;或者 通過(guò)在啟動(dòng)參數(shù)中強(qiáng)制指定LPJ值而跳過(guò)實(shí)際的計(jì)算過(guò)程。
全文摘要
本發(fā)明實(shí)施例公開(kāi)了一種加快嵌入式Linux系統(tǒng)啟動(dòng)的方法,包括登錄嵌入式Linux系統(tǒng);基于嵌入式Linux系統(tǒng)優(yōu)化內(nèi)核處理速度;對(duì)Linux系統(tǒng)中的啟動(dòng)過(guò)程進(jìn)行跟蹤和分析,得到Linux啟動(dòng)時(shí)間消耗的詳細(xì)報(bào)告;根據(jù)Linux啟動(dòng)時(shí)間消耗的詳細(xì)報(bào)告優(yōu)化Linux系統(tǒng)中的進(jìn)程。通過(guò)實(shí)施本發(fā)明,本發(fā)明可以加快嵌入式Linux系統(tǒng)的啟動(dòng)速度。本發(fā)明提供的是一種通用的方法,能為不同的嵌入式Linux系統(tǒng)提供啟動(dòng)優(yōu)化的方法。
文檔編號(hào)G06F11/34GK102096591SQ201110049618
公開(kāi)日2011年6月15日 申請(qǐng)日期2011年3月1日 優(yōu)先權(quán)日2011年3月1日
發(fā)明者馮枝偉, 莊敬暉, 殷偉 申請(qǐng)人:云浮南風(fēng)數(shù)字科技有限公司