解析單片機上應(yīng)用的一款Boot Loader_第1頁
解析單片機上應(yīng)用的一款Boot Loader_第2頁
解析單片機上應(yīng)用的一款Boot Loader_第3頁
解析單片機上應(yīng)用的一款Boot Loader_第4頁
解析單片機上應(yīng)用的一款Boot Loader_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

解析單片機上應(yīng)用的一款BootLoader來源:電子設(shè)計應(yīng)用作者:沈陽農(nóng)業(yè)大學(xué)李娜許童羽李征明BootLoader概述BootLoader的概念及功能在以ARM為代表的嵌入式系統(tǒng)中,操作系統(tǒng)內(nèi)核運行前的硬件初始化、建立內(nèi)核鏡像等都是由BootLoader來完成的。在PC機上,最先啟動的是主板上的BIOS,BIOS負(fù)責(zé)對硬件初始化,給操作系統(tǒng)提供硬件的接口函數(shù)等等,但在嵌入式操作系統(tǒng)中并沒有BIOS,因此整個嵌入式操作系統(tǒng)的加載啟動任務(wù)就完全由BootLoader來完成。圖1BootLoader流程圖BootLoader通常存放于目標(biāo)平臺的非易失存儲介質(zhì)中,主要用于完成由硬件啟動到操作系統(tǒng)啟動的過渡,能夠在上電后對SDRAM、CACHE、FLASH等硬件部分進行檢測,建立內(nèi)存空間的映射圖和內(nèi)核鏡像,建立通訊通道和調(diào)試通道等,還能夠提供ShellMenu檢測設(shè)置菜單和相應(yīng)的檢測程序,引導(dǎo)操作系統(tǒng)及應(yīng)用程序,從而為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。目前,嵌入式系統(tǒng)中廣泛應(yīng)用的UBoot、vivi、blob、armboot等BootLoader在原有功能的基礎(chǔ)上,增加了更多的功能并大大增強了移植性。嵌入式系統(tǒng)中硬件的種類繁多,差距較大,而BootLoader是嚴(yán)重依賴于硬件而實現(xiàn)的。不同的CPU體系需要不同的BootLoader,即便是同一種體系結(jié)構(gòu),由于其它硬件設(shè)備配置的不同,如板卡硬件地址的分配、RAM芯片的型號等,也需要對BootLoader作一定的修改才能使用。因此,開發(fā)人員需針對不同的處理器和開發(fā)板,對BootLoader進行定制,來實現(xiàn)不同的功能。BootLoader的操作模式BootLoader通常包括“啟動加載(Bootloading)”和“下載(Downloading)”兩種模式。這兩種操作模式僅對開發(fā)人員具有一定的意義。啟動加載模式:BootLoader從目標(biāo)機上的固態(tài)存儲設(shè)備上將操作系統(tǒng)加載到RAM中運行,無需用戶介入。此模式是BootLoader正常的工作模式。下載模式:在這種模式下,目標(biāo)機上的BootLoader通過串口連接或網(wǎng)絡(luò)連接等手段從主機上下載文件到目標(biāo)機的RAM中,然后再燒寫到目標(biāo)機上的固態(tài)存儲設(shè)備中。通常在第一次安裝內(nèi)核與根文件系統(tǒng)以及系統(tǒng)的更新時使用此模式。BootLoader的具體實現(xiàn)硬件配置本文以UP-NetARM3000為例來介紹BootLoader的工作機理和運行流程。UP-NetARM3000使用的是三星公司生產(chǎn)的S3C44B0X芯片,這是三星公司推出的一款高性價比和高性能的微控制器。它具有32位的ARM7TDMI內(nèi)核,外部時鐘為8MHz,內(nèi)部倍頻最高可達(dá)72MHz,工作頻率為64MHz。S3C44B0X通過提供全面的、通用的片上外設(shè),大大減少了系統(tǒng)中處理器以外的元器件配置,從而使系統(tǒng)的成本大大降低,它集成的各種片上功能包括:8KBCache、擴展內(nèi)存控制器、2通道UART帶有握手協(xié)議、1通道SI0、2個通用DMA、2個外設(shè)用DMA、外部存儲控制器、LCD控制器、IIC/IIS總線接口、5個通道PWM定時器和一個內(nèi)部定時器、看門狗定時器、71個通用I/O口、8個外部中斷源、8通道10位ADC、片上PLL時鐘產(chǎn)生器等。BootLoader的啟動流程大多數(shù)BootLoader通常都分為Stage1和Stage2兩大部分。Stage1通常由匯編語言編寫,即BootLoader的啟動代碼,旨在對部分硬件設(shè)備進行初始化。Stage2即BootLoader的主代碼,為了實現(xiàn)更加復(fù)雜的功能,使代碼具有更好的可讀性和可移植性,通常由C語言來實現(xiàn),主要用來加載操作系統(tǒng)內(nèi)核。具體啟動流程如圖1所示。?Stage1部分設(shè)置CPU的速度、時鐘頻率及中斷控制寄存器BootLoader的啟動代碼首先定義了一個全局入口,然后對異常向量進行設(shè)置。由于BootLoader嚴(yán)重的依賴于硬件而實現(xiàn),因此根據(jù)CPU體系結(jié)構(gòu)和具體的硬件配置來設(shè)置CPU的速度、時鐘頻率及中斷控制寄存器。除完成上述功能,啟動代碼還需要實現(xiàn)禁止看門狗定時器、設(shè)置時鐘控制寄存器、設(shè)置鎖相環(huán)控制寄存器、使能所有功能單元塊時鐘等功能。另外,系統(tǒng)中斷的設(shè)置也是在這部分實現(xiàn)的,主要是中斷向量表和IRQ中斷入口地址的設(shè)置。//設(shè)置處理器時鐘PIWLOCKTIMEIdrrO,=LOQKTIMEIdrrl^O^fffstrrl.ErO]〃■設(shè)置吋鐘頻率IdrrO,=PL丄CONidrrl,=[:(M_DIV.?12)h-(P_DI<J?4)+S_DIVJstrrl,[rO]存儲器的分配S3C44B0X的存儲系統(tǒng)具有一些主要特征,如:支持?jǐn)?shù)據(jù)存儲的大、小端選擇;地址空間具有8個存儲體,每個存儲體可達(dá)32MB;對所有存儲體的訪問大小均可以進行改變;7個存儲器的起始地址固定,1個存儲器的起始地址可變。在本文介紹的這款BootLoader中,啟動代碼通過對BUSWIDTH的賦值來使能各個存儲器。其具體對應(yīng)情況如右面所示:啟動代碼還有一個重要的任務(wù)—初始化內(nèi)存控制寄存器,它主要通過設(shè)置13個從0x01c80000開始的寄存器來實現(xiàn),包括BWSC0N總線寬度與等待狀態(tài)控制寄存器、BANKCONn塊控制寄存器。標(biāo)號SMRDATA處為將要賦予內(nèi)存控制寄存器的具體值。以ResetHandler標(biāo)號地址為參照,根據(jù)其偏移地址推算出SMRDATA標(biāo)號地址的實際位置,然后讀取該處的數(shù)據(jù)對內(nèi)存控制寄存器進行賦值。adrrO,ResetHandler//I^Res.etHandler^代碼中的實際地址加裁到rdIdrrl^Resethandler〃將巳tHmndle槪接時決定的值於挖「1、5ubrOjrljrO,IdrrO^SMRDATA//設(shè)定存儲器控制寄存器IdmiarO/rl-rl^}IdrrO^OxOlcSOOOO”內(nèi)存寄存器絢第一個寄存器基地址stmiarO^rl-rlS}圖2映像文件地址映射形成可執(zhí)行文件在嵌入式系統(tǒng)應(yīng)用程序中,可執(zhí)行文件通常包括RO(Read_Only)段、RW(Read_Write)段和BSS段。當(dāng)需要燒寫內(nèi)存中的映像文件到FLASH中時,通常都會把BootLoader代碼先移到FLASH的高地址空間中,因為通常RO的地址都是0x0,防止在燒寫時覆蓋本來在FLASH中已有的BootLoader代碼。程序編譯、鏈接時要求編譯器設(shè)置的Readonly地址要和最終代碼下載的地址相同,如圖2所示。BootLoader映像文件最終運行的地址空間是OBank,因此將ROBase設(shè)置為OxO,RWBase設(shè)置為0x0c60000,經(jīng)編譯后生成bin格式的可執(zhí)行文件燒寫到FLASH0地址處。在程序運行之前,RO段和RW段全部放在FLASH中,RO段可以直接在FLASH中運行,而RW必須調(diào)入SDRAM中才可以運行,因此,程序運行過程中RO段保持已設(shè)置完畢的0x0地址不變,而必須將RW段拷貝到RWBase即0x0c60000地址處,并將ZI段進行零初始化。LDR rO,=|Image$$RO$$Limit|LDR rl,=|Image$$RW$$Base|LDR r3,=|Imacie$iZI$$Base|亡MP 0rl對巳3和fU進行比較BEQ%F10CMPrl/r3/攜貝RW段的數(shù)據(jù)§JRWBaseLDRCC灼[rO],#47/L.DRCQ「冇[rO]+ADDrO,#4STRC.Cr2-,[rl],#4//STRCCr2,[rl]+ADDrl,rl,#4B亡亡^BOLDRrl,=|Image$£ZI$$Limit|//ZI^的存儲區(qū)域界限MCJVr2,#□CMPr3,rl7/ZI段Ci初始化STRGC「&冋」#4BC.C%B2?Stage2部分初始化硬件BootLoader主程序?qū)Υ谶M行調(diào)試并對本階段所涉及的硬件進行檢測后,通過串口下載鏡像到目標(biāo)機中。主代碼中定義了LCD_Test()、LED_Test()、ADTest()、KeyTest()、BootSystem()等函數(shù)測試部分硬件的功能。以AD的檢測函數(shù)為例簡要介紹檢測函數(shù)功能具體的實現(xiàn)。ADTest_Loop()是針對AD硬件的操作函數(shù),而Set_UartLoopFunc()函數(shù)是把ADTest_Loop()設(shè)置到串口輪詢函數(shù)數(shù)組中(串口輪詢函數(shù)數(shù)組中還包括其他的檢測函數(shù)),AD檢測函數(shù)在對目標(biāo)進行操作的同時查詢是否有停止命令,如果Uart_Getch()函數(shù)沒有查詢到串口有輸入的停止命令,調(diào)用串口輪詢數(shù)組中的其他函數(shù),否則立刻返回。VoidADTestfQ{intiride^;:Uart_Printf(,h\nTestADfromchannel0to3.Pre^sanykeyreturn\n'!)jinit_ADde¥ice();indeii=Set_UartLoopFunc(ADTest_Loop);Uart_Getch(OjjClear_UartLoopFunt(inde^-i;.voidADTest_LoopQ{staticx:intcount=0;inti^.pount++;if(count<50000)return;count=0;for(j=0;j.<4;i++y{'Uart_Prir!tf("%SAD%d=%4.4d";iJGetADresult(f)i;}J;檢測內(nèi)存及引導(dǎo)系統(tǒng)在BootLoader的主程序中需要檢測重要的硬件一一內(nèi)存,檢測完畢后會分別通過串口和LCD輸出提示信息。接下來會等待查詢是否有鍵按下,當(dāng)沒有鍵按下時,正常引導(dǎo)操作系統(tǒng),否則顯示ShellMenu。BootLoader程序在獲得系統(tǒng)的控制權(quán)之后,對關(guān)鍵硬件檢測并且沒有發(fā)現(xiàn)故障,控制臺也沒有發(fā)出啟用ShellMenu檢測菜單的情況下,根據(jù)文件系統(tǒng)的管理和支持,從NANDFLASH中讀取操作系統(tǒng)或應(yīng)用程序的代碼到SDRAM的指定位置,然后把程序指針轉(zhuǎn)移到該位置,從而使操作系統(tǒng)獲得控制權(quán),完成引導(dǎo)過程。staticvoid(*run)(void)=(void(*)(void))DOWNLOAD_ADDRESS,在程序中定義得此函數(shù)指針能夠把指定位置的地址強制轉(zhuǎn)換為函數(shù)指針類型,然后使用run()函數(shù)即可運行該地址處的指令。在實現(xiàn)引導(dǎo)功能的代碼中,打開并讀取指定的系統(tǒng)文件到指定的位置D0WNL0AD_ADDRESS(0xc080000)處即完成了裝載,將程序指針指向已指定的這個位置,使用run()函數(shù)運行該地址處的指令,即可實現(xiàn)控制的轉(zhuǎn)移。當(dāng)看到屏幕上顯示操作系統(tǒng)的啟動信息后,BootLoader完成任務(wù),成功的引導(dǎo)了操作系統(tǒng)。intLoadFile(cha^:filenairie;.junsignedchar^pbuffer):{_FILE*file;intI; "file=OpenOSFile(filenameJFILEMODE._READ):if(file==NULL)::returnFALSE;ReadOSFile(file/-pbufferfile->filesize).;.匚loseOSFileffi'e);returnTRUE;}■voidBoot(char^pbootfile){if(pbootfile==NULL)-pbootfile=SYSTEM_CODE;rlNTMSK-O^ffflTfff;initOSFilefJ;if(!LoadFi!e(pbootfileXunsignedchar*D0NLOAD_ADDRE5SUart_Printf("\nCan'tfindfile^s'^pbootfile);return^:}runtg}結(jié)語本文介紹了在基于S3C44B0X的UP-

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論