本發(fā)明屬于ecu軟件技術(shù)領(lǐng)域,具體公開(kāi)一種防止系統(tǒng)ecu軟件被誤升級(jí)的解決方法。
背景技術(shù):
ecu(electroniccontrolunit)電子控制單元,即行車(chē)電腦,是車(chē)輛電子控制系統(tǒng)中的核心元器件;目前,汽車(chē)制造商在車(chē)輛召回或技術(shù)更新時(shí),常常需要升級(jí)車(chē)輛的ecu軟件,ecu軟件升級(jí)主要指通過(guò)重新改寫(xiě)ecu存儲(chǔ)程序進(jìn)行ecu軟件的升級(jí),可以達(dá)到提升動(dòng)力、增加馬力、扭矩或降低油耗、優(yōu)化汽車(chē)性能的目的。ecu軟件升級(jí)中會(huì)面臨著升級(jí)文件被誤用而導(dǎo)致的一系列問(wèn)題,需要提供防止升級(jí)文件被誤用而被誤升級(jí)的解決方法。
本發(fā)明針對(duì)提供一種防止ecu軟件被誤升級(jí)的解決方法,所述的ecu為飛思卡爾芯片,軟件開(kāi)發(fā)環(huán)境為freescalecodewarrior系列,編譯生成的程序文件為s-record格式文件。s-record格式文件是freescalecodewarrior編譯器生成的后綴名為.s19的程序文件,是一段直接燒寫(xiě)進(jìn)mcu的ascii碼,英文全稱(chēng)問(wèn)motorolaformatforeepromprogramming。
對(duì)s-record格式文件的介紹如下:
s-record每行最大是78個(gè)字節(jié),156個(gè)字符
s-recordformat為:typecountaddressdatachecksum
type(類(lèi)型):2個(gè)字符,用來(lái)描述記錄的類(lèi)型(s0,s1,s2,s3,s5,s7,s8,s9)。
count(計(jì)數(shù)):2個(gè)字符,用來(lái)組成和說(shuō)明了一個(gè)16進(jìn)制的值,顯示了在記錄中剩余成對(duì)字符的計(jì)數(shù)。
address(地址):4或6或8個(gè)字節(jié),用來(lái)組成和說(shuō)明了一個(gè)16進(jìn)制的值,顯示了數(shù)據(jù)應(yīng)該裝載的地址,這部分的長(zhǎng)度取決于載入地址的字節(jié)數(shù)。2個(gè)字節(jié)的地址占用4個(gè)字符,3個(gè)字節(jié)的地址占用6個(gè)字符,4個(gè)字節(jié)的地址占用8個(gè)字符。
data(數(shù)據(jù)):0—64字符,用來(lái)組成和說(shuō)明一個(gè)代表了內(nèi)存載入數(shù)據(jù)或者描述信息的16進(jìn)制的值。
checksum(校驗(yàn)和):2個(gè)字符,這些字符當(dāng)被配對(duì)并換算成16進(jìn)制數(shù)據(jù)的時(shí)候形成了一個(gè)最低有效字符節(jié),該字符節(jié)用來(lái)表達(dá)作為補(bǔ)充數(shù)據(jù),地址和數(shù)據(jù)庫(kù)的字符對(duì)所代表的(字節(jié)的)補(bǔ)碼的byte總和;即計(jì)數(shù)值、地址場(chǎng)和數(shù)據(jù)場(chǎng)的若干字符以?xún)蓚€(gè)字符為一對(duì),將它們相加求和,和的溢出部分不計(jì),只保留最低兩位字符nn,checksum=0xff-0xnn。
s0record:記錄類(lèi)型是“s0”(0x5330)。地址場(chǎng)沒(méi)有被用,用零置位(0x0000)。數(shù)據(jù)場(chǎng)中的信息被劃分為以下四個(gè)子域:
name(名稱(chēng)):20個(gè)字符,用來(lái)編碼單元名稱(chēng);
ver(版本):2個(gè)字符,用來(lái)編碼版本號(hào);
rev(修訂版本):2個(gè)字符,用來(lái)編碼修訂版本號(hào);
description(描述):0-36個(gè)字符,用來(lái)編碼文本注釋?zhuān)?/p>
此行表示程序的開(kāi)始,不需燒入memory。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明針對(duì)現(xiàn)有技術(shù)的不足,提供一種防止ecu軟件被誤升級(jí)的解決方法。
本發(fā)明采用的技術(shù)方案如下:
一種防止系統(tǒng)ecu軟件被誤升級(jí)的解決方法,其特征在于:通過(guò)配置codewarrior工程文件的方法增加工程鎖定信息,編譯工程文件生成s19升級(jí)文件,從s19升級(jí)文件中復(fù)制出工程鎖定信息字符串,把此工程鎖定信息字符串作為靜態(tài)數(shù)據(jù)寫(xiě)到ecu軟件的源代碼中,并指定其編譯后存儲(chǔ)在flash參數(shù)分區(qū)中的地址,在升級(jí)ecu軟件的應(yīng)用代碼前,上位機(jī)從s19升級(jí)文件中解析出工程鎖定信息,并與flash中存儲(chǔ)的工程鎖定信息做算法比對(duì),算法比對(duì)結(jié)果一致的情況下允許應(yīng)用代碼升級(jí),否則不做任何更改。
進(jìn)一步的,還包括在應(yīng)用代碼升級(jí)過(guò)程完成之后進(jìn)行的數(shù)據(jù)完整有效性的驗(yàn)證過(guò)程。
所述的數(shù)據(jù)完整有效性的驗(yàn)證,是指對(duì)ecu接收到的s19升級(jí)文件和上位機(jī)中的s19文件數(shù)據(jù)進(jìn)行相同的crc算法驗(yàn)證,如果驗(yàn)證結(jié)果一致,則ecu軟件升級(jí)有效;否則,ecu軟件升級(jí)無(wú)效。
進(jìn)一步的,所述的工程鎖定信息做算法比對(duì)包括采用crc算法對(duì)ecu中的工程鎖定信息和上位機(jī)從s19文件中解析出的工程鎖定信息比較驗(yàn)證過(guò)程,以及crc算法校驗(yàn)通過(guò)后,將工程鎖定信息結(jié)合解鎖密鑰、隨機(jī)數(shù)進(jìn)行的hash算法比對(duì)過(guò)程。
在上位機(jī)和ecu應(yīng)用系統(tǒng)之間第一次進(jìn)行通訊時(shí),先在ecu的應(yīng)用軟件區(qū)域和上位機(jī)之間采用crc算法對(duì)工程鎖定信息進(jìn)行比較驗(yàn)證,如果驗(yàn)證通過(guò),則ecu應(yīng)用系統(tǒng)清除flash中的對(duì)應(yīng)的啟動(dòng)標(biāo)志,ecu應(yīng)用系統(tǒng)復(fù)位并進(jìn)入bootloader中,在bootloader中執(zhí)行采用hash算法對(duì)工程鎖定信息、解鎖密鑰、隨機(jī)數(shù)進(jìn)行處理的操作,其中,隨機(jī)數(shù)是ecu的bootloader接收到上位機(jī)發(fā)送的指令請(qǐng)求后隨機(jī)生成的,ecu的bootloader將生成的隨機(jī)數(shù)存儲(chǔ)并通過(guò)uds通信協(xié)議發(fā)送給上位機(jī),供上位機(jī)生成校驗(yàn)碼使用。
進(jìn)一步的,所述的hash算法比對(duì)過(guò)程具體如下:
ecu應(yīng)用系統(tǒng)采用hash算法處理存儲(chǔ)于flash中ecu軟件應(yīng)用代碼區(qū)的工程鎖定信息、解鎖密鑰、隨機(jī)數(shù)生成一串唯一校驗(yàn)碼一;
上位機(jī)采用hash算法處理s19文件中的工程鎖定信息、解鎖密鑰、隨機(jī)數(shù)生成一串唯一校驗(yàn)碼二;
上位機(jī)通過(guò)uds通信協(xié)議將生成的唯一校驗(yàn)碼二發(fā)送給ecu應(yīng)用系統(tǒng),ecu應(yīng)用系統(tǒng)接收該校驗(yàn)碼,并和自身生成的校驗(yàn)碼二比較;如果結(jié)合一致,則ecu應(yīng)用系統(tǒng)解鎖,執(zhí)行上位機(jī)發(fā)送的升級(jí)文件s19進(jìn)行應(yīng)用代碼升級(jí)流程。
本發(fā)明通過(guò)增加工程鎖定信息保護(hù)代碼的有效與安全。將工程鎖定信息添置到s19文件的s0行和flash中的應(yīng)用代碼區(qū)域,對(duì)二者進(jìn)行算法比對(duì),避免了直接發(fā)送工程信息內(nèi)容,只需要結(jié)合解鎖密鑰和隨機(jī)數(shù)生成解鎖信息,通過(guò)uds協(xié)議將解鎖信息發(fā)送至ecu完成解鎖允許升級(jí),如此使軟件結(jié)構(gòu)更加清晰,過(guò)程更加安全;進(jìn)一步的,采用crc算法對(duì)升級(jí)結(jié)果進(jìn)行驗(yàn)證,保證了升級(jí)的有效性;本發(fā)明確保了ecu軟件運(yùn)行的安全可靠,也可以推廣到其他領(lǐng)域的軟件升級(jí)保護(hù)等。
附圖說(shuō)明
圖1為本發(fā)明的流程圖。
具體實(shí)施方式
如圖1所示的本實(shí)施例所述的一種防止系統(tǒng)ecu軟件被誤升級(jí)的解決方法,其特征在于:通過(guò)配置codewarrior工程文件的方法增加工程鎖定信息,編譯工程文件生成s19升級(jí)文件,從s19升級(jí)文件中復(fù)制出工程鎖定信息字符串,把此工程鎖定信息字符串作為靜態(tài)數(shù)據(jù)寫(xiě)到ecu軟件的源代碼中,并指定其編譯后存儲(chǔ)在flash參數(shù)分區(qū)中的地址,所述flash存儲(chǔ)空間分boot分區(qū),參數(shù)分區(qū)和應(yīng)用分區(qū),在升級(jí)ecu軟件的應(yīng)用代碼前,上位機(jī)從s19升級(jí)文件中解析出工程鎖定信息,并與flash中存儲(chǔ)的工程鎖定信息做算法比對(duì),算法比對(duì)結(jié)果一致的情況下允許應(yīng)用代碼升級(jí),否則不做任何更改。
本方法的實(shí)現(xiàn)分布在ecu應(yīng)用軟件和bootloader中,所述的工程鎖定信息的生成方法包括以下步驟:
(1)、在codewarrioride中打開(kāi)應(yīng)用工程,選菜單edit->standardsetting,打開(kāi)工程設(shè)置,在列表target選linkerforhc12,在右邊欄applicationfilename編輯框輸入工程相關(guān)信息作為唯一的工程鎖定信息,以區(qū)別其他工程,點(diǎn)擊apply確認(rèn)應(yīng)用;
(2)、在列表target選burnerforhc12,在右邊欄點(diǎn)option,打開(kāi)對(duì)話(huà)框burneroptionsettings,在output標(biāo)簽頁(yè)內(nèi)勾選configures-records,再勾選nopathins0record,剩余其他項(xiàng)不勾選即可,點(diǎn)擊確認(rèn)按鈕;重新編譯代碼,生成的s19文件的s0則包含有工程鎖定信息,把s0記錄的data域和校驗(yàn)域一并復(fù)制,粘貼在ecu軟件的源代碼中,例:
s0記錄為:s00f00004d313650484556325f4243559e
ecu軟件的源代碼中對(duì)應(yīng)的數(shù)據(jù)為:
constint8u_project_print_[32]@0xdee0="4d313650484556325f4243559e";
注:代碼中的存放地址0xdee0是根據(jù)工程內(nèi)存分配的獨(dú)立空間,大小為32字節(jié)。
從升級(jí)準(zhǔn)確性保障角度考慮,本發(fā)明還包括在應(yīng)用代碼升級(jí)過(guò)程完成之后進(jìn)行的數(shù)據(jù)完整有效性的驗(yàn)證過(guò)程。
所述的數(shù)據(jù)完整有效性的驗(yàn)證過(guò)程具體如下:所述的數(shù)據(jù)完整有效性的驗(yàn)證,是指對(duì)ecu接收到的文件數(shù)據(jù)和上位機(jī)中的s19文件數(shù)據(jù)進(jìn)行相同的crc算法驗(yàn)證,如果驗(yàn)證結(jié)果一致,則ecu軟件升級(jí)有效;否則,ecu軟件升級(jí)無(wú)效。
具體的,所述的工程鎖定信息做算法比對(duì)包括采用crc算法對(duì)位于ecu和上位機(jī)從s19文件中解析出的工程鎖定信息比較驗(yàn)證過(guò)程,以及crc算法校驗(yàn)通過(guò)后,在將工程鎖定信息結(jié)合解鎖密鑰、隨機(jī)數(shù)進(jìn)行的hash算法比對(duì)過(guò)程。
在具體實(shí)施時(shí),在上位機(jī)和ecu應(yīng)用系統(tǒng)之間第一次進(jìn)行通訊時(shí),先在ecu的應(yīng)用軟件區(qū)域和上位機(jī)之間采用crc算法對(duì)工程鎖定信息進(jìn)行比較驗(yàn)證,該過(guò)程快速,提供了升級(jí)安全的第一道保障;如果驗(yàn)證通過(guò),則ecu應(yīng)用系統(tǒng)清除flash中的對(duì)應(yīng)的啟動(dòng)標(biāo)志,系統(tǒng)復(fù)位并進(jìn)入bootloader中,在bootloader中執(zhí)行采用hash算法對(duì)工程鎖定信息、解鎖密鑰、隨機(jī)數(shù)進(jìn)行處理的操作,其中,隨機(jī)數(shù)是ecu應(yīng)用系統(tǒng)接收到上位機(jī)發(fā)送的指令請(qǐng)求后隨機(jī)生成的,ecu應(yīng)用系統(tǒng)將生成的隨機(jī)數(shù)存儲(chǔ)并通過(guò)uds通信協(xié)議發(fā)送給上位機(jī),供上位機(jī)生成校驗(yàn)碼使用。
在具體實(shí)施過(guò)程中,所述的hash算法比對(duì)過(guò)程具體如下:
ecu應(yīng)用系統(tǒng)采用hash算法處理存儲(chǔ)于flash中ecu軟件應(yīng)用代碼區(qū)的工程鎖定信息、解鎖密鑰、隨機(jī)數(shù)生成一串唯一校驗(yàn)碼一;
上位機(jī)采用hash算法處理s19文件中的工程鎖定信息、解鎖密鑰、隨機(jī)數(shù)生成一串唯一校驗(yàn)碼二;
ecu應(yīng)用系統(tǒng)和上位機(jī)之間采用uds協(xié)議,上位機(jī)通過(guò)uds的安全訪問(wèn)服務(wù)(27hex)將生成的唯一校驗(yàn)碼二發(fā)送給ecu應(yīng)用系統(tǒng),ecu應(yīng)用系統(tǒng)接收該校驗(yàn)碼,并和自身生成的校驗(yàn)碼二比較;如果結(jié)合一致,則ecu應(yīng)用系統(tǒng)解鎖,執(zhí)行上位機(jī)發(fā)送的升級(jí)文件s19進(jìn)行應(yīng)用代碼升級(jí)流程。
以上所述僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明,盡管參照前述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,對(duì)于本領(lǐng)域的技術(shù)人員來(lái)說(shuō),其依然可以對(duì)前述實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分技術(shù)特征進(jìn)行等同替換。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。