本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種程序更新方法及裝置。
背景技術(shù):
電子控制單元(electroniccontrolunit,簡稱ecu)又稱“行車電腦”、“車載電腦”等。當(dāng)前主流的ecu有如下兩種方式支持在線升級(jí):
第一種:將負(fù)責(zé)對應(yīng)用程序升級(jí)的引導(dǎo)程序(bootloader)與應(yīng)用程序(application)合并在一起,同時(shí)升級(jí)更新。在升級(jí)過程中一旦發(fā)生中斷,系統(tǒng)將無法再啟動(dòng),此種情況下會(huì)對汽車的ecu升級(jí)帶來極大的風(fēng)險(xiǎn)和成本。
第二種:將bootloader與應(yīng)用程序分離開,分別存儲(chǔ)在閃存(flash)的獨(dú)立空間中,ecu上電后先進(jìn)bootloader中,判斷應(yīng)用程序是否有效,從而決定是停留在引導(dǎo)(boot)狀態(tài)還是進(jìn)入應(yīng)用程序。由于bootloader與應(yīng)用程序在獨(dú)立的flash區(qū)域內(nèi),當(dāng)應(yīng)用程序更新失敗后并不影響bootloader,所以可以繼續(xù)通過bootloader重新更新應(yīng)用程序。但是,當(dāng)bootloader也需要更新時(shí),如果bootloader更新時(shí)失敗就會(huì)導(dǎo)致整個(gè)系統(tǒng)無法啟動(dòng)。
技術(shù)實(shí)現(xiàn)要素:
為此,本發(fā)明提出一種程序更新方法及裝置,用于解決現(xiàn)有的程序更新方式,存在在bootloader更新失敗后導(dǎo)致系統(tǒng)無法啟動(dòng)的問題。
本發(fā)明的第二個(gè)目的在于提出一種程序更新裝置。
為達(dá)上述目的,本發(fā)明第一方面實(shí)施例提出了一種程序更新方法,包括:
在目標(biāo)程序更新失敗后,返回重新啟動(dòng)第一引導(dǎo)程序;其中,所述第一引導(dǎo)程序固化在存儲(chǔ)器中;所述目標(biāo)程序?yàn)閼?yīng)用程序或者第二引導(dǎo)程序;
執(zhí)行所述第一引導(dǎo)程序;
按照所述第一引導(dǎo)程序中的更新邏輯,重新更新所述目標(biāo)程序。
本發(fā)明實(shí)施例的程序更新方法,通過將引導(dǎo)程序分離成兩部分,將包括更新邏輯的第一引導(dǎo)程序固化到存儲(chǔ)器中,當(dāng)目標(biāo)程序更新失敗后,則可以在返回重新啟動(dòng)時(shí),重新定位到第一引導(dǎo)程序的位置,啟動(dòng)該第一引導(dǎo)程序引導(dǎo)執(zhí)行更新邏輯。尤其針對bootloader的更新,在更新失敗后也能夠繼續(xù)對第二引導(dǎo)程序進(jìn)行更新,從而可以解決現(xiàn)有技術(shù)中當(dāng)bootloader更新失敗后存在無法啟動(dòng)進(jìn)而導(dǎo)致ecu無法正常使用的問題。
為達(dá)上述目的,本發(fā)明第二方面實(shí)施例提出了一種程序更新裝置,包括:
存儲(chǔ)器、處理器及存儲(chǔ)在存儲(chǔ)器上并可在處理器上運(yùn)行的第一引導(dǎo)程序,所述處理器執(zhí)行如本發(fā)明第一方面實(shí)施例所述的程序更新方法。
本發(fā)明實(shí)施例的程序更新裝置,通過將引導(dǎo)程序分離成兩部分,將包括更新邏輯的第一引導(dǎo)程序固化到存儲(chǔ)器中,當(dāng)目標(biāo)程序更新失敗后,則可以在返回重新啟動(dòng)時(shí),重新定位到第一引導(dǎo)程序的位置,啟動(dòng)該第一引導(dǎo)程序引導(dǎo)執(zhí)行更新邏輯。尤其針對bootloader的更新,在更新失敗后也能夠繼續(xù)對第二引導(dǎo)程序進(jìn)行更新,從而可以解決現(xiàn)有技術(shù)中當(dāng)bootloader更新失敗后存在無法啟動(dòng)進(jìn)而導(dǎo)致ecu無法正常使用的問題。
本發(fā)明附加的方面和優(yōu)點(diǎn)將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過本發(fā)明的實(shí)踐了解到。
附圖說明
本發(fā)明上述的和/或附加的方面和優(yōu)點(diǎn)從下面結(jié)合附圖對實(shí)施例的描述中將變得明顯和容易理解,其中:
圖1為本發(fā)明實(shí)施例提供的一種程序更新方法的流程示意圖;
圖2為本發(fā)明實(shí)施例提供的另一種程序更新方法的流程示意圖;
圖3為本發(fā)明實(shí)施例提供的另一種程序更新方法的流程示意圖;
圖4為本發(fā)明實(shí)施例提供的一種存儲(chǔ)器劃分的示意圖;
圖5為本發(fā)明實(shí)施例提供的一種程序更新裝置的結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面詳細(xì)描述本發(fā)明的實(shí)施例,所述實(shí)施例的示例在附圖中示出,其中自始至終相同或類似的標(biāo)號(hào)表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實(shí)施例是示例性的,旨在用于解釋本發(fā)明,而不能理解為對本發(fā)明的限制。
下面參考附圖描述本發(fā)明實(shí)施例的程序更新方法及裝置。
圖1為本發(fā)明實(shí)施例提供的一種程序更新方法的流程示意圖。如圖1所示,該程序更新方法包括以下步驟:
s101、在上次目標(biāo)程序更新失敗后,返回重新啟動(dòng)第一引導(dǎo)程序;其中,第一引導(dǎo)程序固化在存儲(chǔ)器中;目標(biāo)程序?yàn)閼?yīng)用程序或者第二引導(dǎo)程序。
本實(shí)施例中,為了能夠?qū)崿F(xiàn)在目標(biāo)程序更新失敗后,可以繼續(xù)對目標(biāo)程序進(jìn)行更新,將用于對應(yīng)用程序進(jìn)行更新的引導(dǎo)程序(bootloader)分成兩部分,一部分為用于對目標(biāo)程序進(jìn)行更新的更新邏輯,本實(shí)施例中,將該部分成為第一引導(dǎo)程序。另一部分為用于對應(yīng)用程序進(jìn)行更新的代碼塊,本實(shí)施例中,將該部分成為第二引導(dǎo)程序?;诘谝灰龑?dǎo)程序和第二引導(dǎo)程序最終能夠完成目標(biāo)程序的更新。
本實(shí)施例中,為了避免在bootloader更新失敗后無法啟動(dòng)系統(tǒng)的風(fēng)險(xiǎn),將第一引導(dǎo)程序固化到存儲(chǔ)器中。該存儲(chǔ)器可以為flash存儲(chǔ)器。該第一引導(dǎo)程序包括對目標(biāo)程序進(jìn)行更新的更新邏輯,在對目標(biāo)程序進(jìn)行更新時(shí),第一引導(dǎo)程序可以引導(dǎo)系統(tǒng)按照該更新程序進(jìn)行更新。而且由于第一引導(dǎo)程序固化在存儲(chǔ)器中,在系統(tǒng)更新升級(jí)時(shí)并不會(huì)對第一引導(dǎo)程序進(jìn)行更新升級(jí)。
實(shí)際應(yīng)用中,系統(tǒng)啟動(dòng)時(shí)需要從啟動(dòng)位置可以啟動(dòng),本實(shí)施例中,將第一引導(dǎo)程序固化到存儲(chǔ)器中的啟動(dòng)位置。具體地,預(yù)先對存儲(chǔ)器的存儲(chǔ)空間進(jìn)行劃分,可以將其中一個(gè)存儲(chǔ)空間設(shè)定為系統(tǒng)啟動(dòng)的啟動(dòng)位置,將該第一引導(dǎo)程序固化在啟動(dòng)位置對應(yīng)的第一存儲(chǔ)空間中。
目標(biāo)程序可以為應(yīng)用程序,也可以為從bootloader分離出的第二引導(dǎo)程序。在目標(biāo)程序更新失敗后,可以重新啟動(dòng)以嘗試重新更新目標(biāo)程序。本實(shí)施例中,由于第一引導(dǎo)程序固化在存儲(chǔ)器中,在返回重新啟動(dòng)時(shí),可以重新定位到第一引導(dǎo)程序的位置,啟動(dòng)該第一引導(dǎo)程序。尤其目標(biāo)程序?yàn)榈诙龑?dǎo)程序時(shí),現(xiàn)有技術(shù)中由于未將引導(dǎo)程序分離成兩部分,當(dāng)引導(dǎo)程序更新失敗后,就會(huì)陷入系統(tǒng)無法重啟的風(fēng)險(xiǎn)中。而本實(shí)施例中,將引導(dǎo)程序中更新邏輯單獨(dú)分離固化到存儲(chǔ)器中,即使在另一部分更新失敗后,也可以在系統(tǒng)重啟時(shí)引導(dǎo)按照更新邏輯,重新更新第二引導(dǎo)程序。
s102、執(zhí)行第一引導(dǎo)程序。
s103、按照第一引導(dǎo)程序中的更新邏輯,重新更新目標(biāo)程序。
在重新啟動(dòng)了第一引導(dǎo)程序后,就可以執(zhí)行該第一引導(dǎo)程序。進(jìn)一步地,當(dāng)執(zhí)行第一引導(dǎo)程序后,就可以按照第一引導(dǎo)程序所包括的更新邏輯,重新更新目標(biāo)程序。
本實(shí)施例提供的程序更新方法,在目標(biāo)程序更新失敗后,返回重新啟動(dòng)第一引導(dǎo)程序,其中第一引導(dǎo)程序固化在存儲(chǔ)器中;目標(biāo)程序?yàn)閼?yīng)用程序或者第二引導(dǎo)程序,以及執(zhí)行第一引導(dǎo)程序,按照第一引導(dǎo)程序中的更新邏輯,重新更新目標(biāo)程序。本實(shí)施例中,將引導(dǎo)程序分離成兩部分,將包括更新邏輯的第一引導(dǎo)程序固化到存儲(chǔ)器中,當(dāng)目標(biāo)程序更新失敗后,則可以在返回重新啟動(dòng)時(shí),重新定位到第一引導(dǎo)程序的位置,啟動(dòng)該第一引導(dǎo)程序引導(dǎo)執(zhí)行更新邏輯。尤其針對bootloader的更新,在更新失敗后也能夠繼續(xù)對第二引導(dǎo)程序進(jìn)行更新,從而可以解決現(xiàn)有技術(shù)中當(dāng)bootloader更新失敗后存在無法啟動(dòng)進(jìn)而導(dǎo)致ecu無法正常使用的問題。
圖2為本發(fā)明實(shí)施例提供的另一種程序更新方法的流程示意圖。如圖2所示,該程序更新方法包括以下步驟:
s201、目標(biāo)程序更新失敗后,返回重新啟動(dòng)第一引導(dǎo)程序;其中,第一引導(dǎo)程序固化在存儲(chǔ)器中。
關(guān)于s201的介紹可參見上述實(shí)施例中s101中的相關(guān)記載,此處不再贅述。
s202、執(zhí)行第一引導(dǎo)程序。
執(zhí)行第一引導(dǎo)程序,該第一引導(dǎo)程序中包括更新邏輯,可以按照第一引導(dǎo)程序所包括的更新邏輯,重新更新應(yīng)用程序。本實(shí)施例中,設(shè)定的更新邏輯為應(yīng)用程序和第二引導(dǎo)程序相互更新。例如,當(dāng)目標(biāo)程序?yàn)閼?yīng)用程序時(shí),則通過第二引導(dǎo)程序完成應(yīng)用程序的更新,而當(dāng)目標(biāo)程序?yàn)榈诙龑?dǎo)程序時(shí),則通過應(yīng)用程序完成第二引導(dǎo)程序的更新。
實(shí)際應(yīng)用中,應(yīng)用程序的更新需要在第二引導(dǎo)程序有效狀態(tài)才能夠完成,而第二引導(dǎo)程序的更新需要在應(yīng)用程序有效情況下才能夠完成。本實(shí)施例中,按照應(yīng)用程序與第二引導(dǎo)程序中至少有一個(gè)處于有效狀態(tài),形成上述更新邏輯。
本實(shí)施例中,如果目標(biāo)程序?yàn)閼?yīng)用程序,當(dāng)應(yīng)用程序更新失敗后,返回第一引導(dǎo)程序后按照更新邏輯引導(dǎo)時(shí),則可以確定出第二引導(dǎo)程序處于有效狀態(tài),從而可以繼續(xù)更新應(yīng)用程序。當(dāng)應(yīng)用程序更新成功后,應(yīng)用程序就可以處于有效狀態(tài)。當(dāng)需要對第二引導(dǎo)程序進(jìn)行更新時(shí),就可以通過應(yīng)用程序?qū)Φ诙龑?dǎo)程序進(jìn)行更新。
類似地,如果目標(biāo)程序?yàn)榈诙龑?dǎo)程序,當(dāng)?shù)诙龑?dǎo)程序更新失敗后,返回第一引導(dǎo)程序后按照更新邏輯引導(dǎo)時(shí),則可以確定出應(yīng)用程序處于有效狀態(tài),從而可以繼續(xù)更新應(yīng)用程序。當(dāng)?shù)诙龑?dǎo)程序更新成功后,第二引導(dǎo)程序就可以處于有效狀態(tài)。當(dāng)需要對應(yīng)用程序進(jìn)行更新時(shí),就可以通過第二引導(dǎo)程序?qū)?yīng)用程序進(jìn)行更新。
s203、由第一引導(dǎo)程序判斷是否需要更新應(yīng)用程序。
具體地,當(dāng)需要更新應(yīng)用程序或者第二引導(dǎo)程序時(shí),上位機(jī)可以通過總線向系統(tǒng)發(fā)送用于指示需要更新的指示信號(hào),第一引導(dǎo)程序可以根據(jù)指示信號(hào),來判斷是否需要更新應(yīng)用程序。如果判斷出需要更新應(yīng)用程序,則執(zhí)行s204。
s204、如果需要更新應(yīng)用程序且在第二引導(dǎo)程序有效時(shí),更新應(yīng)用程序。
由于應(yīng)用程序的更新需要在第二引導(dǎo)程序有效的情況下才能完成,在判斷出需要更新應(yīng)用程序后,則需要判斷第二引導(dǎo)程序是否為有效,在確定出第二引導(dǎo)程序有效的情況下,就可以進(jìn)入到第二引導(dǎo)程序中,通過第二引導(dǎo)程序?qū)?yīng)用程序進(jìn)行更新。
本實(shí)施例中,可以根據(jù)第二引導(dǎo)程序的有效標(biāo)志位判斷第二引導(dǎo)程序是否有效。預(yù)先為有效標(biāo)志位設(shè)置一個(gè)預(yù)設(shè)數(shù)值,例如可以為“1”,當(dāng)有效標(biāo)志位的數(shù)值為“1”時(shí),則可以判斷出第二引導(dǎo)程序處于有效狀態(tài)。
s205、如果需要不更新應(yīng)用程序,在應(yīng)用程序有效且第二引導(dǎo)程序需要更新時(shí),更新第二引導(dǎo)程序。
具體地,當(dāng)?shù)谝灰龑?dǎo)程序根據(jù)發(fā)送的指示信號(hào)判斷出不需要更新應(yīng)用程序時(shí),則繼續(xù)可以判斷應(yīng)用程序是否有效,如果應(yīng)用程序有效,則進(jìn)入應(yīng)用程序。進(jìn)一步地,當(dāng)?shù)诙龑?dǎo)程序需要更新時(shí),則可以對第二引導(dǎo)程序進(jìn)行更新。如果第二引導(dǎo)程序不需要更新,則可以執(zhí)行應(yīng)用程序。
本實(shí)施例中,可以根據(jù)應(yīng)用程序的有效標(biāo)志位判斷應(yīng)用程序是否有效。預(yù)先為有效標(biāo)志位設(shè)置一個(gè)預(yù)設(shè)數(shù)值,例如可以為“1”,當(dāng)有效標(biāo)志位的數(shù)值為“1”時(shí),則可以判斷出應(yīng)用程序處于有效狀態(tài)。
本實(shí)施例中,預(yù)先將應(yīng)用程序與第二引導(dǎo)程序相互更新的更新邏輯寫入第一引導(dǎo)程序,然后第一引導(dǎo)程序固化到存儲(chǔ)器中,當(dāng)目標(biāo)程序更新失敗后,則可以在返回重新啟動(dòng)時(shí),重新定位到第一引導(dǎo)程序的位置,啟動(dòng)該第一引導(dǎo)程序引導(dǎo)執(zhí)行更新邏輯。尤其針對bootloader的更新,在更新失敗后也能夠繼續(xù)對第二引導(dǎo)程序進(jìn)行更新,從而可以解決現(xiàn)有技術(shù)中當(dāng)bootloader更新失敗后存在無法啟動(dòng)進(jìn)而導(dǎo)致ecu無法正常使用的問題。
圖3為本發(fā)明實(shí)施例提供的另一種程序更新方法的流程示意圖。目標(biāo)應(yīng)用程序可以為應(yīng)用程序,也可以為第二引導(dǎo)程序。兩者均按照圖3所示的流程進(jìn)行更新。本實(shí)施例提供的程序更新方法,可以應(yīng)用在ecu、muc等各種控制系統(tǒng)中。如圖3所示,該程序更新方法包括以下步驟:
s301、系統(tǒng)啟動(dòng)第一引導(dǎo)程序。
本實(shí)施例中,由于預(yù)先將第一引導(dǎo)程序固化到存儲(chǔ)器的啟動(dòng)位置。當(dāng)目標(biāo)程序更新失敗后,則系統(tǒng)可以返回到存儲(chǔ)器的啟動(dòng)位置,重新啟動(dòng)第一引導(dǎo)程序。第一引導(dǎo)程序就可以按照預(yù)設(shè)的更新邏輯重新對目標(biāo)程序進(jìn)行更新。目標(biāo)應(yīng)用程序可以為應(yīng)用程序,也可以為第二引導(dǎo)程序。兩者的更新均按照圖3所示的流程。
本實(shí)施例中,設(shè)定的更新邏輯為應(yīng)用程序和第二引導(dǎo)程序相互更新。例如,當(dāng)目標(biāo)程序?yàn)閼?yīng)用程序時(shí),則通過第二引導(dǎo)程序完成應(yīng)用程序的更新,而當(dāng)目標(biāo)程序?yàn)榈诙龑?dǎo)程序時(shí),則通過應(yīng)用程序完成第二引導(dǎo)程序的更新。實(shí)際應(yīng)用中,應(yīng)用程序的更新需要在第二引導(dǎo)程序有效狀態(tài)才能夠完成,而第二引導(dǎo)程序的更新需要在應(yīng)用程序有效情況下才能夠完成。本實(shí)施例中,按照應(yīng)用程序與第二引導(dǎo)程序中至少有一個(gè)處于有效狀態(tài),形成上述更新邏輯。
本實(shí)施例中,預(yù)先將存儲(chǔ)器的存儲(chǔ)空間進(jìn)行劃分,具體地,將第一引導(dǎo)程序固化到啟動(dòng)位置對應(yīng)的第一存儲(chǔ)空間中。進(jìn)一步地,從剩余的存儲(chǔ)空間中選取一個(gè)作為第二存儲(chǔ)空間,第二存儲(chǔ)空間用于存放存儲(chǔ)器的配置參數(shù),其中,該配置參數(shù)包括存儲(chǔ)器的分配信息,即每個(gè)存儲(chǔ)空間的地址信息、所存放的內(nèi)容、存儲(chǔ)空間的大小等。進(jìn)一步地,配置參數(shù)還包括目標(biāo)程序的有效標(biāo)識(shí)位,即應(yīng)用程序的有效標(biāo)志位以及第二引導(dǎo)程序的有效標(biāo)志位。配置參數(shù)中還可以包括目標(biāo)程序的版本號(hào)、更新時(shí)間等信息,即應(yīng)用程序的版本號(hào)、更新時(shí)間以及第二引導(dǎo)程序的版本號(hào)、更新時(shí)間。
本實(shí)施例中,在除第一存儲(chǔ)空間和第二存儲(chǔ)空間之外的剩余存儲(chǔ)空間中,來存放第二引導(dǎo)程序和應(yīng)用程序。進(jìn)一步地,應(yīng)用程序在運(yùn)行時(shí),還需要與系統(tǒng)相關(guān)的關(guān)鍵參數(shù)值,可以將這些關(guān)鍵參數(shù)值單獨(dú)存儲(chǔ)在另外的一個(gè)存儲(chǔ)空間中。在執(zhí)行應(yīng)用程序時(shí),系統(tǒng)可以從存放有標(biāo)定數(shù)據(jù)的存儲(chǔ)空間中讀取到標(biāo)定數(shù)據(jù)。
例如,可以將存儲(chǔ)器劃分成5個(gè)存儲(chǔ)空間,5個(gè)存儲(chǔ)空間分布可以存儲(chǔ):第一引導(dǎo)程序、配置參數(shù)、第二引導(dǎo)程序、應(yīng)用程序以及應(yīng)用程序的標(biāo)定數(shù)據(jù)。其中,標(biāo)定數(shù)據(jù)為應(yīng)用程序執(zhí)行時(shí)與系統(tǒng)相關(guān)的關(guān)鍵參數(shù),如圖4所示。圖4為本發(fā)明實(shí)施例提供的一種存儲(chǔ)器的存儲(chǔ)空間劃分的示意圖。
s302、系統(tǒng)判斷是否需要更新應(yīng)用程序。
實(shí)際應(yīng)用中,在首次在系統(tǒng)中燒錄程序時(shí),必須燒錄第一引導(dǎo)程序、配置參數(shù)以及第二引導(dǎo)程序,進(jìn)一步地為了實(shí)現(xiàn)在系統(tǒng)中使用應(yīng)用程序,也可以將應(yīng)用程序一同燒錄到存儲(chǔ)器中??梢园凑丈鲜龃鎯?chǔ)器劃分方式,對程序進(jìn)行燒錄。燒錄完成后系統(tǒng)就可以在線進(jìn)行升級(jí)。
系統(tǒng)首次運(yùn)行燒錄的程序時(shí),啟動(dòng)后直接進(jìn)入第一引導(dǎo)程序,然后由第一引導(dǎo)程序判斷是否需要對應(yīng)用程序進(jìn)行更新。具體地,上位機(jī)可以通過總線向系統(tǒng)發(fā)送的用于指示需要更新應(yīng)用程序的第一信號(hào),系統(tǒng)基于第一引導(dǎo)程序根據(jù)上位機(jī)發(fā)送的第一信號(hào),判斷是否需要更新應(yīng)用程序。如果需要更新則執(zhí)行s303。如果不需要更新,則執(zhí)行s304。
一般情況下,當(dāng)系統(tǒng)中燒錄了應(yīng)用程序后,首次執(zhí)行第一引導(dǎo)程序時(shí),系統(tǒng)往往不會(huì)接收到上位機(jī)通過總線發(fā)送來的第一信號(hào),即并不需要對應(yīng)用程序進(jìn)行更新。
s303、系統(tǒng)根據(jù)第二引導(dǎo)程序的有效標(biāo)志位判斷第二引導(dǎo)程序是否有效。
具體地,可以從配置參數(shù)所在的第二存儲(chǔ)空間中,讀取到第二引導(dǎo)程序的有效標(biāo)志位,如果當(dāng)前要更新的目標(biāo)程序?yàn)閼?yīng)用程序,則第二引導(dǎo)程序的有效標(biāo)志為預(yù)設(shè)數(shù)值,則可以判斷出第二引導(dǎo)程序處于有效狀態(tài),則執(zhí)行s305。如果第二引導(dǎo)程序的有效標(biāo)志位非預(yù)設(shè)數(shù)值,則可以判斷出第二引導(dǎo)程序處于失效狀態(tài),說明第二引導(dǎo)需要更新,則需要執(zhí)行s306繼續(xù)通過應(yīng)用程序來更新第二引導(dǎo)程序。
本實(shí)施例中,針對目標(biāo)程序一個(gè)版本的更新,需要在對該版本進(jìn)行初次更新之前,將目標(biāo)程序的有效標(biāo)志位的預(yù)設(shè)數(shù)值進(jìn)行清除,在對目標(biāo)程序該版本的一次更新失敗后,則下次更新時(shí)根據(jù)目標(biāo)程序的有效標(biāo)志位確定出目標(biāo)程序處于失效狀態(tài)。
即當(dāng)目標(biāo)程序?yàn)榈诙龑?dǎo)程序時(shí),如果上次更新第二引導(dǎo)程序失敗,第二引導(dǎo)程序的有效標(biāo)志的預(yù)設(shè)數(shù)值會(huì)在上次更新時(shí)被清除,根據(jù)清除后的有效標(biāo)志位,可以確定出第二引導(dǎo)程序處于無效狀態(tài)。如果出現(xiàn)第二引導(dǎo)程序處于無效狀態(tài),則執(zhí)行s306。
s305、系統(tǒng)進(jìn)入第二引導(dǎo)程序。
s307、系統(tǒng)更新應(yīng)用程序。
第二引導(dǎo)程序用于對應(yīng)用程序進(jìn)行更新,當(dāng)系統(tǒng)進(jìn)入到第二引導(dǎo)程序后,系統(tǒng)就可以利用第二引導(dǎo)成中的代碼塊對應(yīng)用程序進(jìn)行更新。當(dāng)對應(yīng)用程序更新完成后,系統(tǒng)就可以進(jìn)行復(fù)位。
s304、系統(tǒng)根據(jù)應(yīng)用程序的有效標(biāo)志位判斷應(yīng)用程序是否有效。
在判斷出應(yīng)該程序不需要更新時(shí),就可以繼續(xù)根據(jù)應(yīng)用程序的有效標(biāo)志位判斷應(yīng)用程序是否有效。具體地,系統(tǒng)在存儲(chǔ)器的第二存儲(chǔ)空間中存儲(chǔ)有配置參數(shù),其中,配置參數(shù)中包括應(yīng)用程序以及第二引導(dǎo)程序的有效標(biāo)志。系統(tǒng)可以從第二存儲(chǔ)空間中讀取到應(yīng)用程序的有效標(biāo)志位。系統(tǒng)可以根據(jù)有效標(biāo)志位的數(shù)值判斷應(yīng)用程序是否有效。一般情況下,應(yīng)用程序如果不需要更新,配置參數(shù)中應(yīng)用程序的有效標(biāo)志位為預(yù)設(shè)數(shù)值,即應(yīng)用程序有效則執(zhí)行s306。
當(dāng)目標(biāo)程序?yàn)閼?yīng)用程序時(shí),如果上次更新應(yīng)用程序失敗,應(yīng)用程序的有效標(biāo)志的預(yù)設(shè)數(shù)值會(huì)在上次更新時(shí)被清除,根據(jù)清除后的有效標(biāo)志位,可以確定出應(yīng)用程序處于無效狀態(tài)。一般情況下,應(yīng)用程序無效說明該應(yīng)用程序需要更新,則需要執(zhí)行s307。
實(shí)際應(yīng)用中,當(dāng)應(yīng)用程序在上次更新時(shí)更新失敗后且系統(tǒng)并未與上位機(jī)連接時(shí),雖然需要對應(yīng)用程序進(jìn)行更新,但是卻無法接收到上位機(jī)發(fā)送的指示信號(hào),此種情況下,由于未接收到更新的指示信號(hào),步驟s303判斷出并不需要對應(yīng)用程序進(jìn)行更新,但是實(shí)際上由于應(yīng)用程序上次更新失敗,仍然需要對應(yīng)用程序進(jìn)行更新。而且由于每次對應(yīng)用程序的版本進(jìn)更新時(shí),需要在對該版本進(jìn)行初次更新之前,將應(yīng)用程序的有效標(biāo)志位的預(yù)設(shè)數(shù)值進(jìn)行清除。在更新過程中,如果應(yīng)用程序更新失敗,則下次重新更新時(shí)可以根據(jù)應(yīng)用程序的有效標(biāo)志位確定出應(yīng)用程序無效,此種情況下,則需要執(zhí)行s307。
s306、系統(tǒng)進(jìn)入應(yīng)用程序。
s308、系統(tǒng)判斷是否需要更新第二引導(dǎo)程序。
當(dāng)?shù)诙龑?dǎo)程序需要更新時(shí),上位機(jī)可以通過總線向系統(tǒng)發(fā)送用于指示需要更新第二引導(dǎo)程序的第二信號(hào)。進(jìn)一步地,如果接收到第二信號(hào),系統(tǒng)可以確定需要對第二引導(dǎo)程序進(jìn)行更新,則執(zhí)行s310。如果未接收到第二信號(hào),系統(tǒng)可以確定出不需要對第二引導(dǎo)程序進(jìn)行更新,則執(zhí)行s312。
s310、系統(tǒng)更新第二引導(dǎo)程序。
系統(tǒng)在根據(jù)第二信號(hào)判斷出需要對第二引導(dǎo)程序進(jìn)行更新時(shí),系統(tǒng)就可以更新第二引導(dǎo)程序,具體地,可以通過總線從上位機(jī)上接收第二引導(dǎo)程序的更新內(nèi)容。在更新完第二引導(dǎo)程序后,系統(tǒng)復(fù)位。
s312、系統(tǒng)執(zhí)行應(yīng)用程序。
當(dāng)應(yīng)用程序根據(jù)第二信號(hào)判斷出第二引導(dǎo)程序不需要更新時(shí),系統(tǒng)直接執(zhí)行應(yīng)用程序,正常使用應(yīng)用程序提供的服務(wù)或者功能。系統(tǒng)執(zhí)行完應(yīng)用程序后,系統(tǒng)可以下電。
進(jìn)一步地,在更新完目標(biāo)程序后,系統(tǒng)可以根據(jù)目標(biāo)程序的實(shí)際大小調(diào)整目標(biāo)程序的所占用的存儲(chǔ)空間。具體地,系統(tǒng)可以根據(jù)目標(biāo)程序的實(shí)際大小,調(diào)整目標(biāo)程序所占用的存儲(chǔ)空間的大小和/或位置。本實(shí)施例中,在除第一存儲(chǔ)空間和第二存儲(chǔ)空間之外的存儲(chǔ)空間中存放目標(biāo)程序。系統(tǒng)可以更新后的目標(biāo)程序的實(shí)際大小,來靈活地調(diào)整存儲(chǔ)器中除第一存儲(chǔ)空間和第二存儲(chǔ)空間之間剩余存儲(chǔ)空間。例如,可以調(diào)整目標(biāo)程序存儲(chǔ)的位置,也可以調(diào)整目標(biāo)程序原來所占用空間大小。
實(shí)際應(yīng)用中,目標(biāo)程序更新成功后一般會(huì)導(dǎo)致存儲(chǔ)器中的配置參數(shù)發(fā)生變化,則當(dāng)目標(biāo)程序更新完成后,系統(tǒng)還需要對存儲(chǔ)器中第二存儲(chǔ)空間中的配置參數(shù)進(jìn)行更新。例如,當(dāng)目標(biāo)程序更新成功后,目標(biāo)程序的有效標(biāo)志位需要恢復(fù)成預(yù)設(shè)數(shù)值,這樣才能使得更新后的目標(biāo)程序被系統(tǒng)使用。再例如,可以將目標(biāo)程序的更新后的版本號(hào)以及更新時(shí)間等信息,更新到配置參數(shù)中。
再例如,目標(biāo)程序更新完成后,可能由于實(shí)際大小等問題,需要調(diào)整存儲(chǔ)空間的位置或者大小,調(diào)整完成后系統(tǒng)需要將更新后目標(biāo)程序所占的位置以及占用的空間大小,更新到配置參數(shù)中的存儲(chǔ)器的分配信息中。
為了理解本發(fā)明實(shí)施例提供的程序更新流程,以目標(biāo)程序?yàn)榈诙龑?dǎo)程序?yàn)槔M(jìn)行解釋說明。在初次執(zhí)行第一引導(dǎo)程序時(shí),第二引導(dǎo)程序和應(yīng)用程序均處于有效狀態(tài),并不需要進(jìn)行更新。當(dāng)檢測到第二引導(dǎo)程序需要更新時(shí),需要將第二引導(dǎo)程序的有效標(biāo)志為清除。此時(shí),應(yīng)用程序處于有效狀態(tài),從而在第二引導(dǎo)程序更新失敗后,系統(tǒng)返回重新啟動(dòng)第一引導(dǎo)程序后,在應(yīng)用程序不需要更新時(shí),進(jìn)行入到判斷應(yīng)用程序是否有效的步驟,由于此時(shí)應(yīng)用程序處于有效狀態(tài),系統(tǒng)則可以進(jìn)入到應(yīng)用程序,從而可以繼續(xù)通過應(yīng)用程序來更新第二引導(dǎo)程序。
而在應(yīng)用程序需要更新時(shí),進(jìn)入到第二引導(dǎo)程序的有效判斷步驟,由于第二引導(dǎo)程序上次更新未成功,系統(tǒng)只能進(jìn)入跳轉(zhuǎn)到應(yīng)用程序中,通過應(yīng)用程序來更新第二引導(dǎo)程序,直到在第二引導(dǎo)程序更新成功后,才能開始更新應(yīng)用程序。而且當(dāng)?shù)诙龑?dǎo)程序更新成功后,第二引導(dǎo)程序的有效標(biāo)志位恢復(fù)到預(yù)設(shè)數(shù)值。
由于第二引導(dǎo)程序此時(shí)有效,就可以進(jìn)入到第二引導(dǎo)程序,對應(yīng)用程序進(jìn)行更新。或者,當(dāng)應(yīng)用程序在上次更新時(shí)未更新成功,而且由于系統(tǒng)與上位機(jī)未連接,使得系統(tǒng)未接收到上位機(jī)發(fā)送的指示更新應(yīng)用程序的信號(hào),系統(tǒng)進(jìn)入到判斷應(yīng)用程序是否有效的步驟,由于此時(shí)應(yīng)用程序無效,則可以進(jìn)入第二引導(dǎo)程序,通過第二引導(dǎo)程序?qū)?yīng)用程序進(jìn)行更新,直到應(yīng)用程序更新完成,才能將應(yīng)用程序的有效標(biāo)志位恢復(fù)到預(yù)設(shè)數(shù)值。
本實(shí)施例提供的更新邏輯,可以保證應(yīng)用程序與第二引導(dǎo)程序中有至少一個(gè)處于有效狀態(tài),當(dāng)目標(biāo)程序中為其中一個(gè)時(shí),由于另一個(gè)為有效狀態(tài),而且第一引導(dǎo)程序固化在存儲(chǔ)器中,則可以在目標(biāo)程序更新失敗后,返回第一引導(dǎo)程序,重新對目標(biāo)程序進(jìn)行更新,直到該目標(biāo)程序更新完成,當(dāng)更新完成后目標(biāo)程序?yàn)橛行А1緦?shí)施例,可以實(shí)現(xiàn)應(yīng)用程序與第二引導(dǎo)程序相互更新升級(jí),尤其針對bootloader的更新,在更新失敗后也能夠繼續(xù)對第二引導(dǎo)程序進(jìn)行更新,從而可以解決現(xiàn)有技術(shù)中當(dāng)bootloader更新失敗后存在無法啟動(dòng)進(jìn)而導(dǎo)致ecu無法正常使用的問題。
圖5為本發(fā)明實(shí)施例提供的一種程序更新裝置的結(jié)構(gòu)示意圖。如圖5所示,該程序更新裝置包括:處理器11和存儲(chǔ)器12。
處理器11,用于在目標(biāo)程序更新失敗后,返回重新啟動(dòng)第一引導(dǎo)程序;其中,所述第一引導(dǎo)程序固化在存儲(chǔ)器12中;所述目標(biāo)程序?yàn)閼?yīng)用程序或者第二引導(dǎo)程序,執(zhí)行所述第一引導(dǎo)程序,按照所述第一引導(dǎo)程序中的更新邏輯,重新更新所述目標(biāo)程序。
進(jìn)一步地,處理器11,具體用于基于所述應(yīng)用程序和所述第二引導(dǎo)程序相互更新的更新邏輯,重新更新所述目標(biāo)程序。
處理器11,具體用于按照所述應(yīng)用程序與所述第二引導(dǎo)程序中至少有一個(gè)處于有效狀態(tài)形成所述更新邏輯。
處理器11,具體用于由所述第一引導(dǎo)程序判斷是否需要更新所述應(yīng)用程序,如果需要更新所述應(yīng)用程序且在所述第二引導(dǎo)程序有效時(shí),更新所述應(yīng)用程序。
處理器11,具體用于從所述存儲(chǔ)器12中讀取所述第二引導(dǎo)程序的有效標(biāo)志位,根據(jù)所述第二引導(dǎo)程序的有效標(biāo)志位,判斷所述第二引導(dǎo)程序是否有效。
處理器11,具體用于如果不需要更新所述應(yīng)用程序,在所述應(yīng)用程序有效且所述第二引導(dǎo)程序需要更新時(shí),更新所述第二引導(dǎo)程序。
處理器11,具體用于從所述存儲(chǔ)器12中讀取所述應(yīng)用程序的有效標(biāo)志位,根據(jù)所述應(yīng)用程序的有效標(biāo)志位,判斷所述應(yīng)用程序是否有效。
處理器11,具體用于針對所述目標(biāo)程序一個(gè)版本的更新,需要在對該版本進(jìn)行初次更新之前,將所述目標(biāo)程序的有效標(biāo)志位的預(yù)設(shè)數(shù)值進(jìn)行清除,在對所述目標(biāo)程序該版本的一次更新失敗后,則下次更新時(shí)根據(jù)所述目標(biāo)程序的有效標(biāo)志位確定出所述目標(biāo)程序處于失效狀態(tài)。
處理器11,具體用于預(yù)先對所述存儲(chǔ)器12進(jìn)行存儲(chǔ)區(qū)域劃分,形成多個(gè)存儲(chǔ)空間,將所述第一引導(dǎo)程序固化在第一存儲(chǔ)空間中;所述第一存儲(chǔ)空間為系統(tǒng)啟動(dòng)的啟動(dòng)位置,從剩余的存儲(chǔ)空間中選取第二存儲(chǔ)空間,其中,所述第二存儲(chǔ)空間用于存儲(chǔ)配置參數(shù);所述配置參數(shù)包括所述存儲(chǔ)器12的分配信息和所述目標(biāo)程序的有效標(biāo)志位,在除所述第一存儲(chǔ)空間和第二存儲(chǔ)空間之外的存儲(chǔ)空間中存放所述目標(biāo)程序。
處理器11,具體用于在更新完成后,根據(jù)所述目標(biāo)程序的實(shí)際大小調(diào)整所述目標(biāo)程序的所占用的存儲(chǔ)空間。
處理器11,具體用于所述目標(biāo)程序更新成功后,更新存儲(chǔ)在所述第二存儲(chǔ)空間的所述配置參數(shù)。
處理器11,具體用于當(dāng)所述目標(biāo)程序?yàn)樗鰬?yīng)用程序時(shí),所述目標(biāo)程序更新成功后,更新存儲(chǔ)在所述存儲(chǔ)器12中的標(biāo)定數(shù)據(jù),其中,所述標(biāo)定數(shù)據(jù)為所述應(yīng)用程序執(zhí)行時(shí)與系統(tǒng)相關(guān)的關(guān)鍵參數(shù)值。
處理器11和存儲(chǔ)器12可以通過總線相互連接并完成相互間的通信。所述總線可以是工業(yè)標(biāo)準(zhǔn)體系結(jié)構(gòu)(industrystandardarchitecture,簡稱為isa)總線、外部設(shè)備互連(peripheralcomponent,簡稱為pci)總線或擴(kuò)展工業(yè)標(biāo)準(zhǔn)體系結(jié)構(gòu)(extendedindustrystandardarchitecture,簡稱為eisa)總線等。所述總線可以分為地址總線、數(shù)據(jù)總線、控制總線等。為便于表示,圖5中僅用一條粗線表示,但并不表示僅有一根總線或一種類型的總線。
處理器11可能是一個(gè)中央處理器(centralprocessingunit,簡稱為cpu),或者是特定集成電路(applicationspecificintegratedcircuit,簡稱為asic),或者是被配置成實(shí)施本發(fā)明實(shí)施例的一個(gè)或多個(gè)集成電路。
在本說明書的描述中,參考術(shù)語“一個(gè)實(shí)施例”、“一些實(shí)施例”、“示例”、“具體示例”、或“一些示例”等的描述意指結(jié)合該實(shí)施例或示例描述的具體特征、結(jié)構(gòu)、材料或者特點(diǎn)包含于本發(fā)明的至少一個(gè)實(shí)施例或示例中。在本說明書中,對上述術(shù)語的示意性表述不必須針對的是相同的實(shí)施例或示例。而且,描述的具體特征、結(jié)構(gòu)、材料或者特點(diǎn)可以在任一個(gè)或多個(gè)實(shí)施例或示例中以合適的方式結(jié)合。此外,在不相互矛盾的情況下,本領(lǐng)域的技術(shù)人員可以將本說明書中描述的不同實(shí)施例或示例以及不同實(shí)施例或示例的特征進(jìn)行結(jié)合和組合。
此外,術(shù)語“第一”、“第二”僅用于描述目的,而不能理解為指示或暗示相對重要性或者隱含指明所指示的技術(shù)特征的數(shù)量。由此,限定有“第一”、“第二”的特征可以明示或者隱含地包括至少一個(gè)該特征。在本發(fā)明的描述中,“多個(gè)”的含義是至少兩個(gè),例如兩個(gè),三個(gè)等,除非另有明確具體的限定。
流程圖中或在此以其他方式描述的任何過程或方法描述可以被理解為,表示包括一個(gè)或更多個(gè)用于實(shí)現(xiàn)定制邏輯功能或過程的步驟的可執(zhí)行指令的代碼的模塊、片段或部分,并且本發(fā)明的優(yōu)選實(shí)施方式的范圍包括另外的實(shí)現(xiàn),其中可以不按所示出或討論的順序,包括根據(jù)所涉及的功能按基本同時(shí)的方式或按相反的順序,來執(zhí)行功能,這應(yīng)被本發(fā)明的實(shí)施例所屬技術(shù)領(lǐng)域的技術(shù)人員所理解。
在流程圖中表示或在此以其他方式描述的邏輯和/或步驟,例如,可以被認(rèn)為是用于實(shí)現(xiàn)邏輯功能的可執(zhí)行指令的定序列表,可以具體實(shí)現(xiàn)在任何計(jì)算機(jī)可讀介質(zhì)中,以供指令執(zhí)行系統(tǒng)、裝置或設(shè)備(如基于計(jì)算機(jī)的系統(tǒng)、包括處理器的系統(tǒng)或其他可以從指令執(zhí)行系統(tǒng)、裝置或設(shè)備取指令并執(zhí)行指令的系統(tǒng))使用,或結(jié)合這些指令執(zhí)行系統(tǒng)、裝置或設(shè)備而使用。就本說明書而言,"計(jì)算機(jī)可讀介質(zhì)"可以是任何可以包含、存儲(chǔ)、通信、傳播或傳輸程序以供指令執(zhí)行系統(tǒng)、裝置或設(shè)備或結(jié)合這些指令執(zhí)行系統(tǒng)、裝置或設(shè)備而使用的裝置。計(jì)算機(jī)可讀介質(zhì)的更具體的示例(非窮盡性列表)包括以下:具有一個(gè)或多個(gè)布線的電連接部(電子裝置),便攜式計(jì)算機(jī)盤盒(磁裝置),隨機(jī)存取存儲(chǔ)器(ram),只讀存儲(chǔ)器(rom),可擦除可編輯只讀存儲(chǔ)器(eprom或閃速存儲(chǔ)器),光纖裝置,以及便攜式光盤只讀存儲(chǔ)器(cdrom)。另外,計(jì)算機(jī)可讀介質(zhì)甚至可以是可在其上打印所述程序的紙或其他合適的介質(zhì),因?yàn)榭梢岳缤ㄟ^對紙或其他介質(zhì)進(jìn)行光學(xué)掃描,接著進(jìn)行編輯、解譯或必要時(shí)以其他合適方式進(jìn)行處理來以電子方式獲得所述程序,然后將其存儲(chǔ)在計(jì)算機(jī)存儲(chǔ)器中。
應(yīng)當(dāng)理解,本發(fā)明的各部分可以用硬件、軟件、固件或它們的組合來實(shí)現(xiàn)。在上述實(shí)施方式中,多個(gè)步驟或方法可以用存儲(chǔ)在存儲(chǔ)器中且由合適的指令執(zhí)行系統(tǒng)執(zhí)行的軟件或固件來實(shí)現(xiàn)。如,如果用硬件來實(shí)現(xiàn)和在另一實(shí)施方式中一樣,可用本領(lǐng)域公知的下列技術(shù)中的任一項(xiàng)或他們的組合來實(shí)現(xiàn):具有用于對數(shù)據(jù)信號(hào)實(shí)現(xiàn)邏輯功能的邏輯門電路的離散邏輯電路,具有合適的組合邏輯門電路的專用集成電路,可編程門陣列(pga),現(xiàn)場可編程門陣列(fpga)等。
本技術(shù)領(lǐng)域的普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法攜帶的全部或部分步驟是可以通過程序來指令相關(guān)的硬件完成,所述的程序可以存儲(chǔ)于一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),包括方法實(shí)施例的步驟之一或其組合。
此外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理模塊中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)模塊中。上述集成的模塊既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能模塊的形式實(shí)現(xiàn)。所述集成的模塊如果以軟件功能模塊的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),也可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中。
上述提到的存儲(chǔ)介質(zhì)可以是只讀存儲(chǔ)器,磁盤或光盤等。盡管上面已經(jīng)示出和描述了本發(fā)明的實(shí)施例,可以理解的是,上述實(shí)施例是示例性的,不能理解為對本發(fā)明的限制,本領(lǐng)域的普通技術(shù)人員在本發(fā)明的范圍內(nèi)可以對上述實(shí)施例進(jìn)行變化、修改、替換和變型。