本發(fā)明涉及嵌入式系統(tǒng)技術(shù)領(lǐng)域,尤其涉及一種linux車載信息系統(tǒng)快速啟動方法。
背景技術(shù):
隨著汽車技術(shù)的飛速發(fā)展,行業(yè)內(nèi)的競爭也越發(fā)激烈,除了成本價格的競爭之外,功能和性能的也是競爭的關(guān)鍵因素。在產(chǎn)品同質(zhì)化日益嚴(yán)重的情況下,車載產(chǎn)品的競爭開始轉(zhuǎn)移到性能的競爭上,尤其是對產(chǎn)品可靠性要求高的前裝車廠客戶,對產(chǎn)品的性能更為重視。
車載產(chǎn)品的性能表現(xiàn)在多個方面,目前行業(yè)比較關(guān)注的有:系統(tǒng)的啟動時間、快速倒車響應(yīng)時間等。其中,系統(tǒng)啟動時間一直被認(rèn)為是衡量系統(tǒng)優(yōu)化程度的一個標(biāo)志,體現(xiàn)了對操作系統(tǒng)掌控程度。
目前,linux操作系統(tǒng)以較低的成本但較高的安全性和可靠性、開源和廣泛的芯片廠商驅(qū)動支持受到各車載產(chǎn)品廠商的青睞,從而得到了非常廣闊的應(yīng)用。
然而,目前基于linux操作系統(tǒng)的車載產(chǎn)品普遍存在系統(tǒng)啟動時間較長的問題,一般在15秒左右,降低了用戶體驗。
因此,現(xiàn)有技術(shù)有待進(jìn)一步改進(jìn)。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供一種linux車載信息系統(tǒng)快速啟動方法,旨在解決現(xiàn)有技術(shù)中的缺陷,實(shí)現(xiàn)linux車載信息系統(tǒng)的快速啟動,提高用戶體驗。
為達(dá)到上述目的,本發(fā)明所采取的技術(shù)方案為:
本發(fā)明提供一種linux車載信息系統(tǒng)快速啟動方法,包括:
uboot優(yōu)化的步驟:根據(jù)第一預(yù)設(shè)優(yōu)化規(guī)則對uboot進(jìn)行優(yōu)化;
內(nèi)核優(yōu)化的步驟:根據(jù)第二優(yōu)化規(guī)則對內(nèi)核進(jìn)行優(yōu)化;
systemd優(yōu)化的步驟:根據(jù)第三優(yōu)化規(guī)則對systemd進(jìn)行優(yōu)化;
在systemd服務(wù)中啟動應(yīng)用管理進(jìn)程及依賴的底層服務(wù)的步驟:在systemd服務(wù)加載過程中,當(dāng)監(jiān)測到系統(tǒng)初始化和文件系統(tǒng)掛載服務(wù)已啟動完成,則啟動應(yīng)用管理進(jìn)程及依賴的底層服務(wù);
啟動關(guān)機(jī)前的應(yīng)用程序的步驟:所述應(yīng)用管理進(jìn)程讀取上一次關(guān)機(jī)前的應(yīng)用程序id,并啟動所述id對應(yīng)的應(yīng)用程序;
加載gui的步驟:所述應(yīng)用程序啟動完成后,加載gui進(jìn)行顯示;
啟動其它中間件的步驟:所述gui加載完成后,所述應(yīng)用管理進(jìn)程啟動除所述上一次關(guān)機(jī)前的應(yīng)用程序之外的應(yīng)用程序的中間件服務(wù)進(jìn)程及應(yīng)用服務(wù)進(jìn)程;
連接中間件的步驟:所述中間件服務(wù)進(jìn)程啟動完成后,所述應(yīng)用管理進(jìn)程通知所述應(yīng)用程序連接中間件服務(wù)進(jìn)程,獲取接口服務(wù)。
具體地,所述第一預(yù)設(shè)優(yōu)化規(guī)則包括:
預(yù)先配置uboot初始化模塊及環(huán)境變量;
根據(jù)配置后的uboot初始化模塊及環(huán)境變量生成啟動配置文件;
uboot根據(jù)所述啟動配置文件加載啟動文件。
進(jìn)一步地,所述第一預(yù)設(shè)優(yōu)化規(guī)則還包括:關(guān)閉啟動文件加載的日志打印。
具體地,所述第二預(yù)設(shè)優(yōu)化規(guī)則包括:
預(yù)先配置內(nèi)核驅(qū)動;
根據(jù)配置后的內(nèi)核驅(qū)動生成啟動驅(qū)動加載文件;
根據(jù)所述啟動驅(qū)動加載文件加載內(nèi)核。
進(jìn)一步地,第二預(yù)設(shè)優(yōu)化規(guī)則還包括:關(guān)閉內(nèi)核日志打印。
進(jìn)一步地,第二預(yù)設(shè)優(yōu)化規(guī)則還包括:關(guān)閉內(nèi)核驅(qū)動的延時。
具體地,所述第三預(yù)設(shè)優(yōu)化規(guī)則包括:
預(yù)先配置系統(tǒng)服務(wù);
根據(jù)配置后的系統(tǒng)服務(wù)生成系統(tǒng)服務(wù)加載文件;
根據(jù)所述系統(tǒng)服務(wù)加載文件加載系統(tǒng)服務(wù)。
進(jìn)一步地,所述第三預(yù)設(shè)優(yōu)化規(guī)則還包括:關(guān)閉系統(tǒng)服務(wù)延時。
進(jìn)一步地,所述第三預(yù)設(shè)優(yōu)化規(guī)則還包括:延時加載cpu資源占用率超過預(yù)設(shè)閾值的系統(tǒng)服務(wù)。
具體地,所述延時加載cpu資源占用率超過預(yù)設(shè)閾值的系統(tǒng)服務(wù)的步驟包括:
通過預(yù)設(shè)指令讀取各系統(tǒng)服務(wù)加載時的cpu資源占用率;
對cpu資源占用率超過超過預(yù)設(shè)閾值的系統(tǒng)服務(wù)延時到應(yīng)用程序啟動完成后加載。
本發(fā)明的有益效果在于:本發(fā)明通過對uboot、內(nèi)核、systemd進(jìn)行優(yōu)化,并將應(yīng)用管理進(jìn)程的啟動腳本嵌入到systemd中運(yùn)行,使應(yīng)用程序啟動的時間提前,大大縮短了應(yīng)用程序的啟動時間和gui顯示時間,最終實(shí)現(xiàn)了linux車載信息系統(tǒng)的快速啟動。
附圖說明
圖1是本發(fā)明的linux車載信息系統(tǒng)快速啟動方法的流程示意圖。
具體實(shí)施方式
下面結(jié)合附圖具體闡明本發(fā)明的實(shí)施方式,附圖僅供參考和說明使用,不構(gòu)成對本發(fā)明專利保護(hù)范圍的限制。
如圖1所示,本發(fā)明的實(shí)施例提供一種linux車載信息系統(tǒng)快速啟動方法,包括:
步驟1、uboot優(yōu)化的步驟:根據(jù)第一預(yù)設(shè)優(yōu)化規(guī)則對uboot進(jìn)行優(yōu)化。
所述第一預(yù)設(shè)優(yōu)化規(guī)則包括:
步驟101、預(yù)先配置uboot初始化模塊及環(huán)境變量;
步驟102、根據(jù)配置后的uboot初始化模塊及環(huán)境變量生成啟動配置文件;
步驟103、uboot根據(jù)所述啟動配置文件加載啟動文件。
系統(tǒng)上電執(zhí)行romcode后加載uboot到內(nèi)存。uboot首先執(zhí)行匯編指令硬件初始化,后跳轉(zhuǎn)到c中的main函數(shù),進(jìn)行第一階段相關(guān)硬件初始化和第二階段硬件初始化;最后運(yùn)行uboot命令參數(shù),加載kernel(內(nèi)核)和dtb到內(nèi)存,并最終跳轉(zhuǎn)到kernel內(nèi)存的起始地址。如果不進(jìn)行優(yōu)化,整個過程耗時在300ms以上。
bsp里面包含了各種驅(qū)動模塊和原始環(huán)境變量,例如板級初始化模塊、備份和恢復(fù)模塊,這就導(dǎo)致了uboot加載啟動文件的時間較長。例如,bsp自帶的備份和恢復(fù)模塊并不適合所有的產(chǎn)品,因此這個模塊會重復(fù)加載,增加了啟動文件加載的時間。而bsp提供的原始環(huán)境變量占用空間較大,也進(jìn)一步增加了啟動文件加載的時間。
通過對uboot初始化模塊及環(huán)境變量進(jìn)行配置,禁止無用的模塊和環(huán)境變量加載,簡化了uboot的加載量,從而減少了啟動文件的加載時間。
為進(jìn)一步減少啟動文件加載的時間,在步驟103之后還包括:
步驟104、關(guān)閉啟動文件加載的日志打印。
日志打印是通過printk函數(shù)來實(shí)現(xiàn)的,該函數(shù)在進(jìn)行字符拷貝時,一次只拷貝一個字節(jié),并且調(diào)用console命令輸出還可能產(chǎn)生中斷,不僅效率低,而且無用信息的輸出直接影響系統(tǒng)性能。因此,關(guān)閉內(nèi)核日志打印,可以進(jìn)一步減少內(nèi)核加載的時間。
步驟2、內(nèi)核優(yōu)化的步驟:根據(jù)第二優(yōu)化規(guī)則對內(nèi)核進(jìn)行優(yōu)化。
所述第二預(yù)設(shè)優(yōu)化規(guī)則包括:
步驟201、預(yù)先配置內(nèi)核驅(qū)動;
步驟202、根據(jù)配置后的內(nèi)核驅(qū)動生成啟動驅(qū)動加載文件;
步驟203、根據(jù)所述啟動驅(qū)動加載文件加載內(nèi)核。
在kernel階段,先解壓內(nèi)核到內(nèi)存,并重定位解壓后的內(nèi)核,對傳入uboot參數(shù)進(jìn)行id等檢查,設(shè)置kernel的c運(yùn)行環(huán)境,最后跳轉(zhuǎn)到start_kernel函數(shù),在此函數(shù)中運(yùn)行內(nèi)核初始化、加載驅(qū)動和文件系統(tǒng)加載。
linux內(nèi)核包含了各種驅(qū)動,例如硬盤驅(qū)動、網(wǎng)絡(luò)驅(qū)動、鍵盤鼠標(biāo)驅(qū)動等,而車載信息系統(tǒng)對這些驅(qū)動并無硬件支持,通過對這些無硬件支持的驅(qū)動進(jìn)行配置,禁止其加載,簡化了啟動驅(qū)動加載次數(shù),從而減少了內(nèi)核的加載時間。
為進(jìn)一步減少內(nèi)核加載的時間,在步驟203之后還包括:
步驟204、關(guān)閉內(nèi)核日志打印。
為進(jìn)一步減少內(nèi)核加載的時間,在步驟204之后還包括:
步驟205、關(guān)閉內(nèi)核驅(qū)動的延時。
內(nèi)核驅(qū)動的延時是為了保證硬件初始化的時序,在保證硬件的時序正確的前提下,減少或關(guān)閉驅(qū)動中的延時可以縮短啟動時間。
步驟3、systemd優(yōu)化的步驟:根據(jù)第三優(yōu)化規(guī)則對systemd進(jìn)行優(yōu)化。
所述第三預(yù)設(shè)優(yōu)化規(guī)則包括:
步驟301、預(yù)先配置系統(tǒng)服務(wù);
步驟302、根據(jù)配置后的系統(tǒng)服務(wù)生成系統(tǒng)服務(wù)加載文件;
步驟303、根據(jù)所述系統(tǒng)服務(wù)加載文件加載系統(tǒng)服務(wù)。
systemd是linux系統(tǒng)工具,用來啟動守護(hù)進(jìn)程。文件系統(tǒng)啟動第一個init進(jìn)程,并行啟動各種系統(tǒng)服務(wù)、掛載點(diǎn)、定時任務(wù)、系統(tǒng)設(shè)備和socket等。
linux包含了各種系統(tǒng)服務(wù),例如電源管理、ssh連接服務(wù)、硬件時間同步、系統(tǒng)優(yōu)化、用戶登錄管理等服務(wù),而車載信息系統(tǒng)對這些服務(wù)并無硬件支持,通過對這些無硬件支持的服務(wù)進(jìn)行配置,禁止其加載,簡化了系統(tǒng)服務(wù)加載量,從而減少了系統(tǒng)服務(wù)的加載時間。
為進(jìn)一步減少系統(tǒng)服務(wù)加載的時間,在步驟303之后還包括:
步驟304、關(guān)閉系統(tǒng)服務(wù)延時。
為進(jìn)一步減少系統(tǒng)服務(wù)加載的時間,在步驟304之后還包括:
步驟305、延時加載cpu資源占用率超過預(yù)設(shè)閾值的系統(tǒng)服務(wù)。
在本實(shí)施例中,所述步驟305包括:
步驟3051、通過預(yù)設(shè)指令讀取各系統(tǒng)服務(wù)加載時的cpu資源占用率;
在具體實(shí)施時,系統(tǒng)通過調(diào)用通過如下指令讀取各系統(tǒng)服務(wù)加載時的cpu資源占用率:
cat/proc/uptime
top-n1|grepcpu
步驟3052、對cpu資源占用率超過超過預(yù)設(shè)閾值的系統(tǒng)服務(wù)延時到應(yīng)用程序啟動完成后加載。
在本實(shí)施例中,所述預(yù)設(shè)閾值為50%。
步驟4、在systemd服務(wù)中啟動應(yīng)用管理進(jìn)程及依賴的底層服務(wù)的步驟:在systemd服務(wù)加載過程中,當(dāng)監(jiān)測到系統(tǒng)初始化和文件系統(tǒng)掛載服務(wù)已啟動完成,則啟動應(yīng)用管理進(jìn)程及依賴的底層服務(wù)。
所述啟動應(yīng)用管理進(jìn)程包括:啟動應(yīng)用管理父進(jìn)程、啟動中間件進(jìn)程和啟動上層應(yīng)用進(jìn)程。
應(yīng)用管理父進(jìn)程是所有應(yīng)用進(jìn)程的父進(jìn)程,用于啟動其他子進(jìn)程,并對子進(jìn)程進(jìn)程守護(hù),當(dāng)子進(jìn)程有異常時進(jìn)行殺死并重啟進(jìn)程,以恢復(fù)子進(jìn)程的正常功能;
中間件進(jìn)程是應(yīng)用程序依賴的基礎(chǔ)服務(wù),為其他應(yīng)用中間件提供接口服務(wù),例如源管理、設(shè)備管理、音頻管理等。
上層應(yīng)用進(jìn)程是為上層應(yīng)用app提供接口服務(wù),封裝平臺共通的功能邏輯,例如收音機(jī)服務(wù)、媒體服務(wù)、藍(lán)牙服務(wù)等。
在現(xiàn)有技術(shù)中,應(yīng)用程序的啟動是在systemd所有服務(wù)啟動完之后才進(jìn)行的,因此系統(tǒng)啟動時間較長。而在本技術(shù)方案中,將應(yīng)用管理進(jìn)程的啟動腳本嵌入到systemd中系統(tǒng)初始化和文件系統(tǒng)掛載服務(wù)腳本之后運(yùn)行,使應(yīng)用程序啟動的時間提前。由于應(yīng)用程序啟動的時間提前,若所述應(yīng)用程序依賴的底層服務(wù)還未準(zhǔn)備好,則會導(dǎo)致應(yīng)用程序無法正常運(yùn)行,因此,需將所述應(yīng)用程序依賴的底層服務(wù)嵌入到systemd服務(wù)中一并加載,達(dá)到快速啟動和功能穩(wěn)定正常之目的。
步驟5、啟動關(guān)機(jī)前的應(yīng)用程序的步驟:所述應(yīng)用管理進(jìn)程讀取上一次關(guān)機(jī)前的應(yīng)用程序id,并啟動所述id對應(yīng)的應(yīng)用程序。
步驟6、加載gui的步驟:所述應(yīng)用程序啟動完成后,加載gui進(jìn)行顯示。
步驟7、啟動其它中間件的步驟:所述gui加載完成后,所述應(yīng)用管理進(jìn)程啟動除所述上一次關(guān)機(jī)前的應(yīng)用程序之外的應(yīng)用程序的中間件服務(wù)進(jìn)程及應(yīng)用服務(wù)進(jìn)程。
通過優(yōu)先啟動基礎(chǔ)服務(wù)可確保應(yīng)用程序以最快的速度正常運(yùn)行,使用戶可以使用相應(yīng)的功能。
待gui加載完成后再啟動其它中間件服務(wù)進(jìn)程,可以避免同時啟動多個應(yīng)用程序的進(jìn)程,搶占系統(tǒng)資源,造成gui畫面顯示的延遲。
步驟8、連接中間件的步驟:所述中間件服務(wù)進(jìn)程啟動完成后,所述應(yīng)用管理進(jìn)程通知所述應(yīng)用程序連接中間件服務(wù)進(jìn)程,獲取接口服務(wù)。
以上所揭露的僅為本發(fā)明的較佳實(shí)施例,不能以此來限定本發(fā)明的權(quán)利保護(hù)范圍,因此依本發(fā)明申請專利范圍所作的等同變化,仍屬本發(fā)明所涵蓋的范圍。