一種引導(dǎo)與目標(biāo)分離的嵌入式軟件固化、加載方法
【專利摘要】一種引導(dǎo)與目標(biāo)分離的嵌入式軟件固化、加載方法,將非易失存儲(chǔ)器的存儲(chǔ)空間劃分為三個(gè)存儲(chǔ)空間;將引導(dǎo)、加載程序,配置信息,被加載程序分別固化到三個(gè)存儲(chǔ)空間;處理器從第一個(gè)存儲(chǔ)空間中取指執(zhí)行最小系統(tǒng)初始化;完成后,引導(dǎo)、加載程序從第二個(gè)存儲(chǔ)空間中讀取配置信息并解析;根據(jù)解析結(jié)果判斷被加載程序的個(gè)數(shù),若被加載程序個(gè)數(shù)為零,則進(jìn)入空操作循環(huán),否則依次加載每個(gè)被加載程序;當(dāng)所有被加載程序加載完后,引導(dǎo)、加載程序根據(jù)配置信息判斷被加載程序是否需要首先執(zhí)行,若需要首先執(zhí)行,則跳轉(zhuǎn)到該被加載程序的入口地址執(zhí)行,否則進(jìn)入空操作循環(huán)。本發(fā)明解決了有限資源的深嵌入應(yīng)用中的多目標(biāo)文件加載問題,且易于移植。
【專利說明】—種引導(dǎo)與目標(biāo)分離的嵌入式軟件固化、加載方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種嵌入式軟件的固化、加載技術(shù),具體涉及一種引導(dǎo)與目標(biāo)分離的嵌入式軟件固化、加載方法。
【背景技術(shù)】
[0002]大多數(shù)嵌入式軟件都在RAM中運(yùn)行,由于RAM中的數(shù)據(jù)斷電后無法保存,因此嵌入式軟件應(yīng)被固化在非易失存儲(chǔ)器中,在系統(tǒng)上電后通過引導(dǎo)、加載程序加載到RAM中運(yùn)行。引導(dǎo)、加載程序首先初始化硬件設(shè)備,建立內(nèi)存空間映射關(guān)系,將整個(gè)系統(tǒng)初始化到一個(gè)靜止的、適于操作的狀態(tài),然后加載應(yīng)用軟件到指定的RAM空間,并跳轉(zhuǎn)到應(yīng)用軟件執(zhí)行。
[0003]目前嵌入式軟件的引導(dǎo)、加載主要有三種方式,
[0004]第一種方式,處理器自帶固件完成引導(dǎo)、加載(如DSP);其優(yōu)點(diǎn)是用戶無需做任何工作,只需把應(yīng)用軟件的目標(biāo)格式文件固化到非易失存儲(chǔ)器中指定地址處即可;但缺點(diǎn)是引導(dǎo)、加載程序與處理器直接相關(guān),如果使用的處理器沒有加載固件的話就不能使用,使得硬件設(shè)計(jì)時(shí)可選擇的器件范圍變窄,同時(shí)這種固件加載方式對(duì)被加載軟件的大小有要求,如只能加載64kbyte大小以內(nèi)的數(shù)據(jù);
[0005]第二種方式,采用開源工具對(duì)用戶目標(biāo)格式文件進(jìn)行處理(如MKPR0M),提取目標(biāo)格式文件的代碼段、數(shù)據(jù)段內(nèi)容形成一個(gè)新的目標(biāo)格式文件,該文件中包含了被加載程序及系統(tǒng)上電后的引導(dǎo)、加載程序,上電后自動(dòng)加載用戶程序到RAM區(qū)執(zhí)行;其優(yōu)點(diǎn)是引導(dǎo)、加載程序?qū)Ρ患虞d軟件的大小無限制,并且支持多款處理器的引導(dǎo)、加載;但缺點(diǎn)是由于用戶程序與引導(dǎo)、加載程序最終合并為一個(gè)文件,導(dǎo)致每次用戶程序修改后都需要重新合并,進(jìn)行重復(fù)工作,同時(shí)合并為同一文件增加了調(diào)試難度,該方式最大的缺點(diǎn)是只能加載一個(gè)文件,無法進(jìn)行多目標(biāo)文件的加載;
[0006]第三種方式,開源的引導(dǎo)、加載程序(UBOOT),用戶根據(jù)需要修改引導(dǎo)、加載程序,將修改后的引導(dǎo)、加載程序及用戶程序分別固化到非易失存儲(chǔ)器中,上電后引導(dǎo)、加載程序完成用戶程序的加載。其優(yōu)點(diǎn)是適用多款處理器;缺點(diǎn)是占用空間大、不適于系統(tǒng)資源有限的深嵌入式應(yīng)用,用戶使用前必須先熟悉其源代碼,并根據(jù)其應(yīng)用環(huán)境進(jìn)行修改,難度較大,且不支持Windows環(huán)境。
【發(fā)明內(nèi)容】
[0007]本發(fā)明的目的在于提出一種引導(dǎo)與目標(biāo)分離的嵌入式軟件固化、加載方法,解決了有限資源的深嵌入應(yīng)用中的多目標(biāo)文件加載問題,且易于移植。
[0008]為了達(dá)到上述目的,本發(fā)明采用的技術(shù)方案包括以下步驟:
[0009]I)根據(jù)非易失存儲(chǔ)器的存儲(chǔ)空間大小,將非易失存儲(chǔ)器的存儲(chǔ)空間劃分為三個(gè)存儲(chǔ)空間;
[0010]2)將引導(dǎo)、加載程序固化到第一個(gè)存儲(chǔ)空間;將被加載程序及存儲(chǔ)空間的配置信息寫入第二個(gè)存儲(chǔ)空間,將被加載程序的代碼段、數(shù)據(jù)段固化到第三個(gè)存儲(chǔ)空間;并根據(jù)被加載程序的個(gè)數(shù)將第三個(gè)存儲(chǔ)空間劃分為N個(gè)子空間,每個(gè)子空間存放一個(gè)被加載程序的代碼段和數(shù)據(jù)段;N為被加載程序的個(gè)數(shù);
[0011]3)處理器從第一個(gè)存儲(chǔ)空間中取指執(zhí)行最小系統(tǒng)初始化;最小系統(tǒng)初始化完成后,引導(dǎo)、加載程序從第二個(gè)存儲(chǔ)空間中讀取被加載程序及存儲(chǔ)空間的配置信息并進(jìn)行解析;
[0012]4)根據(jù)被加載程序及存儲(chǔ)空間的配置信息解析后的結(jié)果判斷被加載程序的個(gè)數(shù),如果被加載程序個(gè)數(shù)為零,則進(jìn)入空操作循環(huán),否則依次加載每個(gè)被加載程序,然后轉(zhuǎn)入步驟5);
[0013]5)根據(jù)被加載程序及存儲(chǔ)空間的配置信息判斷被加載程序是否需要首先執(zhí)行,若需要首先執(zhí)行,則跳轉(zhuǎn)到該程序的入口地址執(zhí)行,否則進(jìn)入空操作循環(huán)。
[0014]所述的步驟2)中第一個(gè)存儲(chǔ)空間的地址是從系統(tǒng)上電后取指令的地址處開始的。
[0015]所述的步驟2)中被加載程序及存儲(chǔ)空間的配置信息包括非易失存儲(chǔ)器的大小,被加載程序的校驗(yàn)和,被加載程序的代碼段、數(shù)據(jù)段的起始地址,被加載程序的代碼段、數(shù)據(jù)段的段大小,被加載程序的代碼段、數(shù)據(jù)段的目的地址,被加載程序的個(gè)數(shù)和被加載程序是否需執(zhí)行的標(biāo)志。
[0016]所述的步驟2)中被加載程序及存儲(chǔ)空間的配置信息的獲取方式為:
[0017]編譯、鏈接被加載程序,生成被加載程序的目標(biāo)格式文件,從被加載程序的目標(biāo)格式文件中提取被加載程序的配置信息,被加載程序的配置信息包括被加載程序的校驗(yàn)和,被加載程序的代碼段、數(shù)據(jù)段的起始地址,被加載程序的代碼段、數(shù)據(jù)段的段大小,被加載程序的代碼段、數(shù)據(jù)段的目的地址和被加載程序的個(gè)數(shù);同時(shí)根據(jù)應(yīng)用需求確定被加載程序是否需執(zhí)行的標(biāo)志,根據(jù)非易失存儲(chǔ)器確定非易失存儲(chǔ)器的大小,最終獲取到被加載程序及存儲(chǔ)空間的配置信息;若有多個(gè)被加載程序,則依次提取被加載程序的配置信息。
[0018]所述的步驟2)中被加載程序及存儲(chǔ)空間的配置信息需要更改,則重新獲取配置信息。
[0019]所述的步驟4)中進(jìn)行加載是根據(jù)被加載程序及存儲(chǔ)空間配置信息中被加載程序的代碼段、數(shù)據(jù)段的起始地址,被加載程序的代碼段、數(shù)據(jù)段的目的地址和被加載程序的代碼段、數(shù)據(jù)段的段大小進(jìn)行的。
[0020]所述的步驟3)中最小系統(tǒng)初始化包括初始化CPU,掛接異常處理程序,關(guān)中斷和配置內(nèi)存。
[0021]與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果在于:
[0022]本發(fā)明將非易失存儲(chǔ)器劃分成三個(gè)存儲(chǔ)空間,且將第三個(gè)存儲(chǔ)空間按照被加載程序的個(gè)數(shù)劃分為N個(gè)子空間,這樣就能實(shí)現(xiàn)對(duì)N版本、多重備份軟件的加載;同時(shí)引導(dǎo)、力口載程序功能簡單、占用硬件資源少(50Kbyte),便于修改、移植,適用于有限資源的深嵌入應(yīng)用。
【專利附圖】
【附圖說明】
[0023]圖1為本發(fā)明非易失存儲(chǔ)器的空間劃分圖;
[0024]圖2為引導(dǎo)、加載程序執(zhí)行流程;
[0025]圖3為獲取被加載程序的配置信息及固化的流程;
[0026]圖4為本發(fā)明在采用NOR FLASH存儲(chǔ)器的目標(biāo)板上的一個(gè)實(shí)施例。
【具體實(shí)施方式】
[0027]下面結(jié)合附圖對(duì)本發(fā)明做進(jìn)一步詳細(xì)說明。
[0028]參見圖2,本發(fā)明引導(dǎo)與目標(biāo)分離的嵌入式軟件固化、加載方法包括以下步驟:
[0029]1)參見圖1,根據(jù)非易失存儲(chǔ)器的存儲(chǔ)空間大小,將非易失存儲(chǔ)器的存儲(chǔ)空間劃分為三個(gè)存儲(chǔ)空間;
[0030]第一個(gè)存儲(chǔ)空間用于存儲(chǔ)引導(dǎo)、加載程序,系統(tǒng)上電后首先執(zhí)行引導(dǎo)、加載程序,因此第一個(gè)存儲(chǔ)空間的地址應(yīng)從系統(tǒng)上電后取指令的地址處開始;
[0031]第二個(gè)存儲(chǔ)空間用于存儲(chǔ)配置信息,包括非易失存儲(chǔ)器的大小,被加載程序的代碼段、數(shù)據(jù)段的起始地址,被加載程序的代碼段、數(shù)據(jù)段的段大小,被加載程序的代碼段、數(shù)據(jù)段的目的地址,被加載程序的代碼段、數(shù)據(jù)段的段大小,被加載程序的個(gè)數(shù)、被加載程序是否需執(zhí)行的標(biāo)志以及被加載程序的校驗(yàn)和等;
[0032]配置信息是由兩部分共同構(gòu)成的,一部分是從被加載程序的格式文件中提取的被加載程序的代碼段、數(shù)據(jù)段的起始地址,被加載程序的代碼段、數(shù)據(jù)段的段大小,被加載程序的代碼段、數(shù)據(jù)段的目的地址,被加載程序的代碼段、數(shù)據(jù)段的段大小,另一部分是由軟、硬件情況確定的被加載程序的個(gè)數(shù),被加載程序是否需執(zhí)行的標(biāo)志,被加載程序的校驗(yàn),非易失存儲(chǔ)器的大小等信息。以上兩部分信息共同構(gòu)成了配置信息。
[0033]第三個(gè)存儲(chǔ)空間用于存儲(chǔ)被加載程序的代碼段和數(shù)據(jù)段,代碼段和數(shù)據(jù)段連續(xù)存放,第三個(gè)存儲(chǔ)空間可根據(jù)被加載程序的個(gè)數(shù)進(jìn)一步劃分為N個(gè)子空間#等于被加載程序的個(gè)數(shù),N ^ 0,每個(gè)子空間存放一個(gè)被加載程序的代碼段和數(shù)據(jù)段;
[0034]2)將引導(dǎo)、加載程序固化到第一個(gè)存儲(chǔ)空間;
[0035]3)參見圖3,編譯、鏈接加載程序,生成被加載程序的目標(biāo)格式文件,從被加載程序的目標(biāo)格式文件中提取被加載程序的配置信息,被加載程序的配置信息包括被加載程序的校驗(yàn)和,被加載程序的代碼段、數(shù)據(jù)段的起始地址,被加載程序的代碼段、數(shù)據(jù)段的段大小,被加載程序的代碼段、數(shù)據(jù)段的目的地址和被加載程序的個(gè)數(shù);同時(shí)根據(jù)應(yīng)用需求確定被加載程序是否需執(zhí)行的標(biāo)志,根據(jù)非易失存儲(chǔ)器確定非易失存儲(chǔ)器的大小,最終獲取到被加載程序及存儲(chǔ)空間的配置信息;若有多個(gè)被加載程序,則依次提取被加載程序的配置信息。
[0036]4)將被加載程序及存儲(chǔ)空間的配置信息寫入第二個(gè)存儲(chǔ)空間;將被加載程序的代碼段、數(shù)據(jù)段固化到第三個(gè)存儲(chǔ)空間;并根據(jù)被加載程序的個(gè)數(shù)在每個(gè)子空間中存放一個(gè)被加載程序的代碼段和數(shù)據(jù)段;
[0037]5)處理器從第一個(gè)存儲(chǔ)空間中取指執(zhí)行最小系統(tǒng)初始化;最小系統(tǒng)初始化包括初始化CPU,掛接異常處理程序,關(guān)中斷和配置內(nèi)存等;最小系統(tǒng)初始化完成后,引導(dǎo)、加載程序從第二個(gè)存儲(chǔ)空間中讀取配置信息并進(jìn)行解析;
[0038]6)根據(jù)被加載程序及存儲(chǔ)空間的配置信息解析后的結(jié)果判斷被加載程序的個(gè)數(shù),如果被加載程序個(gè)數(shù)為零,則進(jìn)入空操作循環(huán),否則依次加載每個(gè)被加載程序,然后轉(zhuǎn)入步驟5);且在加載過程中是根據(jù)被加載程序及存儲(chǔ)空間的配置信息中被加載程序的代碼段、數(shù)據(jù)段的起始地址,被加載程序的代碼段、數(shù)據(jù)段的目的地址和被加載程序的代碼段、數(shù)據(jù)段的段大小進(jìn)行被加載程序的加載;
[0039]7)根據(jù)被加載程序及存儲(chǔ)空間的配置信息判斷被加載程序是否需要首先執(zhí)行,若需要首先執(zhí)行,則跳轉(zhuǎn)到該程序的入口地址執(zhí)行,否則進(jìn)入空操作循環(huán)。
[0040]本發(fā)明將引導(dǎo)與目標(biāo)分離進(jìn)行分離,對(duì)非易失存儲(chǔ)器的存儲(chǔ)空間按需求進(jìn)行劃分,實(shí)現(xiàn)了多目標(biāo)文件的加載,可實(shí)現(xiàn)對(duì)N版本、多重備份軟件的加載,下面以16Mbyte NORFLASH存儲(chǔ)器、加載一個(gè)ELF格式文件為例,對(duì)本發(fā)明的實(shí)施進(jìn)行說明,本領(lǐng)域技術(shù)人員能夠明了,非易失存儲(chǔ)器不僅限于NOR FLASH存儲(chǔ)器,還可以是其它類型的非易失存儲(chǔ)器,如EEPROM、EEPROM、EPROM、PR0M等,目標(biāo)格式文件同樣支持ELF、a.0ut、C0FF格式等。
[0041]圖4是基于NOR FLASH存儲(chǔ)器引導(dǎo)、加載ELF格式文件的實(shí)施例,其具體實(shí)施步驟如下:
[0042]1)根據(jù)應(yīng)用需求將NOR FLASH存儲(chǔ)器劃分為三個(gè)存儲(chǔ)空間,第一個(gè)存儲(chǔ)空間占整個(gè)存儲(chǔ)空間的1/4 (4Mbyte),第二個(gè)存儲(chǔ)空間占整個(gè)存儲(chǔ)空間的1/4 (4Mbyte),第三個(gè)存儲(chǔ)空間占整個(gè)存儲(chǔ)空間的1/2 (8Mbyte)。
[0043]2)將引導(dǎo)、加載程序固化到第一個(gè)存儲(chǔ)空間中;
[0044]3)解析ELF格式文件,獲取ELF格式文件的代碼段、數(shù)據(jù)段的段大小,代碼段、數(shù)據(jù)段在ELF格式文件中的起始地址,代碼段、數(shù)據(jù)段加載的目的地址;
[0045]4)根據(jù)需求設(shè)置被加載程序的個(gè)數(shù)、被加載程序是否需運(yùn)行的標(biāo)志、被加載程序的校驗(yàn)和以及非易失存儲(chǔ)器的大小等信息,本實(shí)施例的被加載程序的個(gè)數(shù)為1,被加載程序需要運(yùn)行,非易失存儲(chǔ)器的大小為16Mbyte ;
[0046]5)將步驟3)和步驟4)中確定的配置信息順序固化到第二個(gè)存儲(chǔ)空間中;
[0047]6)將ELF格式文件的代碼段、數(shù)據(jù)段順序固化到第三個(gè)存儲(chǔ)空間中;
[0048]7)系統(tǒng)加電,處理器從第一個(gè)存儲(chǔ)空間中取指執(zhí)行,完成最小系統(tǒng)初始化,包括初始化CPU、掛接異常處理程序、配置內(nèi)存如NOR FLASH大小、NOR FLASH bank size、NORFLASH讀寫等待周期、RAM大小、RAM bank size、RAM讀寫等待周期等,中斷如中斷控制器初始化等;
[0049]8)從第二個(gè)存儲(chǔ)空間(起始地址0x400000)讀取配置信息并解析,獲取配置信息解析后的結(jié)果如ELF格式文件的代碼段、數(shù)據(jù)段的源地址,目的地址等信息;
[0050]9)加載ELF格式文件的代碼段、數(shù)據(jù)段到配置信息中指定的地址;
[0051]10)判斷被加載的ELF格式文件是否需要運(yùn)行,是則跳轉(zhuǎn)到該程序的入口地址執(zhí)行,否則執(zhí)行空操作。
【權(quán)利要求】
1.一種引導(dǎo)與目標(biāo)分離的嵌入式軟件固化、加載方法,其特征在于,包括以下步驟: 1)根據(jù)非易失存儲(chǔ)器的存儲(chǔ)空間大小,將非易失存儲(chǔ)器的存儲(chǔ)空間劃分為三個(gè)存儲(chǔ)空間; 2)將引導(dǎo)、加載程序固化到第一個(gè)存儲(chǔ)空間;將被加載程序及存儲(chǔ)空間的配置信息寫入第二個(gè)存儲(chǔ)空間,將被加載程序的代碼段、數(shù)據(jù)段固化到第三個(gè)存儲(chǔ)空間;并根據(jù)被加載程序的個(gè)數(shù)將第三個(gè)存儲(chǔ)空間劃分為N個(gè)子空間,每個(gè)子空間存放一個(gè)被加載程序的代碼段和數(shù)據(jù)段;N為被加載程序的個(gè)數(shù); 3)處理器從第一個(gè)存儲(chǔ)空間中取指執(zhí)行最小系統(tǒng)初始化;最小系統(tǒng)初始化完成后,弓丨導(dǎo)、加載程序從第二個(gè)存儲(chǔ)空間中讀取被加載程序及存儲(chǔ)空間的配置信息并進(jìn)行解析; 4)根據(jù)被加載程序及存儲(chǔ)空間的配置信息解析后的結(jié)果判斷被加載程序的個(gè)數(shù),如果被加載程序個(gè)數(shù)為零,則進(jìn)入空操作循環(huán),否則依次加載每個(gè)被加載程序,然后轉(zhuǎn)入步驟5); 5)根據(jù)被加載程序及存儲(chǔ)空間的配置信息判斷被加載程序是否需要首先執(zhí)行,若需要首先執(zhí)行,則跳轉(zhuǎn)到該程序的入口地址執(zhí)行,否則進(jìn)入空操作循環(huán)。
2.根據(jù)權(quán)利要求1所述的引導(dǎo)與目標(biāo)分離的嵌入式軟件固化、加載方法,其特征在于:所述的步驟2)中第一個(gè)存儲(chǔ)空間的地址是從系統(tǒng)上電后取指令的地址處開始的。
3.根據(jù)權(quán)利要求1所述的引導(dǎo)與目標(biāo)分離的嵌入式軟件固化、加載方法,其特征在于:所述的步驟2)中被加載程序及存儲(chǔ)空間的配置信息包括非易失存儲(chǔ)器的大小,被加載程序的校驗(yàn)和,被加載程序的代碼段、數(shù)據(jù)段的起始地址,被加載程序的代碼段、數(shù)據(jù)段的段大小,被加載程序的代碼段、數(shù)據(jù)段的目的地址,被加載程序的個(gè)數(shù)和被加載程序是否需執(zhí)行的標(biāo)志。
4.根據(jù)權(quán)利要求1所述的引導(dǎo)與目標(biāo)分離的嵌入式軟件固化、加載方法,其特征在于,所述的步驟2)中被加載程序及存儲(chǔ)空間的配置信息的獲取方式為: 編譯、鏈接被加載程序,生成被加載程序的目標(biāo)格式文件,從被加載程序的目標(biāo)格式文件中提取被加載程序的配置信息,被加載程序的配置信息包括被加載程序的校驗(yàn)和,被加載程序的代碼段、數(shù)據(jù)段的起始地址,被加載程序的代碼段、數(shù)據(jù)段的段大小,被加載程序的代碼段、數(shù)據(jù)段的目的地址和被加載程序的個(gè)數(shù);同時(shí)根據(jù)應(yīng)用需求確定被加載程序是否需執(zhí)行的標(biāo)志,根據(jù)非易失存儲(chǔ)器確定非易失存儲(chǔ)器的大小,最終獲取到被加載程序及存儲(chǔ)空間的配置信息;若有多個(gè)被加載程序,則依次提取被加載程序的配置信息。
5.根據(jù)權(quán)利要求4所述的引導(dǎo)與目標(biāo)分離的嵌入式軟件固化、加載方法,其特征在于,所述的步驟2)中被加載程序及存儲(chǔ)空間的配置信息需要更改,則重新獲取配置信息。
6.根據(jù)權(quán)利要求3或4所述的引導(dǎo)與目標(biāo)分離的嵌入式軟件固化、加載方法,其特征在于:所述的步驟4)中進(jìn)行加載是根據(jù)被加載程序及存儲(chǔ)空間配置信息中被加載程序的代碼段、數(shù)據(jù)段的起始地址,被加載程序的代碼段、數(shù)據(jù)段的目的地址和被加載程序的代碼段、數(shù)據(jù)段的段大小進(jìn)行的。
7.根據(jù)權(quán)利要求1所述的引導(dǎo)與目標(biāo)分離的嵌入式軟件固化、加載方法,其特征在于:所述的步驟3)中最小系統(tǒng)初始化包括初始化CPU,掛接異常處理程序,關(guān)中斷和配置內(nèi)存。
【文檔編號(hào)】G06F9/445GK104407886SQ201410617038
【公開日】2015年3月11日 申請(qǐng)日期:2014年11月5日 優(yōu)先權(quán)日:2014年11月5日
【發(fā)明者】褚哲, 韓源冬, 焦淼, 袁成軍, 張城 申請(qǐng)人:中國航天科技集團(tuán)公司第九研究院第七七一研究所