• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于嵌入式系統(tǒng)程序升級(jí)的架構(gòu)設(shè)計(jì)

      2022-02-14 07:36:50潘文卿劉興義王飛飛宋炳雨王琳琳
      汽車(chē)電器 2022年1期

      潘文卿, 劉興義, 王飛飛, 宋炳雨, 王琳琳

      (濰柴動(dòng)力股份有限公司, 山東濰坊 261061)

      在汽車(chē)領(lǐng)域, 隨著智能化的不斷提升, 汽車(chē)各方面的功能越來(lái)越多, 越來(lái)越復(fù)雜, 軟件會(huì)不斷地迭代升級(jí), 而且更新周期開(kāi)始變得越來(lái)越短, 所以需要不斷地更新升級(jí)程序。 程序升級(jí)的流程和架構(gòu)需要保證正確穩(wěn)定, 安全可靠。 在汽車(chē)領(lǐng)域的嵌入式系統(tǒng)軟件中, 主要包含兩部分程序, 一部分是引導(dǎo)加載程序, 主要負(fù)責(zé)完成初始化硬件設(shè)備, 建立內(nèi)存空間的映射關(guān)系, 升級(jí)控制程序, 即Bootloader程序, 以下簡(jiǎn)稱(chēng)Boot程序; 另一部分是實(shí)現(xiàn)相關(guān)控制功能的應(yīng)用程序即APP程序。

      1 Bootloader的相關(guān)概念

      Bootloader就是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段程序, 初始化硬件設(shè)備, 建立內(nèi)存空間的映射關(guān)系, 從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適狀態(tài), 以便最終調(diào)用操作系統(tǒng)內(nèi)核做好正確的環(huán)境。 Bootloader是依賴(lài)于硬件而實(shí)現(xiàn)的, 特別是在嵌入式系統(tǒng)中。 因而我們可以構(gòu)建一個(gè)具有適用性、 安全可靠的架構(gòu)。

      2 單Boot刷寫(xiě)架構(gòu)

      單Boot刷寫(xiě)的架構(gòu), 即系統(tǒng)一上電, 先進(jìn)入Boot程序,進(jìn)行軟硬件的初始化, 建立內(nèi)存空間的映射關(guān)系, 然后校驗(yàn)應(yīng)用程序的完整性, 如果程序是完整的, 當(dāng)前也沒(méi)有程序更新需求進(jìn)入, 將跳轉(zhuǎn)到APP程序中運(yùn)行。 如果應(yīng)用程序運(yùn)行過(guò)程中收到刷寫(xiě)的命令, 則跳轉(zhuǎn)到Boot程序進(jìn)行APP軟件升級(jí)的會(huì)話(huà)流程。 這種單Boot的架構(gòu)隨著功能的不斷迭代升級(jí), 局限性已日漸明顯。 一旦Boot程序燒錄到控制器中, 即無(wú)法再更新。 圖1是Boot程序和APP程序運(yùn)行及刷寫(xiě)架構(gòu)圖。

      圖1 Boot和APP的跳轉(zhuǎn)及刷寫(xiě)流程

      這種單Boot的架構(gòu)適用于項(xiàng)目規(guī)劃最初就能夠?qū)?yīng)用程序的架構(gòu)劃分明確, 不會(huì)因?yàn)楣δ艿脑黾樱?程序的迭代導(dǎo)致程序區(qū)或者數(shù)據(jù)區(qū)空間不夠, 需要重新劃分區(qū)間的情況。 一旦應(yīng)用程序的架構(gòu)有調(diào)整, 單Boot的刷寫(xiě)架構(gòu)將不再適用, 控制器將不再支持軟件版本上下兼容, 持續(xù)升級(jí)。

      3 雙Boot刷寫(xiě)架構(gòu)

      3.1 雙Boot刷寫(xiě)架構(gòu)1

      為了規(guī)避單Boot 的架構(gòu)帶來(lái)的不便, 再單獨(dú)拿一塊Flash區(qū)域做成雙Boot, 我們分別用BootA (更新應(yīng)用程序的Bootloader), BootM (更新BootA的Bootloader) 區(qū)分。 BootA中有啟動(dòng)程序, 一上電, 程序就從BootA中啟動(dòng)運(yùn)行, 上電后初始化軟硬件, 完成內(nèi)存空間的映射關(guān)系, 校驗(yàn)APP應(yīng)用程序的完整性, 在BootA中停留一定時(shí)間后跳轉(zhuǎn)到APP應(yīng)用程序, 如果在此停留期間收到更新APP的會(huì)話(huà)請(qǐng)求, 按照標(biāo)準(zhǔn)的UDS刷寫(xiě)流程進(jìn)行APP應(yīng)用程序更新, 更新完成后, 則跳轉(zhuǎn)到APP入口運(yùn)行應(yīng)用程序; 如果在BootA運(yùn)行期間收到更新BootA的會(huì)話(huà)命令, 則跳轉(zhuǎn)到BootM中, 按照標(biāo)準(zhǔn)的UDS刷寫(xiě)流程更新BootA, 更新完成后, 先從BootM跳轉(zhuǎn)到BootA, 然后再跳轉(zhuǎn)到APP。

      如果在A(yíng)PP運(yùn)行期間收到更新BootA的會(huì)話(huà)請(qǐng)求, 則先從APP跳轉(zhuǎn)到BootA, 再?gòu)腂ootA跳轉(zhuǎn)到BootM, 進(jìn)行BootA的程序更新, 更新完成后則由BootM 先跳轉(zhuǎn)到BootA, 再由BootA跳轉(zhuǎn)到APP。 BootM和APP之間不能直接跳轉(zhuǎn), 以保證BootM的獨(dú)立性。

      為了防止出現(xiàn)異常復(fù)位或者刷死APP的情況, 設(shè)定復(fù)位機(jī)制, 強(qiáng)制停留在BootA程序中, 并發(fā)送一條具有復(fù)位原因標(biāo)識(shí)內(nèi)容的報(bào)文到總線(xiàn)上以便分析, 當(dāng)前因異常強(qiáng)制停留在了BootA, 可以分析APP程序進(jìn)行定位以便重新進(jìn)行程序刷寫(xiě)。

      此架構(gòu)的優(yōu)點(diǎn)是隨著程序的不斷迭代升級(jí), 當(dāng)BootA的刷寫(xiě)流程或者程序設(shè)計(jì)不滿(mǎn)足要求的時(shí)候, 可以通過(guò)BootM進(jìn)行更新, BootM僅有更新BootA的功能, 比較純粹和獨(dú)立,僅僅是用來(lái)更新BootA, 因此它占用的空間會(huì)比較小, 對(duì)整個(gè)嵌入式系統(tǒng)程序的設(shè)計(jì)不會(huì)帶來(lái)太大的影響。

      如圖2 所示, BootM 和APP 沒(méi)有直接的跳轉(zhuǎn)關(guān)系,都是通過(guò)BootA來(lái)跳轉(zhuǎn), 這樣BootM 會(huì)比較獨(dú)立, 不受APP 的影響,但是同時(shí)更新BootA 時(shí)風(fēng)險(xiǎn)比較大, 此時(shí)要保持通信的設(shè)備和線(xiàn)路穩(wěn)定, 通信會(huì)話(huà)流程設(shè)計(jì)要安全可靠, 如果在更新BootA的過(guò)程中出現(xiàn)間斷、 卡滯等問(wèn)題會(huì)導(dǎo)致刷寫(xiě)失敗, 如果BootA不能正常啟動(dòng)運(yùn)行, 會(huì)導(dǎo)致控制器失效。 因此更新BootA的風(fēng)險(xiǎn)性較高。

      圖2 BootA-BootM-APP跳轉(zhuǎn)關(guān)系1

      3.2 雙Boot刷寫(xiě)架構(gòu)2

      控制器上電首先進(jìn)入BootM, BootM中包含了啟動(dòng)程序,初始化程序, 校驗(yàn)APP完整性功能, 在BootM運(yùn)行期間收到刷寫(xiě)會(huì)話(huà)命令, 如果要更新BootA, 則按照標(biāo)準(zhǔn)的UDS刷寫(xiě)流程更新BootA, 更新完畢后, 跳轉(zhuǎn)到APP; 如果收到更新APP的會(huì)話(huà)命令, 則先跳轉(zhuǎn)到BootA, 然后更新APP; 如果沒(méi)有收到任何更新程序的會(huì)話(huà)命令, 則直接跳轉(zhuǎn)到APP。

      在A(yíng)PP程序運(yùn)行期間, 如果收到更新BootA的會(huì)話(huà)命令,則跳轉(zhuǎn)到BootM, 更新BootA, 更新完畢后跳轉(zhuǎn)到APP; 如果收到更新APP的會(huì)話(huà)命令, 則跳轉(zhuǎn)到BootA, 對(duì)APP程序進(jìn)行更新, 更新完畢后跳轉(zhuǎn)到APP運(yùn)行。 BootM的功能保證了不管什么情況下即便是BootA異常刷死了, 也可以重新上電跳轉(zhuǎn)到APP正常運(yùn)行。

      如圖3 所示, 在此架構(gòu)關(guān) 系 中 ,BootM、 BootA、 APP 三者建立相互跳轉(zhuǎn)關(guān)系, BootM承接一部分初始化的功能,更 新 BootA,如果更新BootA失敗, 則停留在BootM中。 BootA保留更新APP的功能, 如果APP存在異常, 連續(xù)復(fù)位或者被刷死的時(shí)候, 設(shè)定復(fù)位機(jī)制, 停留在BootA中, BootA會(huì)通過(guò)一條可以標(biāo)識(shí)復(fù)位原因的報(bào)文發(fā)送到總線(xiàn)上以便分析并進(jìn)一步更新APP; 如果APP更新失敗, 會(huì)停留在BootA中; 如果BootA更新失敗, 停留在BootM中, 以便程序進(jìn)一步更新, 可以保證控制器不會(huì)因?yàn)槌绦騿?wèn)題而失效。

      圖3 BootA-BootM-APP跳轉(zhuǎn)關(guān)系2

      4 結(jié)論

      本文以實(shí)際的嵌入式系統(tǒng)程序升級(jí)為例, 提出了3種嵌入式系統(tǒng)程序升級(jí)Boot架構(gòu)設(shè)計(jì), 并對(duì)每一種Boot架構(gòu)的優(yōu)缺點(diǎn)進(jìn)行了分析。 在功能不斷智能化、 多樣化的情況下,程序不斷迭代升級(jí), 頻繁升級(jí)程序是不可避免的, 在優(yōu)化過(guò)程中, Boot也會(huì)升級(jí)。 為了保證控制器下線(xiàn)后, Boot程序和應(yīng)用程序都能夠不斷地升級(jí), 我們提出了雙Boot的概念,用一個(gè)Boot升級(jí)另一個(gè)Boot, 另一個(gè)Boot升級(jí)應(yīng)用程序, 這樣上電后的啟動(dòng)順序以及跳轉(zhuǎn)關(guān)系成了關(guān)鍵。 本文從兩種Boot架構(gòu)中分析了各自的優(yōu)缺點(diǎn), 在架構(gòu)2中彌補(bǔ)了架構(gòu)1的缺點(diǎn), 降低了Boot刷寫(xiě)的風(fēng)險(xiǎn), 提高了系統(tǒng)的穩(wěn)定性。

      绥江县| 芦山县| 巴彦淖尔市| 治多县| 逊克县| 霍州市| 武鸣县| 维西| 伊金霍洛旗| 遂溪县| 吴堡县| 灵宝市| 庆阳市| 万源市| 阳原县| 宁德市| 莎车县| 从江县| 博罗县| 安国市| 新巴尔虎右旗| 晋宁县| 南京市| 甘泉县| 湾仔区| 磐石市| 安图县| 晋城| 大丰市| 石楼县| 怀安县| 隆子县| 高清| 大安市| 淮阳县| 长岭县| 宾川县| 天全县| 乌海市| 民权县| 巴林右旗|