一種操作系統(tǒng)的啟動方法
【專利摘要】本發(fā)明提供了一種操作系統(tǒng)的啟動方法,該方法包括:設(shè)置嵌入式微處理器的引導(dǎo)設(shè)置標志,選擇啟動模式;當選擇NOR啟動模式后,啟動NOR?FLASH;獲得主程序入口,啟動操作系統(tǒng)。本發(fā)明提高了引導(dǎo)加載的穩(wěn)定性和速度。
【專利說明】一種操作系統(tǒng)的啟動方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及操作系統(tǒng)的啟動方法,特別涉及一種嵌入式系統(tǒng)的操作系統(tǒng)的啟動方法。
【背景技術(shù)】
[0002]嵌入式系統(tǒng)是在滿足實際應(yīng)用基礎(chǔ)上的最小簡化型系統(tǒng),廣泛應(yīng)用于工業(yè)控制、電子設(shè)備產(chǎn)品等,例如智能交通系統(tǒng)中的實時 監(jiān)控。由于嵌入式系統(tǒng)的啟動和程序的加載都要由引導(dǎo)程序來完成,因此,引導(dǎo)程序在嵌入式系統(tǒng)中是非常關(guān)鍵的,如果引導(dǎo)程序出問題,或引導(dǎo)程序加載的應(yīng)用程序出現(xiàn)問題,都可能會引起整個系統(tǒng)癱瘓,甚至不可修復(fù)。嵌入式的BootLoader通常是存儲在FLASH上的。NOR FLASH作為閃存的一種,支持片內(nèi)執(zhí)行,讀速度稍快于NAND,更加適用于小量代碼存儲?;贏RM內(nèi)核的微處理器在工業(yè)應(yīng)用中使用廣泛,例如三星S3C2440嵌入式微處理器基于ARM920T內(nèi)核,內(nèi)含高性能32位RISC處理器,然而現(xiàn)有的基于ARM920T內(nèi)核的嵌入式微處理器的系統(tǒng)引導(dǎo)方法在利用NOR閃存的過程中,均存在不穩(wěn)定,速度慢的現(xiàn)象。為了應(yīng)用于實時監(jiān)控等領(lǐng)域,基于該處理器的嵌入式系統(tǒng)的啟動方式仍有改進的必要。
[0003]因此,針對相關(guān)技術(shù)中所存在的上述問題,目前尚未提出有效的解決方案。
【發(fā)明內(nèi)容】
[0004]為解決上述現(xiàn)有技術(shù)所存在的問題,本發(fā)明提出了一種操作系統(tǒng)的啟動方法,用于在嵌入式系統(tǒng)中啟動?呆作系統(tǒng),其特征在于,包括:
[0005]步驟一,設(shè)置嵌入式微處理器的引導(dǎo)設(shè)置標志,選擇啟動模式;
[0006]步驟二,當選擇NOR啟動模式后,啟動NOR FLASH ;
[0007]步驟三,獲得主程序入口,啟動操作系統(tǒng)。
[0008]優(yōu)選地,所述嵌入式微處理器的ARM根據(jù)所述引導(dǎo)設(shè)置標志,選擇從異步外部存儲器接口上的NOR或者從ARM的內(nèi)部ROM啟動,
[0009]所述引導(dǎo)設(shè)置標志共有如下4種設(shè)置:
[0010](I)引導(dǎo)設(shè)置標志=01時,為外部異步存儲器接口啟動方式,此時啟動不包含ARM內(nèi)部ROM,即不運行只讀BootLoader
[0011](2)引導(dǎo)設(shè)置標志=00時,只讀BootLoader運行,NOR模式啟動,
[0012](3)引導(dǎo)設(shè)置標志=10時,只讀BootLoader運行,SD模式啟動,
[0013](4)引導(dǎo)設(shè)置標志=11時,只讀BootLoader運行,UART模式啟動。
[0014]優(yōu)選地,所述步驟二進一步包括:
[0015]步驟2.1.執(zhí)行只讀BootLoader,初始化2KB的空間0x4000_0x7FFF作為堆棧,最后32bit閑置,用于寫入找到的用戶BootLoader的塊號,禁止所有中斷和中斷請求;
[0016]步驟2.2.從NOR器件中讀出設(shè)備ID,然后從只讀BootLoader的信息表中讀取出頁大小和塊大小,該信息表是S3C2440所支持的NOR設(shè)備的列表;然后,只讀BootLoader在NOR的block I中的page 0查找用戶BootLoader的描述符;
[0017]步驟2.3.如果沒有根據(jù)特殊啟動模式指示符找到有效的用戶BootLoader,繼續(xù)查找下一個塊block,所述特殊啟動模式指示符是基于在一個塊的第O頁的前32bit讀取檢測到的信息,最后兩位決定了 NOR的啟動模式;所述特殊啟動模式包括:安全模式,DMA模式,高速緩存模式,快速啟動模式;
[0018]步驟2.4當找到有效的用戶BootLoader標識符后,所在塊的號碼被寫在ARM內(nèi)部RAM的最后32bit,該32bit可通過JATG讀取,如果在搜尋完所有塊之后還沒有找到有用的標識符,則嘗試通過SD啟動;
[0019]步驟2.5.當有效的用戶BootLoader被找到之后,只讀BootLoader處理用戶BootLoader描述符,該用戶BootLoader描述符給出了裝載用戶BootLoader和移交用戶BootLoader控制權(quán)所需要的信息,并且提供了在用戶BootLoader的拷貝期間是否應(yīng)用DMA的信息;當滿足啟動條件時,只讀BootLoader拷貝用戶BootLoader到內(nèi)部RAM,在系統(tǒng)中斷向量表之后開始拷貝用戶BootLoader,所述用戶BootLoader描述符提供了用戶裝載程序的詳細信息,包括特殊啟動模式、用戶BootLoader入口的絕對地址,以頁為單位的用戶BootLoader的大小,用戶BootLoader起始塊地址,用戶BootLoader UBL的起始頁地址;利用ECC校驗來確定在將用戶BootLoader讀取到內(nèi)部RAM時是否有錯誤發(fā)生,如果檢測到錯誤,則用戶BootLoader通過ECC校正算法來校正錯誤,如果讀取用戶BootLoader失敗,則拷貝過程暫停,只讀BootLoader從找到特殊啟動模式的塊中繼續(xù)查找相鄰的塊,以查找另一特殊啟動模式,直到成功讀取讀取用戶BootLoader,如果在搜索了所有塊之后沒有找到有效的用戶BootLoader描述符,貝U只讀BootLoader通過SD啟動;
[0020]步驟2.6將用戶BootLoader讀取到內(nèi)部RAM之后,只讀BootLoader將控制權(quán)交給用戶 BootLoader ;
[0021]步驟2.7用戶BootLoader開始掃描N0R,以查找應(yīng)用BootLoader描述符的特殊啟動模式,如果找到了描述符,則用戶BootLoader將應(yīng)用BootLoader裝載進RAM,并跳轉(zhuǎn)到應(yīng)用BootLoader的入口地址應(yīng)用BootLoader的描述符,如果找不到應(yīng)用BootLoader的描述符,則提示加載失敗,方法中止;所述應(yīng)用BootLoader描述符提供了應(yīng)用程序的詳細信息,包括應(yīng)用BootLoader在NOR中存儲的起始塊地址,應(yīng)用BootLoader拷貝至DDR的起始地址,應(yīng)用BootLoader的入口地址,應(yīng)用BootLoader的大小,應(yīng)用BootLoader是否被壓縮的
O
[0022]本發(fā)明相比現(xiàn)有技術(shù),具有以下優(yōu)點:
[0023]提出了基于ARM內(nèi)核的嵌入式微處理器利用NOR閃存的系統(tǒng)引導(dǎo)加載操作系統(tǒng)的方法,提高了引導(dǎo)加載的穩(wěn)定性和速度,適用于實時監(jiān)控的應(yīng)用。
【專利附圖】
【附圖說明】
[0024]圖1是根據(jù)本發(fā)明實施例的操作系統(tǒng)的啟動方法的流程圖。
【具體實施方式】
[0025]下文與圖示本發(fā)明原理的附圖一起提供對本發(fā)明一個或者多個實施例的詳細描述。結(jié)合這樣的實施例描述本發(fā)明,但是本發(fā)明不限于任何實施例。本發(fā)明的范圍僅由權(quán)利要求書限定,并且本發(fā)明涵蓋諸多替代、修改和等同物。在下文描述中闡述諸多具體細節(jié)以便提供對本發(fā)明的透徹理解。出于示例的目的而提供這些細節(jié),并且無這些具體細節(jié)中的一些或者所有細節(jié)也可以根據(jù)權(quán)利要求書實現(xiàn)本發(fā)明。
[0026]本發(fā)明的一方面提供了一種操作系統(tǒng)的啟動方法。圖1是根據(jù)本發(fā)明實施例的操作系統(tǒng)的啟動方法流程圖。以下實施例以微處理器S3C2440為例具體說明此類架構(gòu)的嵌入式系統(tǒng)引導(dǎo)方法。如圖1所示,實施本發(fā)明的具體步驟如下:
[0027]步驟一,設(shè)置嵌入式微處理器的弓I導(dǎo)設(shè)置標志,選擇啟動模式。
[0028]S3C2440的ARM可以從異步外部存儲器接口上的NOR或者從ARM的內(nèi)部ROM啟動,這是由引導(dǎo)設(shè)置標志的配置決定的。引導(dǎo)設(shè)置標志也可以進一步設(shè)置ROM啟動方式,即在芯片重置之后,除了當引導(dǎo)設(shè)置標志為01表明外部異步存儲器接口已啟動外,ARM—定從內(nèi)部ROM的0x00008000處開始啟動,ARM內(nèi)部ROM中的這部分程序稱作ROM Boot Loader (只讀 BootLoader)。
[0029]引導(dǎo)設(shè)置標志共有如下4種設(shè)置:
[0030](I)引導(dǎo)設(shè)置標志=01時,為外部異步存儲器接口啟動方式,這種模式由硬件控制,啟動不包含ARM內(nèi)部R0M,即只讀BootLoader不運行。在由NOR啟動的情況下,用戶必須自己在NOR的啟動頁中放入必要的啟動代碼,這些代碼必須為NOR設(shè)備設(shè)置外部異步存儲器接口模塊。在外部異步存儲器接口被設(shè)置之后,啟動會緊跟NOR啟動頁中的外部異步存儲器接口管理頁而繼續(xù)。
[0031](2)引導(dǎo)設(shè)置標志=00時,只讀BootLoader運行,NOR啟動。
[0032](3)引導(dǎo)設(shè)置標志=10時,只讀BootLoader運行,SD啟動。
[0033]由此可見,不經(jīng)由只讀BootLoader的啟動方式只有引導(dǎo)設(shè)置標志=01 一種,而經(jīng)由只讀BootLoader的啟動方式有3種,此時引導(dǎo)設(shè)置標志古01)。
[0034]在微處理器S3C2440的啟動方式中,NOR啟動適用于系統(tǒng)參數(shù)和功能固定的應(yīng)用場合。SD啟動適用于系統(tǒng)參數(shù)和功能經(jīng)常需要改變的場合。在設(shè)計系統(tǒng)選擇啟動方式時,可以根據(jù)各種方式的特點,選擇合適的方式啟動系統(tǒng)。
[0035]步驟二,當選擇NOR模式后,啟動NOR FLASH。
[0036]當引導(dǎo)設(shè)置標志被設(shè)置為00時,NOR模式將啟動,NOR啟動模式默認NOR位于EM_CEO接口。啟動NOR的具體步驟進一步包括:
[0037](I)只讀BootLoader執(zhí)行,初始化2KB的空間0x4000_0x7FFF作為堆棧,最后32bit(0x7FFC-0x8000)閑置,因為這里會被寫入找到的用戶BootLoader的塊號。此時會禁止所有中斷、中斷請求和快速中斷請求。
[0038]⑵NOR器件的設(shè)備ID從NOR被讀出來,然后從只讀BootLoader的信息表中讀取出一些必要的信息(如頁大小和塊大小)。信息表是S3C2440所支持的NOR設(shè)備的列表;然后,只讀BootLoader在NOR的block I中的page O查找用戶BootLoader的描述符。
[0039](3)如果沒有根據(jù)特殊啟動模式指示符找到有效的用戶BootLoader,繼續(xù)查找下一個塊,為了防止NOR中的壞塊,優(yōu)選地連續(xù)搜尋最多24個塊,足夠應(yīng)付絕大部分NOR中的錯誤。
[0040]特殊啟動模式指示符是基于在一個塊的第O頁的前32bit讀取檢測到的,只有塊
1-塊24的page O將會被讀取和查找特殊啟動模式指示符。特殊啟動模式指示符的最后兩位決定了 NOR的啟動模式。所述特殊啟動模式包括:安全模式,DMA模式,高速緩存模式,快速啟動模式,及其任意組合。
[0041](4)當一個有效的用戶BootLoader標識符被找到之后,這個塊的號碼被寫在ARM內(nèi)部RAM的最后32bit。
[0042]這種特性是為了調(diào)試方便,通過讀這32bit,可以知道用戶BootLoader在哪一個NOR塊讀到了有效的用戶BootLoader標識符,該32bit可通過JATG讀取,如果在搜尋完24個塊之后還沒有找到有用的標識符,則S3C2440將會嘗試通過SD啟動。
[0043](5)當有效的用戶BootLoader被找到之后,只讀BootLoader處理用戶BootLoader描述符,該用戶BootLoader描述符給出了裝載用戶BootLoader和移交用戶BootLoader控制權(quán)所需要的信息。
[0044]接下來讀取和處理用戶BootLoader,只讀BootLoader首先可能會根據(jù)特殊啟動模式所提供的信息啟用一些與高速緩存相關(guān)的操作。此外,描述符提供了在用戶BootLoader的拷貝期間是否應(yīng)用DMA的信息。當滿足啟動條件時,只讀BootLoader拷貝用戶BootLoader到S3C2440的內(nèi)部RAM,起始地址為0x00000020,開始的32B是ARM的系統(tǒng)中斷向量表(8個向量,每個4B)。在該中斷向量表之后,開始拷貝用戶BootLoader,用戶BootLoader描述符提供了用戶裝載程序的詳細信息,該信息包括:特殊啟動模式、用戶BootLoader入口的絕對地址,用戶BootLoader的大小(以頁為單位),用戶BootLoader起始塊地址,用戶BootLoader UBL的起始頁地址。
[0045]NOR只讀BootLoader應(yīng)用4bit ECC校驗來確定在將用戶BootLoader讀取到內(nèi)部RAM時是否有錯誤發(fā)生。假如4bit ECC校驗檢測到了錯誤,則用戶BootLoader會通過ECC校正算法來校正錯誤。如果由于其他原因讀取用戶BootLoader失敗,則拷貝過程會因為需要特殊啟動模式而立即暫停,然后只讀BootLoader會從找到特殊啟動模式的那一塊繼續(xù)查找相鄰的塊,以查找另一特殊啟動模式。當找到下一特殊啟動模式時,將重復(fù)這一過程。
[0046]利用這種機制,特殊啟動模式和用戶BootLoader可以被復(fù)制達多次,給予NOR讀取錯誤以足夠的冗余和錯誤恢復(fù)能力。
[0047]如果在搜索了 24個塊之后沒有找到有效的用戶BootLoader描述符,則只讀BootLoader會轉(zhuǎn)向去通過SD啟動。
[0048](6)將用戶BootLoader讀取到內(nèi)部RAM之后,只讀BootLoader將控制權(quán)交給用戶BootLoader。
[0049](7)用戶BootLoader開始掃描N0R,以查找應(yīng)用BootLoader描述符的特殊啟動模式,如果找到了描述符,則用戶BootLoader將主程序裝載進DDR,并跳轉(zhuǎn)到主程序的入口地址。用戶BootLoader在NOR Flash塊中查找應(yīng)用BootLoader的描述符,如果找不到,貝1J提示加載失敗,流程中止。
[0050]應(yīng)用BootLoader描述符提供了主應(yīng)用程序的詳細信息,該信息包括:主程序在NOR中存儲的起始塊地址,主程序拷貝至DDR的起始地址,主程序的入口地址,主程序的大小,主程序是否被壓縮的標志。
[0051]步驟三,獲得主程序入口,啟動操作系統(tǒng)。
[0052]在上述步驟二中,如果找到應(yīng)用BootLoader的描述符,則引導(dǎo)成功,建立操作系統(tǒng)內(nèi)核,并下載到存儲器,建立文件系統(tǒng)。[0053]綜上所述,本發(fā)明提出了基于ARM內(nèi)核的嵌入式微處理器利用NOR閃存的系統(tǒng)引導(dǎo)加載操作系統(tǒng)的方法,提高了引導(dǎo)加載的穩(wěn)定性和速度,適用于實時監(jiān)控的應(yīng)用。
[0054]顯然,本領(lǐng)域的技術(shù)人員應(yīng)該理解,上述的本發(fā)明的各模塊或各步驟可以用通用的計算系統(tǒng)來實現(xiàn),它們可以集中在單個的計算系統(tǒng)上,或者分布在多個計算系統(tǒng)所組成的網(wǎng)絡(luò)上,可選地,它們可以用計算系統(tǒng)可執(zhí)行的程序代碼來實現(xiàn),從而,可以將它們存儲在存儲系統(tǒng)中由計算系統(tǒng)來執(zhí)行。這樣,本發(fā)明不限制于任何特定的硬件和軟件結(jié)合。
[0055]應(yīng)當理解的是,本發(fā)明的上述【具體實施方式】僅僅用于示例性說明或解釋本發(fā)明的原理,而不構(gòu)成對本發(fā)明的限制。因此,在不偏離本發(fā)明的精神和范圍的情況下所做的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。此外,本發(fā)明所附權(quán)利要求旨在涵蓋落入所附權(quán)利要求范圍和邊界、或者這種范圍和邊界的等同形式內(nèi)的全部變化和修改例。
【權(quán)利要求】
1.一種操作系統(tǒng)的啟動方法,用于在嵌入式系統(tǒng)中啟動操作系統(tǒng),其特征在于,包括: 步驟一,設(shè)置嵌入式微處理器的引導(dǎo)設(shè)置標志,選擇啟動模式; 步驟二,當選擇NOR啟動模式后,啟動NOR FLASH ; 步驟三,獲得主程序入口,啟動操作系統(tǒng)。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述嵌入式微處理器的ARM根據(jù)所述引導(dǎo)設(shè)置標志,選擇從異步外部存儲器接口上的NOR或者從ARM的內(nèi)部ROM啟動, 所述引導(dǎo)設(shè)置標志共有如下4種設(shè)置: (1)引導(dǎo)設(shè)置標志=01時,為外部異步存儲器接口啟動方式,此時啟動不包含ARM內(nèi)部ROM,即不運行只讀BootLoader (2)引導(dǎo)設(shè)置標志=00時,只讀BootLoader運行,NOR模式啟動, (3)引導(dǎo)設(shè)置標志=10時,只讀BootLoader運行,SD模式啟動。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟二進一步包括: 步驟2.1.執(zhí)行只讀BootLoader,初始化2KB的空間0x4000_0x7FFF作為堆棧,最后32bit閑置,用于寫入找到的用戶BootLoader的塊號,禁止所有中斷和中斷請求; 步驟2.2.從NOR器件中讀出設(shè)備ID,然后從只讀BootLoader的信息表中讀取出頁大小和塊大小,該信息表 是S3C2440所支持的NOR設(shè)備的列表;然后,只讀BootLoader在NOR的block I中的page O查找用戶BootLoader的描述符; 步驟2.3.如果沒有根據(jù)特殊啟動模式指示符找到有效的用戶BootLoader,繼續(xù)查找下一個塊block,所述特殊啟動模式指示符是基于在一個塊的第O頁的前32bit讀取檢測到的信息,最后兩位決定了 NOR的啟動模式;所述特殊啟動模式包括:安全模式,DMA模式,高速緩存模式,快速啟動模式; 步驟2.4當找到有效的用戶BootLoader標識符后,所在塊的號碼被寫在ARM內(nèi)部RAM的最后32bit,該32bit可通過JATG讀取,如果在搜尋完所有塊之后還沒有找到有用的標識符,則嘗試通過SD啟動; 步驟2.5.當有效的用戶BootLoader被找到之后,只讀BootLoader處理用戶BootLoader描述符,該用戶BootLoader描述符給出了裝載用戶BootLoader和移交用戶BootLoader控制權(quán)所需要的信息,并且提供了在用戶BootLoader的拷貝期間是否應(yīng)用DMA的信息;當滿足啟動條件時,只讀BootLoader拷貝用戶BootLoader到內(nèi)部RAM,在系統(tǒng)中斷向量表之后開始拷貝用戶BootLoader,所述用戶BootLoader描述符提供了用戶裝載程序的詳細信息,包括特殊啟動模式、用戶BootLoader入口的絕對地址,以頁為單位的用戶BootLoader的大小,用戶BootLoader起始塊地址,用戶BootLoaderUBL的起始頁地址;利用ECC校驗來確定在將用戶BootLoader讀取到內(nèi)部RAM時是否有錯誤發(fā)生,如果檢測到錯誤,則用戶BootLoader通過ECC校正算法來校正錯誤,如果讀取用戶BootLoader失敗,則拷貝過程暫停,只讀BootLoader從找到特殊啟動模式的塊中繼續(xù)查找相鄰的塊,以查找另一特殊啟動模式,直到成功讀取讀取用戶BootLoader,如果在搜索了所有塊之后沒有找到有效的用戶BootLoader描述符,則只讀BootLoader通過SD啟動; 步驟2.6將用戶BootLoader讀取到內(nèi)部RAM之后,只讀BootLoader將控制權(quán)交給用戶 BootLoader ; 步驟2.7用戶BootLoader開始掃描N0R,以查找應(yīng)用BootLoader描述符的特殊啟動模式,如果找到了描述符,則用戶BootLoader將應(yīng)用BootLoader裝載進RAM,并跳轉(zhuǎn)到應(yīng)用BootLoad er的入口地址應(yīng)用BootLoader的描述符,如果找不到應(yīng)用BootLoader的描述符,則提示加載失敗,方法中止;所述應(yīng)用BootLoader描述符提供了應(yīng)用程序的詳細信息,包括應(yīng)用BootLoader在NOR中存儲的起始塊地址,應(yīng)用BootLoader拷貝至DDR的起始地址,應(yīng)用BootLoader的入口地址,應(yīng)用BootLoader的大小,應(yīng)用BootLoader是否被壓縮的
O
【文檔編號】G06F9/44GK104035776SQ201410284058
【公開日】2014年9月10日 申請日期:2014年6月23日 優(yōu)先權(quán)日:2014年6月23日
【發(fā)明者】楊霖, 劉勇, 蔣浩 申請人:成都萬維圖新信息技術(shù)有限公司