Boot作(zuò)為(wèi)啓動術(shù)語的(de★δ)來(lái)源确實與靴子(zǐ)有(yǒu)關。因為←♦ ÷(wèi)計(jì)算(suàn)機(j¶εī)的(de)啓動都(dōu)是(shì)∑×₹從(cóng)硬件(jiàn)上(shàngΩ↓)電(diàn)開(kāi)始的(de),此時(shí)軟件ε(jiàn)還(hái)沒工(gōng)作(zuò),需要(yào)一(yī)個(gè)引 ←$導程序把它拉起來(lái)。而拉起軟件(jiàn)™←的(de)動作(zuò)又(yòu)需要(yào)軟件(jiàn)自(zì)× §♥身(shēn)的(de)啓動和(hé)運行α ↑(xíng),這(zhè)個(gè)過程就(jiù)很©¥ ☆(hěn)像一(yī)句英文(wén)諺語:
Pull oneself up by one's ₽♥bootstraps.
意思是(shì)通(tōng)過鞋帶把自(zì)己提起來(lái),寓意自(βzì)食其力,靠自(zì)己振作(zuò)起來(lái)。由于兩♦↑♠€者思想如(rú)出一(yī)轍,計(jì)算(suàn)機(jī)發展初期就(j&•♣<iù)把啓動的(de)引導程序稱作(zuò)BootStrap Loader,或Bootloader或Boot。
圖1:用(yòng)鞋帶把自(zì)己拉起來(lái)的(de)示意圖
圖2:Bootloader示意圖
實際上(shàng),Flash Bootloader應該算(suàn)是(shì)Bootloader引導後的(de)第二道(dào)程序。第一(yī)道(dào)被♠↕♥₹引導起來(lái)的(de)Bootloader會(huì)判斷ECU狀态,再根據這(zhè)個(gè)狀态來(lái)拉起↔∑β應用(yòng)程序或者進入Flash Bootloader。由于簡略表達或者概念模糊,在實際工(gōng)作(zuò)場(chǎng)合中很(hδβ☆•ěn)多(duō)時(shí)候都(dōu)會(huì)聽(tīng)到(dào)有(y≥" ǒu)人(rén)把Bootloader和(hé)Flash Bootloader混為(wèi)一(yī)談。我們可(kě)以根據場(chλ♠ǎng)合保持溝通(tōng)的(de)連貫性,但(dàn÷ε γ)心裡(lǐ)應該清晰區(qū)分(fēn)兩者的(de)區(qū₽¶)别。
圖3:Flash Bootloader與內(nèi)存關系示意框圖
PBL的(de)作(zuò)用(yòng)是(shì)在應用(yòng)軟件(jiàn)有(yǒu)效¶✔時(shí)引導它。PBL存儲在MCU芯片的(de)Flash,它一(yī)般是(shì)産品出廠(chǎng)時(shí)一(yī)σ↕↑次性刷好(hǎo)的(de),芯片上(shàng)電(diàn)或重啓後,第一(yī)批執行(xí♥✔∑ng)的(de)代碼就(jiù)是(shì) ←÷PBL。需要(yào)刷寫軟件(jiàn)時(×₩©&shí),PBL可(kě)以通(tōng)過統一(yī)診斷服務(UDS),基于CAN或以太網等底層總線協議(yì)與外(wài)界診斷儀通(×<♥tōng)信。在校(xiào)核完診斷儀的(de)權限後,PBL會(huì)将診斷儀上(shàng)的(de)SBL下(xià)載到(dào)MCU的(de)內(nèi)存RAM上(shàng),然後由SBL進行(xíng)刷寫。SBL包含PBL提供的(de)所有(yǒu)服務以及閃存驅動器(qì)(₹∏γ←Flash Driver)和(hé)一(yī)些(xiē)額外(wài)的(de)UDS服務。通(tōng)過UDS觸發,SBL會(huì)利用(yòng)Flash Driver擦除舊(jiù)軟件(jiàn),并把新軟件(jiàn)寫到(dào)$♠≥對(duì)應的(de)存儲區(qū)。具體(tǐ)流程如(rú)下(xi ♠à)圖4所示:
圖4:MCU刷寫流程示意圖
為(wèi)了(le)避免應用(yòng)軟件(jiàn)被意外(wài)誤刷寫或±®•γ者删除,PBL中一(yī)般不(bù)包含Flash Driver,不(bù)能(néng)直接操作(zuò)閃←'δ存。每次刷寫時(shí),包含Flash Driver的(de)SBL都(dōu)會(huì)從(cóng)診斷儀中重新加載到(dào)內(nèi)存。這(zhè)種PBL和(hé)SBL的(de)分(fēn)工(gōng)方案,有(yǒu)這(zhè)些(xiē)好(≠∑$hǎo)處:
1.平時(shí)防止應用(yòng)軟件(jiàn)被誤刷寫。₽₩↓₩
2.提高(gāo)網絡安全性。每次從(cóng)診斷儀下(xià)載SBL時(γ£♥•shí),都(dōu)可(kě)以通(tōng±ε♠)過安全鑒權機(jī)制(zhì),确保合法的(de)診斷儀才能(néng)觸發刷寫。
3.通(tōng)過SBL還(hái)能(néng)反向刷寫更新PBL,提高(gāo)了(le)Bootloader的(de)整體(tǐ)靈活度。
上(shàng)面說(shuō)的(de)Flash Bootloader是(shì)針對(duì)傳統高(gāo)度嵌入ε↑式系統的(de)。但(dàn)相(xiàng)信各®↕£₩位汽車(chē)同仁也(yě)感受到(dào),越來(l→£ái)越多(duō)的(de)高(gāo)性能(né 'βng)計(jì)算(suàn)芯片正在汽車(chē)上(shàng)普及,汽'↑車(chē)中央電(diàn)腦(nǎo)等方案也(yě)是(shì)不(bù)絕于>→☆耳。對(duì)于這(zhè)些(xiē)高(gāo)性能(néng)計(jì)算♣≈±(suàn)芯片,行(xíng)業(yè)內(nèi)常以SoC(System on Chip)相(xiàng)稱。SoC的(de)啓動和(hé)刷寫方案和(hé)MCU如(rú)出一(yī)轍,但(dàn)由于其內(nèi)部存儲管理(lǐ)系統和(hé)內(nè&σi)部總線更加複雜(zá),啓動的(de)具體(tǐ)實現(xiàn)與MCU略有(yǒu)差異,其細節更接近(jìn)于我們→±熟悉的(de)個(gè)人(rén)電(di§✔β↑àn)腦(nǎo)。總體(tǐ)的(de)啓動流程如(rú)下(xi↑<$←à)圖所示。
圖5:BIOS和(hé)UEFI啓動流程示意圖
傳統計(jì)算(suàn)機(jī)的 π(de)啓動一(yī)般采用(yòng)上(shπ♣àng)圖上(shàng)部分(fēn)的(de)BIOS啓動。BISO是(shì)Basic Input Output System的(de)縮寫,是(shì)計(jì)算&≥(suàn)機(jī)硬件(jiàn)與軟件(jiàn)第一(yī£•")次相(xiàng)遇的(de)地(dì)方。§×∑BIOS的(de)代碼通(tōng)常被嵌入到(dào)電(diàn)腦(nǎo)的(de)主闆的(de₽φ)EEPROM中。BIOS可(kě)以完成計(jì)算(suàn)機(jī)上(shàng)電(diàn)後的(↕π•de)基本自(zì)檢,并指示計(jì)算(suàn)機(jī)如(rú)何執行(xínα¶φg)基本功能(néng),如(rú)啓動和(hé)鍵€¶±盤控制(zhì)。在BIOS中也(yě)可(kě)以選擇配置啓動參數(sh♦∏ ù)。對(duì),這(zhè)就(jiù)是(★≈"shì)我們以前重裝電(diàn)腦(nǎo)系統時(shí),在BIOS裡(lǐ)可(kě)以選擇從(cóng)光(guāng)盤還(h♣Ω↓∞ái)是(shì)硬盤啓動等操作(zuò)的(de)原因。然後BIOS會(huì)調用(yòng)硬盤起始位置的(de)MBR(Master Boot Record),然後按照(zhào)其中的(de)分(fēn)區(q<δ←ū)表拉起Bootloader,然後是(shì)操作(zuò)系統內(↓↔★nèi)核,再到(dào)操作(zuò)系統和(hé)應用(yòng)。
當然BIOS的(de)設計(jì)已經有(yǒu)年(nián)頭了(le)。現(xiàn)在生(shēngγ₹¥$)産的(de)電(diàn)腦(nǎo)基本都(dōu)是(shì)使用(yòng)UEFI(Unified Extensible Firmware Int<♣★¥erface),汽車(chē)上(shàng)的(de)高(gāo♠™↔£)性能(néng)計(jì)算(suàn)單元也(yě)一σ ✘(yī)樣。從(cóng)實現(xiàn)功能(néng)λ<ε上(shàng)來(lái)看(kàn),UEFI可(kě)以認為(wèi)是(shì)升級版↔♣的(de)BIOS。
UEFI是(shì)一(yī)個(gè)微(wēi)型操作(zuò)系統,它在∞'∞$內(nèi)存中加載Bootloader,再執行(xíng)額外(wài)的(de)操作(zuò)程序。作(zuò)為(wèi)微(wēσi)型操作(zuò)系統,UEFI運行(xíng)在固件(jiàn)之上(shàng),可(kě)以支持的(de)功能(néng)∑∑ε比BIOS多(duō)得(de)多(duō),包括系統驗證等安全功能(néng)。其中最核心的(≤de)區(qū)别是(shì),UEFI支持更大(dà)的(de)尋址空(kōng)間(ji>₹ān),并且可(kě)以在32位或64位模式下(xià)運行(xíng)(BIOS隻支持16位),也(yě)就(jiù)是(shì)UEFI可(kě)以支持更大(dà)的(de)硬盤或者網絡共享,并且啓動速度更快(kuài)。
圖6:A/B分(fēn)區(qū)升級示意圖
新年(nián)伊始,萬象更新。每年(nián)的(de)開(kāi)↓∑始階段對(duì)這(zhè)一(yī)整年(nián)的(de)影(yǐng)響都&↓(dōu)舉足輕重。對(duì)車(chē)載控制(zhì)器(qì)的(de)啓動來(lái)說¥∑€(shuō)也(yě)是(shì)類似,好(hǎo)的(de)開(kāi)始↕→是(shì)成功的(de)一(yī)半。正是(shì)由于啓動的(de)重要(yào)性,也(yε←→ě)有(yǒu)不(bù)少(shǎo)挑戰δ×要(yào)通(tōng)過啓動過程來(lái)解決。其中最突出的(de)就(jiù)是(ε∑®♣shì)關于信息安全和(hé)啓動時(shí)間(jiān)的(de)挑戰。
圖7:一(yī)種MCU和(hé)SoC安全啓動方案的(de)示意圖
車(chē)載業(yè)務對(duì)于啓動時(shí)間(jiān)又(yòu)非λΩ★常敏感。例如(rú)當下(xià)大(dà)家(jiā)都(¥ "dōu)習(xí)慣的(de)倒車(chē)影(yǐng)像,我們通('™&tōng)常坐(zuò)上(shàng)車(chē)、系好(hǎo) ₩↑λ安全帶、發動車(chē)輛(liàng)挂倒擋,就(ji<$∏ù)希望影(yǐng)像能(néng)夠出現(xiàn)在δλ♠中控屏。試想如(rú)果整個(gè)啓動時(shí)長(cháng)需要(yào€≈©♦)1分(fēn)鐘(zhōng),那(nà)我們就(jiù)需要€≤(yào)在車(chē)上(shàng)等待幾十秒(miǎo),或者•↑←®脫離(lí)輔助功能(néng)“盲開(kāi)σγ♥”出去(qù)了(le),這(zhè)樣的(de) φ用(yòng)戶體(tǐ)驗會(huì)很(hěn)差。
為(wèi)了(le)迎接這(zhè)個(gè)挑戰,車(chē)載域φ∞÷控制(zhì)器(qì)或計(jì)算(suà→δ→☆n)平台經常會(huì)引入休眠模式。這(zhè)也(yě)類似我們'"→電(diàn)腦(nǎo)的(de)休眠模式,就(jiù)是(shì© ™♣)讓原本掉電(diàn)丢失的(de)內(nèi)存上(shàng)的(de)內(∏₹™nèi)容先存儲到(dào)硬盤裡(lǐ),下(xià)次啓動時(shí)再将所有(yǒu)內§£✘¶(nèi)容重新加載到(dào)內(nèi)存上(shàng),而不(bù)是(↔ εshì)采用(yòng)重新從(cóng)♣∑✘UEFI加載Bootloader到(dào)內(nèi)核再初始化(huà)的(de)那(nà)一(yī)套流程β₹®。這(zhè)樣控制(zhì)器(qì)技(jì)能(néng)長(chánπ☆₽g)時(shí)間(jiān)保持低(dī)功耗,又(yòu)能(néng)在需要(yào)喚醒時♦☆(shí)能(néng)夠快(kuài)速啓動工(gōng)作(zuò)。當然,這>€(zhè)需要(yào)耗費(fèi)硬盤上(shàng)的(de)額外(wài)空(kōng)₹₽αβ間(jiān)來(lái)存儲休眠時(shí)的(de)內(nèi)存數(shù)∑'據。以下(xià)圖Windows 8的(de)示意圖為(wèi)例,傳統冷(lěng)啓動需要(yào)耗費(fè ≥±i)大(dà)量的(de)時(shí)間(jiān)來(lái)初始化(huà)系統,但(dàn)∞ ∏γ是(shì)從(cóng)休眠模式中啓動時(shí),隻需把硬盤中的(de)休眠數(s♥₹<Ωhù)據(Hiberfile)加載到(dào)內(nèi)存,就(jiù)可(kě)以開(kāi)始用(yòng)戶♠登錄了(le)。
圖8:Windows 8冷(lěng)啓動和(hé)從(cóng)休眠中的>×(de)啓動時(shí)長(cháng)對(duì)比示意圖
而除了(le)休眠模式,控制(zhì)器(qì)還(hái)可(k•ě)以通(tōng)過優化(huà)安全啓動策略縮短(dβ©↑↑uǎn)啓動時(shí)長(cháng)。有(yǒu)些(xiē)情況下(xià),可(kě$ αλ)以允許控制(zhì)器(qì)先拉起Bootloader,操作(zuò)系統和(hé)應用(yòng),并記錄其啓動的(de)簽名、指紋等關鍵數(♠←shù)據。待系統工(gōng)作(zuò)後,TEE會(huì)在後台再次校(xiào)驗已經啓動的(de)系統¥φ是(shì)否合法,如(rú)果非法則進入相(xiàng)應的(de)安δ≥ε全模式。這(zhè)種做(zuò)法比先驗證再啓動的(de)®±✔∞方案會(huì)損失安全性,但(dàn)是↔™☆(shì)能(néng)縮短(duǎn)啓動•♠時(shí)長(cháng)。基于整車(chē)÷∏網絡安全架構的(de)分(fēn)析,可(kě)以讓部分(∏δ♥★fēn)較為(wèi)安全的(de)控制(zhì)器(qì)(例如(rú) '"不(bù)與外(wài)網直接通(tōng)訊的∞★(de)本地(dì)控制(zhì)器(qì→ >λ))采用(yòng)這(zhè)種策略。
當然,産品的(de)發展都(dōu)是(s₹hì)多(duō)維度而不(bù)是(shì)單一(yī¶✘)維度的(de)。車(chē)載控制(zhì)器(qì)的(de♠±)啓動過程也(yě)應該按照(zhào)多(duō)維度标準去(qù)取舍¥×和(hé)開(kāi)發。這(zhè)就(jiù)像當年(nián)傳統非智能(néng)手機(↔γ∏ jī)的(de)啓動時(shí)間(jiān)是(shì)很(hěn)快(kuài),也(yě)很≥ §(hěn)安全,沒有(yǒu)那(nà)麽多(duō)病毒。但(dàn)₽λ<≠還(hái)是(shì)被現(xiàn)在啓動時(shí←↑≠)間(jiān)更長(cháng)、安全風(fēng↓←Ω)險更大(dà)的(de)智能(néng)手機(jī)$♣所取代了(le)。春節期間(jiān)大(dà)家(jiā) ©在家(jiā)看(kàn)的(de)智能(né↔"$ng)電(diàn)視(shì)也(yě)是(shì)一(yī)個(gè)道(★<↑✘dào)理(lǐ)。在汽車(chē)智能(néng)化(huà)的(de¶₩®λ)大(dà)趨勢下(xià),啓動過程相(xiàng)信也(yě)會(huì)不(bù)斷平$÷÷₩衡,做(zuò)得(de)更加智能(néng)、高(gāo)效、安全。
轉自(zì)汽車(chē)電(diàn)子(zǐ)與軟件(jiàn)