一種u-boot啟動(dòng)過(guò)程中Linux基址動(dòng)態(tài)更新方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001 ] 本發(fā)明涉及Linux應(yīng)用領(lǐng)域,特別是涉及一種U-boot啟動(dòng)過(guò)程中Linux基址動(dòng)態(tài)更新的方法及系統(tǒng)。
【背景技術(shù)】
[0002]采用u-boot引導(dǎo)Linux的嵌入式產(chǎn)品,一般通過(guò)引導(dǎo)腳本來(lái)自動(dòng)引導(dǎo)Linux。引導(dǎo)腳本一般負(fù)責(zé)把Linux程序從保存在flash的基址處搬移到內(nèi)存中,然后跳轉(zhuǎn)到內(nèi)存中執(zhí)行Linux程序?,F(xiàn)有技術(shù)中,Linux-base通常需要在代碼中根據(jù)產(chǎn)品規(guī)格,在u-boot編譯前靜態(tài)配置寫死。每款產(chǎn)品都要做配置,容易出錯(cuò),維護(hù)麻煩。
【發(fā)明內(nèi)容】
[0003]鑒于以上所述現(xiàn)有技術(shù)的缺點(diǎn),本發(fā)明的目的在于提供一種u-boot啟動(dòng)過(guò)程中Linux基址動(dòng)態(tài)更新方法及系統(tǒng),用于解決現(xiàn)有技術(shù)中不能動(dòng)態(tài)更新Linux基址,而需要針對(duì)每款產(chǎn)品做Linux基址的靜態(tài)配置的問(wèn)題。
[0004]為實(shí)現(xiàn)上述目的及其他相關(guān)目的,本發(fā)明提供一種u-boot啟動(dòng)過(guò)程中Linux基址動(dòng)態(tài)更新方法,包括:預(yù)先設(shè)定u-boot程序和Linux程序的約束關(guān)系;在u-boot程序啟動(dòng)過(guò)程中動(dòng)態(tài)解析flash基址;根據(jù)所述flash基址和所述約束關(guān)系,計(jì)算Linux基址;將所述Linux基址更新到環(huán)境變量中。
[0005]于本發(fā)明的一具體實(shí)施例中,所述預(yù)先設(shè)定u和Linux程序的約束關(guān)系的步驟包括:將Linux程序和u-boot程序保存在同一flash中;其中,u-boot程序從flash基址處開(kāi)始保存,Linux程序在相對(duì)flash基址的固定偏移0x100000處開(kāi)始保存。
[0006]于本發(fā)明的一具體實(shí)施例中,在u-boot程序啟動(dòng)過(guò)程中動(dòng)態(tài)解析flash基址的步驟包括:在所述u-boot程序啟動(dòng)過(guò)程中,將所述u-boot程序從flash搬移到內(nèi)存的內(nèi)存基址處。
[0007]于本發(fā)明的一具體實(shí)施例中,將所述u-boot程序從flash搬移到內(nèi)存的內(nèi)存基址處的步驟包括:將搬移到的內(nèi)存基址保存到全局?jǐn)?shù)據(jù)gd的重定位地址成員;將內(nèi)存基址和flash基址的差值保存到全局?jǐn)?shù)據(jù)gd的重定位偏移成員;根據(jù)flash基址計(jì)算公式解析所述flash基址;其中所述flash基址計(jì)算公式為:flash基址=(重定位地址-重定位偏移)。
[0008]于本發(fā)明的一具體實(shí)施例中,根據(jù)公式:Linux基址= (flash基址+0x100000),計(jì)算所述Linux基址。
[0009]為實(shí)現(xiàn)上述目的及其他相關(guān)目的,本發(fā)明還提供一種u-boot啟動(dòng)過(guò)程中Linux基址動(dòng)態(tài)更新系統(tǒng),包括:預(yù)設(shè)模塊,用以預(yù)先設(shè)定u-boot程序和Linux程序的約束關(guān)系;解析模塊,用以在u-boot程序啟動(dòng)過(guò)程中動(dòng)態(tài)解析flash基址;計(jì)算模塊,用以根據(jù)所述flash基址和所述約束關(guān)系,計(jì)算Linux基址;更新模塊,用以將所述Linux基址更新到環(huán)境變量中。
[0010]于本發(fā)明的一具體實(shí)施例中,所述預(yù)設(shè)模塊還用以將Linux程序和U-boot程序保存在同一flash中;其中,u_boot程序從flash基址處開(kāi)始保存,Linux程序在相對(duì)flash基址的固定偏移Oxl OOOOO處開(kāi)始保存。
[0011]于本發(fā)明的一具體實(shí)施例中,所述解析模塊:用以在所述U-boot程序啟動(dòng)過(guò)程中,將所述u-boot程序從flash搬移到內(nèi)存的內(nèi)存基址處。
[0012]于本發(fā)明的一具體實(shí)施例中,將所述u-boot程序從flash搬移到內(nèi)存的內(nèi)存基址處的方式包括:將搬移到的內(nèi)存基址保存到全局?jǐn)?shù)據(jù)gd的重定位地址成員;將內(nèi)存基址和flash基址的差值保存到全局?jǐn)?shù)據(jù)gd的重定位偏移成員;根據(jù)flash基址計(jì)算公式解析所述flash基址;其中所述flash基址計(jì)算公式為:flash基址=(重定位地址-重定位偏移)。
[0013]于本發(fā)明的一具體實(shí)施例中,所述計(jì)算模塊根據(jù)公式:Linux基址=(flash基址+0x100000),計(jì)算所述Linux基址。
[OOM]如上所述,本發(fā)明的u-boot啟動(dòng)過(guò)程中Linux基址動(dòng)態(tài)更新方法及系統(tǒng),可預(yù)先設(shè)定u-boot程序和Linux程序的約束關(guān)系;在u-boot程序啟動(dòng)過(guò)程中動(dòng)態(tài)解析flash基址;根據(jù)所述flash基址和所述約束關(guān)系,計(jì)算Linux基址;將所述Linux基址更新到環(huán)境變量中。通過(guò)增加約束關(guān)系,實(shí)現(xiàn)在u-boot啟動(dòng)過(guò)程中對(duì)Linux基址進(jìn)行動(dòng)態(tài)更新,無(wú)需預(yù)先靜態(tài)配置,運(yùn)行靈活、簡(jiǎn)化配置、且降低系統(tǒng)的維護(hù)難度。
【附圖說(shuō)明】
[0015]圖1顯示為現(xiàn)有技術(shù)中Linux程序的引導(dǎo)流程示意圖。
[0016]圖2顯示為本發(fā)明的U-boot啟動(dòng)過(guò)程中Linux基址動(dòng)態(tài)更新方法在一具體實(shí)施例中的流程示意圖。
[0017]圖3顯示為應(yīng)用為本發(fā)明的u-boot啟動(dòng)過(guò)程中Linux基址動(dòng)態(tài)更新方法或系統(tǒng)的一具體實(shí)施例的Linux程序引導(dǎo)的流程示意圖。
[00?8]圖4顯示為本發(fā)明的u-boo t啟動(dòng)過(guò)程中L i nux基址動(dòng)態(tài)更新系統(tǒng)在一具體實(shí)施例中的流程示意圖。
[0019]元件標(biāo)號(hào)說(shuō)明
[°02°] IU-boot啟動(dòng)過(guò)程中Linux基址動(dòng)態(tài)更新系統(tǒng)
[0021]11預(yù)設(shè)模塊
[0022]12解析模塊
[0023]13計(jì)算模塊
[0024]14更新模塊
[0025]Sll ?S14 步驟
【具體實(shí)施方式】
[0026]以下通過(guò)特定的具體實(shí)例說(shuō)明本發(fā)明的實(shí)施方式,本領(lǐng)域技術(shù)人員可由本說(shuō)明書所揭露的內(nèi)容輕易地了解本發(fā)明的其他優(yōu)點(diǎn)與功效。本發(fā)明還可以通過(guò)另外不同的【具體實(shí)施方式】加以實(shí)施或應(yīng)用,本說(shuō)明書中的各項(xiàng)細(xì)節(jié)也可以基于不同觀點(diǎn)與應(yīng)用,在沒(méi)有背離本發(fā)明的精神下進(jìn)行各種修飾或改變。需說(shuō)明的是,在不沖突的情況下,以下實(shí)施例及實(shí)施例中的特征可以相互組合。
[0027]需要說(shuō)明的是,以下實(shí)施例中所提供的圖示僅以示意方式說(shuō)明本發(fā)明的基本構(gòu)想,遂圖示中僅顯示與本發(fā)明中有關(guān)的組件而非按照實(shí)際實(shí)施時(shí)的組件數(shù)目、形狀及尺寸繪制,其實(shí)際實(shí)施時(shí)各組件的型態(tài)、數(shù)量及比例可為一種隨意的改變,且其組件布局型態(tài)也可能更為復(fù)雜。
[0028]采用U-boot引導(dǎo)Linux的嵌入式產(chǎn)品,一般通過(guò)引導(dǎo)腳本來(lái)自動(dòng)引導(dǎo)Linux。引導(dǎo)腳本一般負(fù)責(zé)把Linux程序從保存在flash的基址處搬移到內(nèi)存中,然后跳轉(zhuǎn)到內(nèi)存中執(zhí)行Linux程序。現(xiàn)有技術(shù)的執(zhí)行過(guò)程通常為如圖1所示,具體為:U-boot啟動(dòng),獲取環(huán)境變量Linux-base (Linux基址),其中Linux基址為OXf0100000 ;以Linux基址為參數(shù),調(diào)用引導(dǎo)腳本,引導(dǎo)腳本搬移Linux,并跳轉(zhuǎn)執(zhí)行Linux。
[0029]請(qǐng)參閱圖2,顯示為本發(fā)明的u-boot啟動(dòng)過(guò)程中Linux基址動(dòng)態(tài)更新方法在一具體實(shí)施例中的流程示意圖。
[°03°] 所述u-boot啟動(dòng)過(guò)程中Linux基址動(dòng)態(tài)更新方法,包括:
[°031 ] SI 1:預(yù)先設(shè)定u-boot程序和Linux程序的約束關(guān)系;優(yōu)選的,所述預(yù)先設(shè)定u和Linux程序的約束關(guān)系的步驟包括:將Linux程序和u-boot程序保存在同一 flash中;其中,u-boot程序從flash基址處開(kāi)始保存,Linux程序在相對(duì)flash基址的固定偏移0x100000處開(kāi)始保存。
[0032]S12:在u-boot程序啟動(dòng)過(guò)程中動(dòng)態(tài)解析flash基址;優(yōu)選的,在u-boot程序啟動(dòng)過(guò)程中動(dòng)態(tài)解析flash基址的步驟包括:在所述u-boot程序啟動(dòng)過(guò)程中,將所述u_boot程序從flash搬移到內(nèi)存的內(nèi)存基址處。
[0033]S13:根據(jù)所述flash基址和所述約束關(guān)系,計(jì)算Linux基址;優(yōu)選的,將所述u-boot程序從flash搬移到內(nèi)存的內(nèi)存基址處的步驟包括:將搬移到的內(nèi)存基址保存到全局?jǐn)?shù)據(jù)gd的重定位地址成員;將內(nèi)存基址和flash基址的差值保存到全局?jǐn)?shù)據(jù)gd的重定位偏移成員;根據(jù)flash基址計(jì)算公式解析所述fla