一種生成通用的升級(jí)文件頭部數(shù)據(jù)信息的方法
【專利摘要】一種生成通用的升級(jí)文件頭部數(shù)據(jù)信息結(jié)構(gòu)的方法,首先定義頭部配置文件的腳本語言的格式,設(shè)計(jì)滿足該格式的升級(jí)文件頭部生成解析器,升級(jí)文件頭部生成解析器一次性提取腳本語言配置文件,逐行讀取腳本文件并索引記錄,然后進(jìn)行腳本語言規(guī)范性檢查,升級(jí)文件頭部生成解析器接著對(duì)腳本語言中的所需數(shù)據(jù)進(jìn)行地址的分配,最后升級(jí)文件頭部生成解析器將該頭部緩存buffer一次性寫入到被升級(jí)文件生成的輸出文件中的頭部,再從end語句的偏移地址offset定義的地址處開始,寫入輸入的原始的被升級(jí)文件。本發(fā)明提高了升級(jí)文件的頭部數(shù)據(jù)結(jié)構(gòu)生成的利用效率。
【專利說明】一種生成通用的升級(jí)文件頭部數(shù)據(jù)信息的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種生成通用的升級(jí)文件頭部數(shù)據(jù)信息結(jié)構(gòu)的方法。
【背景技術(shù)】
[0002]在通信行業(yè)的嵌入式系統(tǒng)中,為了方便對(duì)通信設(shè)備相關(guān)軟件升級(jí)的管理,需要在被升級(jí)文件的頭部生成一個(gè)用于識(shí)別與管理的頭部數(shù)據(jù)信息,在升級(jí)過程中通過對(duì)該文件的頭部信息數(shù)據(jù)進(jìn)行識(shí)別,來確定該文件的類型、文件的原始MD5 (消息摘要MessageDigest 5)校驗(yàn)碼及其其它需要進(jìn)行確定的信息,以此來確保升級(jí)文件的正確與完整性。
[0003]現(xiàn)有的升級(jí)文件頭部數(shù)據(jù)生成方法是由各個(gè)項(xiàng)目工程各自分別實(shí)現(xiàn)的,這里簡單描述一下原有技術(shù)一般的實(shí)現(xiàn)方法:根據(jù)項(xiàng)目工程中升級(jí)文件的頭部數(shù)據(jù)結(jié)構(gòu)信息,如用于確定該文件的類型、文件的原始MD5校驗(yàn)碼及其其它需要進(jìn)行確定的信息等,由此來編制一種用于實(shí)現(xiàn)該頭部數(shù)據(jù)結(jié)構(gòu)信息生成軟件工具。例如,為該工具提供文件頭部所需的數(shù)據(jù)信息,如,文件格式類型,生成日期,文件大小,MD5校驗(yàn)碼等,那么工具會(huì)將這些數(shù)據(jù)信息,以該工程事先確定好的格式與位置來組織,并添加生成到指定的文件的頭部中。
[0004]這種實(shí)現(xiàn)方法是一種非常私有和不同的方法,只能夠用于同類型的項(xiàng)目工程的頭部結(jié)構(gòu)中,而不能夠成為一種通用的項(xiàng)目工程升級(jí)文件管理的頭部數(shù)據(jù)結(jié)構(gòu)生成工程(因此,目前并沒有一個(gè)可用于公開的升級(jí)文件頭部生成的實(shí)現(xiàn)方法的專利),并沒有一個(gè)統(tǒng)一與通用的實(shí)現(xiàn)工具。
[0005]很明顯的,現(xiàn)有的技術(shù)沒有一個(gè)統(tǒng)一規(guī)范的升級(jí)文件管理用的頭部數(shù)據(jù)結(jié)構(gòu)生成工具,無法形成一個(gè)行業(yè)需求的統(tǒng)一規(guī)范及其工具,甚至在同一個(gè)公司內(nèi)部的不同項(xiàng)目工程也可能需要不能的各自實(shí)現(xiàn)的不能通用的工具,由此降低了升級(jí)文件管理需求利用效率。這是由于現(xiàn)有技術(shù)中的做法均是將各個(gè)數(shù)據(jù)地址固定死的,針對(duì)同一個(gè)頭部結(jié)構(gòu)的需求,將相應(yīng)數(shù)據(jù)固定的填充到一個(gè)相對(duì)應(yīng)的地址處,因?yàn)檫@樣的實(shí)現(xiàn)方法是最直接,最簡單的,而這樣就決定了其相應(yīng)的頭部生成工具只能被固定的應(yīng)用于同一類相對(duì)應(yīng)的頭部結(jié)構(gòu)需求中。
[0006]而為了適應(yīng)在大企業(yè)內(nèi)部各種不同項(xiàng)目工程所需要升級(jí)文件頭部信息管理,以及在行業(yè)內(nèi)形成一個(gè)通用的頭部生成工具,因此需要設(shè)計(jì)一套通用的升級(jí)文件頭部生成解析器工具,來為各類項(xiàng)目提供通用的升級(jí)文件頭部生成工具。
【發(fā)明內(nèi)容】
[0007]本發(fā)明提供一種生成通用的升級(jí)文件頭部數(shù)據(jù)信息結(jié)構(gòu)的方法,提高了升級(jí)文件的頭部數(shù)據(jù)結(jié)構(gòu)生成的利用效率。
[0008]為了達(dá)到上述目的,本發(fā)明提供一種生成通用的升級(jí)文件頭部數(shù)據(jù)信息結(jié)構(gòu)的方法,該方法包含以下步驟:
步驟1、定義頭部配置文件的腳本語言的格式,設(shè)計(jì)滿足該格式的升級(jí)文件頭部生成解析器;步驟2、升級(jí)文件頭部生成解析器一次性提取腳本語言配置文件,逐行讀取腳本文件并索引記錄;
對(duì)于每條腳本語句,升級(jí)文件頭部生成解析器都會(huì)以此給予一個(gè)序號(hào),并對(duì)應(yīng)的成為一個(gè)記錄,該序號(hào)作為該語句記錄的索引index ;
步驟3、進(jìn)行腳本語言規(guī)范性檢查; 升級(jí)文件頭部生成解析器根據(jù)索引序號(hào)依次檢測(cè)腳本語言的規(guī)范性,對(duì)于不符合步驟I中定義的規(guī)范的,會(huì)給予警告或者錯(cuò)誤提示,升級(jí)文件頭部生成解析器一旦發(fā)現(xiàn)錯(cuò)誤則立即退出流程,并為用戶提供包含有腳本錯(cuò)誤語句所在文件中l(wèi)ine行數(shù)及其錯(cuò)誤描述的錯(cuò)
誤告警信息;
步驟4、升級(jí)文件頭部生成解析器對(duì)腳本語言中的所需數(shù)據(jù)進(jìn)行地址的分配;
步驟5、當(dāng)所有記錄根據(jù)步驟4的規(guī)則被逐條寫入到頭部緩存buffer中之后,升級(jí)文件頭部生成解析器將該頭部緩存buffer —次性寫入到被升級(jí)文件生成的輸出文件中的頭部,再從end語句的偏移地址offset定義的地址處開始,寫入輸入的原始的被升級(jí)文件。
[0009]所述的腳本語句格式為:offset:type:param,偏移量:類型:參數(shù);
其中:
type表示該頭部添加單元的數(shù)據(jù)信息類型; offset表示該頭部添加單元的偏移地址; param表示該頭部添加單元的參數(shù)。
[0010]所述的數(shù)據(jù)信息類型type分為三類:
數(shù)據(jù)信息類型string ;
結(jié)束標(biāo)志類型end ;
其它特定的頭部添加單元的數(shù)據(jù)信息類型。
[0011]所述的其它特定的頭部添加單元的數(shù)據(jù)信息類型包含:
數(shù)據(jù)信息類型md5 ;
數(shù)據(jù)信息類型time ;
數(shù)據(jù)信息類型size ;
其它類似可以無需用戶自己輸入的param參數(shù)信息的數(shù)據(jù)信息類型。
[0012]所述的腳本語言的升級(jí)文件頭部生成解析器還有如下規(guī)范:
1、未被指定的頭部數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)自動(dòng)以零來填充;
2、每個(gè)數(shù)據(jù)信息類型的offset偏移量必須是線性增加的,即上一條語句的數(shù)據(jù)信息類型的偏移量必須小于下一條的數(shù)據(jù)信息類型的偏移量,并且上一條的數(shù)據(jù)信息類型的偏移量加上該類型的數(shù)據(jù)大小不應(yīng)該大于下一條數(shù)據(jù)信息類型的偏移量,否則會(huì)發(fā)生數(shù)據(jù)重
置;
3、對(duì)于數(shù)據(jù)信息類型string的數(shù)據(jù)大小由其param參數(shù)的實(shí)際的字節(jié)大小來決定,其它的數(shù)據(jù)信息類型的數(shù)據(jù)大小則由該類型本身來決定,對(duì)于那些需要由參數(shù)來指定的數(shù)據(jù)大小,則由實(shí)際指定的大小來確定;
4、每個(gè)腳本文件中必須至少有唯--條end類型的腳本語句,來定義生成的頭部的總
大小,end類型應(yīng)該僅出現(xiàn)在所有其它腳本語句之后,end類型之后的其它所有腳本語句都會(huì)被自動(dòng)忽略,或者給用戶提示一定的警告或者錯(cuò)誤信息;5、無需param參數(shù)的數(shù)據(jù)信息類型,如果用戶輸入了參數(shù),則自動(dòng)忽略,并給予一定的
告塾_自
口呂 IR Al!、o
[0013]所述的索引記錄中包含如下信息:該條語句所在文件中的實(shí)際行數(shù)line,對(duì)應(yīng)于頭部開始處的偏移地址offset,數(shù)據(jù)類型type,數(shù)據(jù)參數(shù)長度desp len,數(shù)據(jù)參數(shù)字符串desp string,以及一個(gè)隱藏的數(shù)據(jù)參數(shù)描述。
[0014]所述的步驟4包含以下步驟:
步驟4.1、建立一個(gè)頭部緩存buffer,該頭部緩存buffer的頭部總大小由end語句的偏移量offset定義,該頭部緩存的默認(rèn)值全部為0 ;
步驟4.2、按照索引序號(hào)逐條對(duì)索引記錄進(jìn)行操作,將索引記錄中的參數(shù)數(shù)據(jù)保存到頭部緩存中的指定地址;
如果數(shù)據(jù)信息類型type為string類型,直接將string類型的字符串參數(shù)填充到頭部緩存中指定的地址中;
如果數(shù)據(jù)信息類型type為其他類型,則根據(jù)不同類型的規(guī)范,將其對(duì)應(yīng)的數(shù)據(jù)提取出來,保存到該條類型語句記錄中的隱藏的數(shù)據(jù)參數(shù)描述中,并將該隱藏的數(shù)據(jù)參數(shù)填充到頭部緩存中的偏移地址offset處。
[0015]如果是MD5類型的數(shù)據(jù)信息,則需要從輸入的被升級(jí)文件中提取MD5校驗(yàn)碼,并被保存到該記錄中的隱藏的數(shù)據(jù)參數(shù)描述中。
`[0016]本發(fā)明提高了升級(jí)文件的頭部數(shù)據(jù)結(jié)構(gòu)生成的利用效率。
【專利附圖】
【附圖說明】
[0017]圖1是索引記錄的示意圖。
[0018]圖2是頭部緩存的數(shù)據(jù)結(jié)構(gòu)。
【具體實(shí)施方式】
[0019]以下根據(jù)圖1和圖2具體說明本發(fā)明的較佳實(shí)施例。
[0020]本發(fā)明提供一種生成通用的升級(jí)文件頭部數(shù)據(jù)信息結(jié)構(gòu)的方法,該方法包含以下步驟:
步驟1、定義頭部配置文件的腳本語言的格式,設(shè)計(jì)滿足該格式的升級(jí)文件頭部生成解析器;
腳本語句格式,采用分段式的語句結(jié)構(gòu),這是由升級(jí)文件頭部數(shù)據(jù)結(jié)構(gòu)生成的一般方法所決定的;
規(guī)定一行為一條語句,換行表示一條語句的結(jié)束,腳本語句之間可以存在空行,并且每條語句需要頂行開始;
所述的腳本語句格式為:offset:type:param (偏移量:類型:參數(shù)),即語句由三個(gè)段組成,每個(gè)段之間由分隔符,如“:”冒號(hào)分隔,一條語句用于描述一個(gè)頭部添加單元,其中:type表示該頭部添加單元的數(shù)據(jù)信息類型,如頭部識(shí)別標(biāo)識(shí)、文件類型、項(xiàng)目類型、生成日期、文件大小、MD5校驗(yàn)碼、升級(jí)文件版本號(hào)等升級(jí)文件所需的管理信息;
offset表示該頭部添加單元的偏移地址,即數(shù)據(jù)結(jié)構(gòu)中數(shù)據(jù)信息要素相對(duì)于升級(jí)文件頭部開始處的字節(jié)位置信息;param表示該頭部添加單元的參數(shù),根據(jù)type類型的不同,參數(shù)并不是必須的,即有些類型并不需要參數(shù);
所述的數(shù)據(jù)信息類型type分為三類:
1、數(shù)據(jù)信息類型string;
該單元數(shù)據(jù)信息完全由該語句中的參數(shù)所指定,即通用的字符串string類型,可以使用它來實(shí)現(xiàn)任何頭部結(jié)構(gòu)數(shù)據(jù)信息的添加及其屬性定義,它是一種面向所有以字符形式來定義的頭部添加單元的數(shù)據(jù)信息類型,用戶可以使用該類型來對(duì)所有的數(shù)據(jù)信息類型中的數(shù)據(jù)進(jìn)行描述,如頭部識(shí)別標(biāo)識(shí),文件類型,項(xiàng)目類型,生成日期,文件大小,MD5校驗(yàn)碼,升級(jí)文件版本號(hào)等升級(jí)文件所需的管理信息,而且,比如文件大小這些信息卻是可以從被升級(jí)文件中自動(dòng)獲取的,而不需要人為的獲取該升級(jí)文件的大小之后,將該信息作為一個(gè)參數(shù)給提供該數(shù)據(jù)信息類型;
如從頭部開始處,添加一個(gè)升級(jí)文件頭部識(shí)別標(biāo)志的字符串“TAG_BEGIN”,則offset為0, type為string, param為“TAG_BEGIN”,即該頭部添加單元相應(yīng)的腳本語句為:
0:string:TAG_BEGIN
而對(duì)于無法使用字符形式來表示的參數(shù)描述內(nèi)容,則可以使用“\”轉(zhuǎn)義符來表示,例如,需要從偏移量16字節(jié)處,添加一個(gè)字節(jié)為“0x01”的數(shù)據(jù),則可以使用如下腳本語句來實(shí)現(xiàn):
16: string:\01 此外,string類型同時(shí)支持上述兩種混合描述模式的參數(shù),如:
18:string:\02a\03bcd\90
2、結(jié)束標(biāo)志類型end;
用于界定該頭部數(shù)據(jù)結(jié)構(gòu)的結(jié)束位置,而不是用于描述某個(gè)具體的數(shù)據(jù)信息類型單元的;該end類型的偏移地址offset值應(yīng)該為整個(gè)頭部數(shù)據(jù)結(jié)構(gòu)所占字節(jié)數(shù)的總大小,該語句總是在腳本語句的最后一句來完成;實(shí)際上,出現(xiàn)在該end語句之后的所有其它語句會(huì)被自動(dòng)忽略掉;
3、其它特定的頭部添加單元的數(shù)據(jù)信息類型;
那些不需要顯式的輸入的一些數(shù)據(jù)信息類型所需的參數(shù)描述內(nèi)容,如用于升級(jí)文件校驗(yàn)的MD5校驗(yàn)碼,用于記錄升級(jí)文件生成時(shí)間,以及記錄升級(jí)文件的文件大小等信息:
3.1、數(shù)據(jù)信息類型md5:需要在指定位置添加被升級(jí)文件的MD5碼,那么可以使用類型為md5 (md5是一種用于對(duì)字符串進(jìn)行加密的技術(shù),也用于提取文件的唯一校驗(yàn)碼,它起到文件指紋的作用,當(dāng)文件出現(xiàn)任何更改或破損時(shí),其md5校驗(yàn)都會(huì)發(fā)生變化,因此可以通過md5校驗(yàn)碼來判斷文件的完整性)的關(guān)鍵字,該類型不需要param參數(shù);
腳本語句會(huì)自動(dòng)從輸入的被升級(jí)原始文件中提取標(biāo)準(zhǔn)的MD5碼,并填充到頭部偏移量為offset字節(jié)處,由于md5碼為16字節(jié),因此,md5類型需要占用16個(gè)字節(jié),因此該腳本語句頭部添加單元的下一單元必須至少從offset+16個(gè)字節(jié)的偏移處開始,否則升級(jí)文件頭部生成解析器會(huì)報(bào)錯(cuò),這樣就避免數(shù)據(jù)重疊的情況發(fā)生;
3.2、數(shù)據(jù)信息類型time:它用于實(shí)現(xiàn)自動(dòng)獲取系統(tǒng)當(dāng)前的絕對(duì)時(shí)間(1970年I月I日開始的秒數(shù)),并填充到指定的偏移地址offset位置,該關(guān)鍵字同樣不需要參數(shù)內(nèi)容,該類型需要占用4個(gè)字節(jié);因此,下條語句的數(shù)據(jù)單元偏移應(yīng)該至少是從off set+4處開始,否則升級(jí)文件頭部生成解析器會(huì)報(bào)錯(cuò),避免數(shù)據(jù)重疊的情況發(fā)生;
3.3、數(shù)據(jù)信息類型size:該關(guān)鍵字類型用于獲取被升級(jí)文件的字節(jié)大小,并填充到指定偏移量的頭部文件中,該關(guān)鍵字具有參數(shù),即需要描述內(nèi)容,該參數(shù)用于指定文件大小所占大頭部空間大小,支持1~4四個(gè)參數(shù),分別表示文件大小占用I至4個(gè)字節(jié)空間,如果不帶參數(shù),則默認(rèn)為4個(gè)字節(jié)大?。?br>
3.4、其它類似可以無需用戶自己輸入的param參數(shù)信息的數(shù)據(jù)信息類型,均可以創(chuàng)建擴(kuò)展成為類似于上述的關(guān)鍵字,這樣就可以通過解析器來自動(dòng)獲取相應(yīng)的信息,并自動(dòng)生成到指定的位置,以此方便用戶使用這些類別的數(shù)據(jù)信息;
所述的腳本語句還包含注釋符,該注釋符可以利用如“ # ”井號(hào)來定義,即在腳本文件的句首使用了該注釋符的后面的所有內(nèi)容均為注釋內(nèi)容,并不參與腳本語言的解析處理;
所述的腳本語言的升級(jí)文件頭部生成解析器還有如下規(guī)范:
1、未被指定的頭部數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)自動(dòng)以零來填充;
2、每個(gè)數(shù)據(jù)信息類型的offset偏移量必須是線性增加的,即上一條語句的數(shù)據(jù)信息類型的偏移量必須小于下一條的數(shù)據(jù)信息類型的偏移量,并且上一條的數(shù)據(jù)信息類型的偏移量加上該類型的數(shù)據(jù)大小不應(yīng)該大于下一條數(shù)據(jù)信息類型的偏移量,否則會(huì)發(fā)生數(shù)據(jù)重
置;
3、對(duì)于數(shù)據(jù)信息類型string的數(shù)據(jù)大小由其param參數(shù)的實(shí)際的字節(jié)大小來決定,其它的數(shù)據(jù)信息類型的數(shù)據(jù)大小則由該類型本身來決定,對(duì)于那些需要由參數(shù)來指定的數(shù)據(jù)大小,則由實(shí)際指定的大小來確定;
4、每個(gè)腳本文件中必須至少有唯--條end類型的腳本語句,來定義生成的頭部的總`大小,end類型應(yīng)該僅出現(xiàn)在所有其它腳本語句之后,end類型之后的其它所有腳本語句都會(huì)被自動(dòng)忽略,或者給用戶提示一定的警告或者錯(cuò)誤信息;
5、無需param參數(shù)的數(shù)據(jù)信息類型,如果用戶輸入了參數(shù),則自動(dòng)忽略,并給予一定的告警信息;
步驟2、升級(jí)文件頭部生成解析器一次性提取腳本語言配置文件,逐行讀取腳本文件并索引記錄;
對(duì)于空行或者帶有注釋符“#,,的行,會(huì)被忽略,也就是說只會(huì)記錄真正的腳本語句;對(duì)于每條腳本語句,升級(jí)文件頭部生成解析器都會(huì)以此給予一個(gè)序號(hào),并對(duì)應(yīng)的成為一個(gè)記錄,該序號(hào)作為該語句記錄的索引index ;
如圖1所示,在基于該索引記錄中包括了如下信息:該條語句所在文件中的實(shí)際行數(shù)line,對(duì)應(yīng)于頭部開始處的偏移地址offset,數(shù)據(jù)類型type,數(shù)據(jù)參數(shù)長度desp Ien,數(shù)據(jù)參數(shù)字符串desp string,以及一個(gè)隱藏的數(shù)據(jù)參數(shù)描述;
步驟3、進(jìn)行腳本語言規(guī)范性檢查;
升級(jí)文件頭部生成解析器根據(jù)索引序號(hào)(從0開始到最后一個(gè)引索)依次檢測(cè)腳本語言的規(guī)范性,對(duì)于不符合步驟I中定義的規(guī)范的,會(huì)給予警告或者錯(cuò)誤提示;升級(jí)文件頭部生成解析器一旦發(fā)現(xiàn)錯(cuò)誤則立即退出流程,并為用戶提供包含有腳本錯(cuò)誤語句所在文件中l(wèi)ine行數(shù)(方便用戶定位腳本文件中的錯(cuò)誤位置)及其錯(cuò)誤描述的錯(cuò)誤告警信息;
偏移量offset用于比較上下語句之間的地址空間大小,其大小不能滿足該數(shù)據(jù)類型所需要的最小空間大小時(shí),會(huì)給予錯(cuò)誤提示; 如果發(fā)現(xiàn)有end類型的腳本語句,升級(jí)文件頭部生成解析器會(huì)認(rèn)為這是腳本文件的最后一條配置語句,以下即使存在有其它的腳本語句也會(huì)被忽略,end類型的腳本語句的偏移量offset用于定義頭部的總大?。?br>
步驟4、升級(jí)文件頭部生成解析器對(duì)腳本語言中的所需數(shù)據(jù)進(jìn)行地址的分配;
步驟4.1、建立一個(gè)頭部緩存buffer,該頭部緩存buffer的頭部總大小由end語句的偏移量offset定義,該頭部緩存的默認(rèn)值全部為0 ;
步驟4.2、按照索引序號(hào)(從0開始到最后一個(gè)引索)逐條對(duì)索引記錄進(jìn)行操作,將索引記錄中的參數(shù)數(shù)據(jù)保存到頭部緩存中的指定地址;
如果數(shù)據(jù)信息類型type為string類型,直接將string類型的字符串參數(shù)填充到頭部緩存中指定的地址中;
如果數(shù)據(jù)信息類型type為其他類型,則根據(jù)不同類型的規(guī)范,將其對(duì)應(yīng)的數(shù)據(jù)提取出來,保存到該條類型語句記錄中的隱藏的數(shù)據(jù)參數(shù)描述中,并將該隱藏的數(shù)據(jù)參數(shù)填充到頭部緩存中的偏移地址offset處;
如MD5類型的數(shù)據(jù)信息,則需要從輸入的被升級(jí)文件中提取MD5校驗(yàn)碼,并被保存到該記錄中的隱藏的數(shù)據(jù)參數(shù)描述中;
關(guān)于MD5校驗(yàn)碼的提取,有現(xiàn)有的算法,作為公開技術(shù),這里不再描述,在現(xiàn)有算法的支持下,可以更加方便的從被升級(jí)文件原始文件中提取MD5校驗(yàn)碼,在這種功能的基礎(chǔ)上,則不需要使用外部MD5提出工具就可單獨(dú)獲取MD5校驗(yàn)碼了 ;
步驟5、當(dāng)所有記錄根據(jù)步驟4的規(guī)則被逐條寫入到頭部緩存buffer中之后(如圖2所示),升級(jí)文件頭部生成解析器將該頭部緩存buffer —次性寫入到被升級(jí)文件生成的輸出文件中的頭部,再從end語句的偏移地址offset定義的地址處開始,寫入輸入的原始的被升級(jí)文件;
圖2中的數(shù)據(jù)和圖1的信息是相對(duì)應(yīng)的,圖2中,第一行中9個(gè)字節(jié)的數(shù)據(jù)是string類型的TAG_BEGIN,第二行的第一個(gè)字節(jié)表示string類型\01,第二個(gè)字節(jié)表示string類型\01,第三行中16個(gè)字節(jié)的數(shù)據(jù)是MD5校驗(yàn)碼,第四行中7個(gè)字節(jié)的的數(shù)據(jù)是string類型的TAG_END,上述5個(gè)數(shù)據(jù)類型的起始地址均由其對(duì)應(yīng)的offset所定義,end類型表示了該頭部數(shù)據(jù)總大小為64個(gè)字節(jié),分別與圖1所示的6個(gè)記錄相對(duì)應(yīng)。
[0021]本發(fā)明提供的方法是非常靈活的生成方式,基本上適應(yīng)于所有頭部生成需求。
[0022]盡管本發(fā)明的內(nèi)容已經(jīng)通過上述優(yōu)選實(shí)施例作了詳細(xì)介紹,但應(yīng)當(dāng)認(rèn)識(shí)到上述的描述不應(yīng)被認(rèn)為是對(duì)本發(fā)明的限制。在本領(lǐng)域技術(shù)人員閱讀了上述內(nèi)容后,對(duì)于本發(fā)明的多種修改和替代都將是顯而易見的。因此,本發(fā)明的保護(hù)范圍應(yīng)由所附的權(quán)利要求來限定。
【權(quán)利要求】
1.一種生成通用的升級(jí)文件頭部數(shù)據(jù)信息結(jié)構(gòu)的方法,其特征在于,該方法包含以下步驟: 步驟1、定義頭部配置文件的腳本語言的格式,設(shè)計(jì)滿足該格式的升級(jí)文件頭部生成解析器; 步驟2、升級(jí)文件頭部生成解析器一次性提取腳本語言配置文件,逐行讀取腳本文件并索引記錄; 對(duì)于每條腳本語句,升級(jí)文件頭部生成解析器都會(huì)以此給予一個(gè)序號(hào),并對(duì)應(yīng)的成為一個(gè)記錄,該序號(hào)作為該語句記錄的索引index ; 步驟3、進(jìn)行腳本語言規(guī)范性檢查; 升級(jí)文件頭部生成解析器根據(jù)索引序號(hào)依次檢測(cè)腳本語言的規(guī)范性,對(duì)于不符合步驟I中定義的規(guī)范的,會(huì)給予警告或者錯(cuò)誤提示,升級(jí)文件頭部生成解析器一旦發(fā)現(xiàn)錯(cuò)誤則立即退出流程,并為用戶提供包含有腳本錯(cuò)誤語句所在文件中l(wèi)ine行數(shù)及其錯(cuò)誤描述的錯(cuò)誤告警信息; 步驟4、升級(jí)文件頭部生成解析器對(duì)腳本語言中的所需數(shù)據(jù)進(jìn)行地址的分配; 步驟5、當(dāng)所有記錄根據(jù)步驟4的規(guī)則被逐條寫入到頭部緩存buffer中之后,升級(jí)文件頭部生成解析器將該頭部緩存buffer —次性寫入到被升級(jí)文件生成的輸出文件中的頭部,再從end語句的偏移 地址offset定義的地址處開始,寫入輸入的原始的被升級(jí)文件。
2.如權(quán)利要求1所述的生成通用的升級(jí)文件頭部數(shù)據(jù)信息結(jié)構(gòu)的方法,其特征在于,所述的腳本語句格式為:offset:type:param,偏移量:類型:參數(shù); 其中: type表示該頭部添加單元的數(shù)據(jù)信息類型; offset表示該頭部添加單元的偏移地址; param表示該頭部添加單元的參數(shù)。
3.如權(quán)利要求2所述的生成通用的升級(jí)文件頭部數(shù)據(jù)信息結(jié)構(gòu)的方法,其特征在于,所述的數(shù)據(jù)信息類型type分為三類: 數(shù)據(jù)信息類型string ; 結(jié)束標(biāo)志類型end ; 其它特定的頭部添加單元的數(shù)據(jù)信息類型。
4.如權(quán)利要求3所述的生成通用的升級(jí)文件頭部數(shù)據(jù)信息結(jié)構(gòu)的方法,其特征在于,所述的其它特定的頭部添加單元的數(shù)據(jù)信息類型包含: 數(shù)據(jù)信息類型md5 ; 數(shù)據(jù)信息類型time ; 數(shù)據(jù)信息類型size ; 其它類似可以無需用戶自己輸入的param參數(shù)信息的數(shù)據(jù)信息類型。
5.如權(quán)利要求4所述的生成通用的升級(jí)文件頭部數(shù)據(jù)信息結(jié)構(gòu)的方法,其特征在于,所述的腳本語言的升級(jí)文件頭部生成解析器還有如下規(guī)范: (1)未被指定的頭部數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)自動(dòng)以零來填充; (2)每個(gè)數(shù)據(jù)信息類型的offset偏移量必須是線性增加的,即上一條語句的數(shù)據(jù)信息類型的偏移量必須小于下一條的數(shù)據(jù)信息類型的偏移量,并且上一條的數(shù)據(jù)信息類型的偏移量加上該類型的數(shù)據(jù)大小不應(yīng)該大于下一條數(shù)據(jù)信息類型的偏移量,否則會(huì)發(fā)生數(shù)據(jù)重置; (3)對(duì)于數(shù)據(jù)信息類型string的數(shù)據(jù)大小由其param參數(shù)的實(shí)際的字節(jié)大小來決定,其它的數(shù)據(jù)信息類型的數(shù)據(jù)大小則由該類型本身來決定,對(duì)于那些需要由參數(shù)來指定的數(shù)據(jù)大小,則由實(shí)際指定的大小來確定; (4)每個(gè)腳本文件中必須至少有唯一一條end類型的腳本語句,來定義生成的頭部的總大小,end類型應(yīng)該僅出現(xiàn)在所有其它腳本語句之后,end類型之后的其它所有腳本語句都會(huì)被自動(dòng)忽略,或者給用戶提示一定的警告或者錯(cuò)誤信息; (5)無需param參數(shù)的數(shù)據(jù)信息類型,如果用戶輸入了參數(shù),則自動(dòng)忽略,并給予一定的告警信息。
6.如權(quán)利要求1所述的生成通用的升級(jí)文件頭部數(shù)據(jù)信息結(jié)構(gòu)的方法,其特征在于,所述的索引記錄中包含如下信息:該條語句所在文件中的實(shí)際行數(shù)line,對(duì)應(yīng)于頭部開始處的偏移地址offset,數(shù)據(jù)類型type,數(shù)據(jù)參數(shù)長度desp Ien,數(shù)據(jù)參數(shù)字符串despstring,以及一個(gè)隱藏的數(shù)據(jù)參數(shù)描述。
7.如權(quán)利要求1所述的生成通用的升級(jí)文件頭部數(shù)據(jù)信息結(jié)構(gòu)的方法,其特征在于,所述的步驟4包含以下步驟: 步驟4.1、建立一個(gè)頭部緩存buffer,該頭部緩存buffer的頭部總大小由end語句的偏移量offset定義,該頭部緩存的默認(rèn)值全部為0 ; 步驟4.2、按照索引序號(hào)逐條對(duì)索引記錄進(jìn)行操作,將索引記錄中的參數(shù)數(shù)據(jù)保存到頭部緩存中的指定地址;` 如果數(shù)據(jù)信息類型type為string類型,直接將string類型的字符串參數(shù)填充到頭部緩存中指定的地址中; 如果數(shù)據(jù)信息類型type為其他類型,則根據(jù)不同類型的規(guī)范,將其對(duì)應(yīng)的數(shù)據(jù)提取出來,保存到該條類型語句記錄中的隱藏的數(shù)據(jù)參數(shù)描述中,并將該隱藏的數(shù)據(jù)參數(shù)填充到頭部緩存中的偏移地址offset處。
8.如權(quán)利要求7所述的生成通用的升級(jí)文件頭部數(shù)據(jù)信息結(jié)構(gòu)的方法,其特征在于,如果是MD5類型的數(shù)據(jù)信息,則需要從輸入的被升級(jí)文件中提取MD5校驗(yàn)碼,并被保存到該記錄中的隱藏的數(shù)據(jù)參數(shù)描述中。
【文檔編號(hào)】G06F9/44GK103761095SQ201410029717
【公開日】2014年4月30日 申請(qǐng)日期:2014年1月23日 優(yōu)先權(quán)日:2014年1月23日
【發(fā)明者】陳輝, 劉啟林 申請(qǐng)人:上海斐訊數(shù)據(jù)通信技術(shù)有限公司