ARM匯編語言程序設(shè)計基礎(chǔ) 第10章 Bootloader 設(shè)計基礎(chǔ)
《ARM匯編語言程序設(shè)計基礎(chǔ) 第10章 Bootloader 設(shè)計基礎(chǔ)》由會員分享,可在線閱讀,更多相關(guān)《ARM匯編語言程序設(shè)計基礎(chǔ) 第10章 Bootloader 設(shè)計基礎(chǔ)(33頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、 第第10章章 Bootloader 設(shè)計根底設(shè)計根底10.1 Bootloader 概述 nBootloader,啟動引導(dǎo)程序,又叫引導(dǎo)加載程序,功能強大的Bootloader也就直接叫做板級支持包BSP,Board Support Packet或者固件(Firmware)。近年來,為了方便嵌入式產(chǎn)品的推廣,也有些直接將Bootloader叫做BIOS。BIOS是PC機的“根本輸入輸出系統(tǒng),燒錄在電腦主板上一塊專門的芯片中。一般BIOS由主板廠商或者專門的BIOS生產(chǎn)商提供,不是開源的,用戶不能修改其中的代碼進行定制。而嵌入式系統(tǒng)的開發(fā)那么離不開Bootloader的開發(fā),它也是整個系統(tǒng)開發(fā)
2、中的難點之一。 10.1.1 Bootloader 的作用 nBootloader是在嵌入式操作系統(tǒng)內(nèi)核運行之前運行的一段小程序,也是系統(tǒng)開機后執(zhí)行的第一段程序。通過這段小程序,可以初始化硬件設(shè)備、建立內(nèi)存空間,從而將系統(tǒng)的軟硬件環(huán)境設(shè)置成一個適宜的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準備好正確的環(huán)境。Bootloader是依賴于底層硬件而實現(xiàn)的,因此建立一個通用的嵌入式系統(tǒng)Bootloader幾乎是不可能的。n在PC機中,主板的BIOS和位于硬盤0磁道上的主引導(dǎo)記錄(Master Boot Record, MBR)中的引導(dǎo)程序如LILO或GRUB等,兩者一起的作用就相當于Bootloader在嵌
3、入式系統(tǒng)中的作用,即實現(xiàn)整個系統(tǒng)的啟動引導(dǎo),并最終能引導(dǎo)操作系統(tǒng)的運行。10.1.1 Bootloader 的作用n在嵌入式系統(tǒng)中,Bootloader對嵌入式設(shè)備中的主要部件如CPU、SDRAM、FLASH、串口等進行了初始化,這樣可以使用Bootloader通過串口下載各種文件到設(shè)備的SDRAM中或者燒錄Flash,然后將操作系統(tǒng)內(nèi)核讀入到內(nèi)存中來或者直接跳轉(zhuǎn)到內(nèi)核的入口點,從而實現(xiàn)操作系統(tǒng)的引導(dǎo)?,F(xiàn)在有些Bootloader也把對以太網(wǎng)的支持等功能也加進去了,這樣一個功能比較強大的Bootloader實際上就已經(jīng)相當于一個微型的操作系統(tǒng)了。10.1.1 Bootloader 的作用nBo
4、otloader從第一條指令跳轉(zhuǎn)后,就開始初始化各種最重要的硬件,比方CPU的工作頻率、定時器、中斷、看門狗、檢測RAM大小和Flash等。一般,硬件初始化的這段程序是用匯編語言編寫的,其后就用C語言編寫??傮w上Bootloader主要完成以下工作:10.1.1 Bootloader 的作用n初始化CPU速度;n初始化內(nèi)存,包括啟用內(nèi)存庫,初始化內(nèi)存配置存放器等;n初始化中斷控制器,在系統(tǒng)啟動時,關(guān)閉中斷,關(guān)閉看門狗;n初始化串行端口如果在目標上有的話;n啟用指令/數(shù)據(jù)高速緩存;n設(shè)置堆棧指針;n設(shè)置參數(shù)區(qū)域并構(gòu)造參數(shù)結(jié)構(gòu)和標記,即引導(dǎo)參數(shù);n執(zhí)行POST上電自檢來標識存在的設(shè)備并報告有何問題
5、;n為電源管理提供掛起/恢復(fù)支持;n傳輸操作系統(tǒng)內(nèi)核鏡像文件到目標機。也可以將操作系統(tǒng)內(nèi)核鏡像文件事先存放在Flash中,這樣就不需要Bootloader和主機傳輸操作系統(tǒng)內(nèi)核鏡像文件,這通常是在做成產(chǎn)品的情況下使用。而一般在開發(fā)過程中,為了調(diào)試內(nèi)核的方便,不將操作系統(tǒng)內(nèi)核鏡像文件固化在Flash中,這就需要主機和目標機進行文件傳輸;n跳轉(zhuǎn)到內(nèi)核的開始,在此又分為ROM啟動和RAM啟動。所謂ROM啟動就是用XIP技術(shù)直接在Flash中執(zhí)行操作系統(tǒng)鏡像文件;所謂RAM啟動就是指把內(nèi)核鏡像從Flash復(fù)制到RAM中,然后再將PC指針跳轉(zhuǎn)到RAM中的操作系統(tǒng)啟動地址。10.1.1 Bootloade
6、r 的作用n在嵌入式Linux軟件系統(tǒng)的開發(fā)中,一般將軟件分為啟動引導(dǎo)程序(Bootloader)、操作系統(tǒng)內(nèi)核(OS Kernel)、根文件系統(tǒng)(File System)、圖形窗口系統(tǒng)(GUI)和應(yīng)用程序(AP)等幾個局部,其中前三局部是一個可運行的嵌入式系統(tǒng)必不可少的, 它們在開發(fā)的過程中,被分別獨立地編譯鏈接或打包為一個二進制目標文件,然后下載燒錄到嵌入式系統(tǒng)的ROM一般是Flash中。后兩局部如果有的話,n通常也是和根文件系統(tǒng)一n起打包后燒錄到Flash中。n因此,在Bootloader階段,n也提供了對Flash設(shè)備的分n區(qū)格式化的支持,其空間n分配通常如下圖。10.1.2 Boot
7、loader 的工作模式的工作模式n對于嵌入式系統(tǒng)的開發(fā)人員而言,Bootloader通常包含“啟動加載和“下載這兩種不同的工作模式。當然,這兩種工作模式的區(qū)別一般僅僅對于開發(fā)人員才有意義,而對最終用戶來說,Bootloader 的作用就是用來加載操作系統(tǒng),從而啟動整個嵌入式系統(tǒng)。 10.1.2 Bootloader 的工作模式的工作模式n啟動加載Boot loading模式 n正常啟動模式 n下載Downloading模式n提供給開發(fā)人員或者技術(shù)支持人員使用 10.1.3 Bootloader 的啟動流程的啟動流程 n分為stage1和stage2兩個階段 n一般依賴于 CPU 體系結(jié)構(gòu)的代
8、碼,比方設(shè)備初始化代碼等,都放在stage1中,而且通常都用匯編語言來實現(xiàn),以到達短小精悍且啟動快的目的;而 stage2 那么通常用C語言來實現(xiàn),這樣可以實現(xiàn)各種復(fù)雜的功能比方串口、以太網(wǎng)接口的支持等 Bootloader的第一階段 1. 硬件設(shè)備初始化2. 為加載 Bootloader 的 stage2 準備 RAM 空間 3. 拷貝 Bootloader的 stage2 到 RAM 空間中4. 設(shè)置好堆棧 5.跳轉(zhuǎn)到 stage2 的 C 入口點main()函數(shù)處Bootloader的第二階段 n初始化本階段要使用到的硬件設(shè)備n檢測系統(tǒng)內(nèi)存映射(memory map)n將 kernel
9、映像和根文件系統(tǒng)映像從 flash 上讀到 RAM 空間中n為內(nèi)核設(shè)置啟動參數(shù)n調(diào)用內(nèi)核10.2 S3C2410 平臺下平臺下Linux的的BootloadernVivinU-BOOT10.2 S3C2410 平臺下平臺下Linux的的Bootloadern1. vivi簡介簡介nvivi是由韓國是由韓國mizi公司為公司為ARM處理器系列設(shè)計處理器系列設(shè)計的一個的一個bootloader。它同樣支持啟動加載模。它同樣支持啟動加載模式和下載工作模式。式和下載工作模式。n在下載模式下,在下載模式下,vivi為用戶提供一個命令行人為用戶提供一個命令行人機接口,通過這個人機接口可以使用機接口,通過這
10、個人機接口可以使用vivi提供提供的一些命令。如果嵌入式系統(tǒng)沒有鍵盤和顯示,的一些命令。如果嵌入式系統(tǒng)沒有鍵盤和顯示,那么可以利用那么可以利用vivi中的串口,將其和宿主機連中的串口,將其和宿主機連接起來,利用宿主機中的串口軟件如接起來,利用宿主機中的串口軟件如windows中的超級終端或者中的超級終端或者Linux中的中的minicom來控制。來控制。 10.2.1 vivinvivi常用的命令 Load,Part,bon,Param,Boot,Flashnvivi文件結(jié)構(gòu)文件結(jié)構(gòu)n代碼包括代碼包括arch,init,lib,drivers和和include等幾個目錄,共等幾個目錄,共200
11、多條文件多條文件nvivi的配置和編譯的配置和編譯n #make distclean。去除一些早先生成的無。去除一些早先生成的無用的目標文件。用的目標文件。n#make menuconfig。然后可以根據(jù)菜單中。然后可以根據(jù)菜單中的信息進行配置。的信息進行配置。nmake命令開始編譯命令開始編譯 10.2.1 vivi10.2.1 vivin3. vivi的配置和編譯的配置和編譯nvivi的配置和嵌入式的配置和嵌入式Linux內(nèi)核一樣,可以采內(nèi)核一樣,可以采用菜單化的形式進行。其步驟主要如下:用菜單化的形式進行。其步驟主要如下:n #make distclean。去除一些早先生成。去除一些早先
12、生成的無用的目標文件。的無用的目標文件。n #make menuconfig。然后可以根據(jù)菜。然后可以根據(jù)菜單中的信息進行配置。單中的信息進行配置。n編譯。菜單配置完畢后,保存退出。然后執(zhí)編譯。菜單配置完畢后,保存退出。然后執(zhí)行行“make命令開始編譯。命令開始編譯。10.2.1 vivinvivi的第一階段主要完成了依賴于CPU的體系結(jié)構(gòu)硬件初始化,包括禁止中斷、初始化串口、復(fù)制第二階段到RAM中等。由于這些代碼是和硬件緊密相關(guān)的,因此要求讀者在閱讀時對照S3C2410處理器的數(shù)據(jù)手冊,查閱相關(guān)的存放器的描述,以便更好地理解。這些匯編代碼全部就集中在viviarchs3c2410目錄下的這一
13、個匯編文件中,當然還有相關(guān)的頭文件。10.2.1 vivinvivi第二階段的分析第二階段的分析nvivi的第二階段的入口就是的第二階段的入口就是init/,按照,按照源代碼的組織流程,根據(jù)模塊化劃分的源代碼的組織流程,根據(jù)模塊化劃分的原那么,共分為原那么,共分為8個功能模塊即八個步驟,個功能模塊即八個步驟,在源代碼的注釋中以在源代碼的注釋中以step非常清晰的給非常清晰的給出了區(qū)分。出了區(qū)分。 10.2.1 vivin第一步:vivi從main()函數(shù)開始執(zhí)行,函數(shù)開始通過 putstr(vivi_bannner)打印出vivi的版本。 n第二步:主要是初始化GPIO,本的思路和方法就是在把
14、握好整個系統(tǒng)硬件資源的前提下,根據(jù)芯片的數(shù)據(jù)手冊把所有的初始值設(shè)定,在這里利用set_gpios這個函數(shù)就可以完成初始化了。 10.2.1 vivin第三步:進行內(nèi)存映射初始化和內(nèi)存管理單元MMU的初始化工作 n第四步:初始化堆,然后內(nèi)存會發(fā)生變化。在這里,實際上就是實現(xiàn)動態(tài)內(nèi)存分配策略。 10.2.1 vivin第五步:初始化mtd設(shè)備 n第六步:配置參數(shù),主要是init_priv_data函數(shù)。 n第七步:提供vivi人機接口的各種命令。 n第八步:進入Bootloader的兩種模式之一.10.2.2 U-bootnU-Boot,全稱Universal Bootloader,是遵循GPL條
15、款的開放源碼工程 n它還支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS等嵌入式操作系統(tǒng)。其目前主要支持的目標操作系統(tǒng)有OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks, LynxOS, pSOS, QNX, RTEMS, ARTOS等,因此功能比較強大,這也是U-Boot中Universal的一層含義。10.2.2 U-bootnU-Boot的主要特點有:n 開放源碼; 支持多種嵌入式操作系統(tǒng)內(nèi)核,如Linux、NetBS
16、D, VxWorks, QNX, RTEMS, ARTOS,n LynxOS; 支持多個處理器系列,如PowerPC、ARM、x86、MIPS、XScale; 較高的可靠性和穩(wěn)定性; 較高的可靠性和穩(wěn)定性; 高度靈活的功能設(shè)置,適合U-Boot調(diào)試、操作系統(tǒng)不同引導(dǎo)要求、產(chǎn)品發(fā)布等; 豐富的設(shè)備驅(qū)動源碼,如串口、以太網(wǎng)、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、鍵盤等; 較為豐富的開發(fā)調(diào)試文檔與強大的網(wǎng)絡(luò)技術(shù)支持;10.2.2 U-bootn常用命令 :Help/ ? Bdinfo setenv printenv saveenv mw md mm flin foeras
17、e起始地址 結(jié)束地址. cp源地址 目標地址大小 imi起始地址 bootm起始地址 tftboot起始地址 鏡像名 reset10.2.2 U-bootnU-boot文件結(jié)構(gòu)文件結(jié)構(gòu)nU-boot代碼采用了一種高度模塊化的編程方式代碼采用了一種高度模塊化的編程方式,與移與移植樹有關(guān)的有以下幾個目錄植樹有關(guān)的有以下幾個目錄. nboard:這個目錄存放了所有:這個目錄存放了所有U-boot支持的目標板的支持的目標板的子目錄子目錄,如如board/smdk2410/*就是我們說關(guān)心的就是我們說關(guān)心的.要要將將U-boot移植到自己的移植到自己的s3c2410 x目標板上目標板上,必須參考必須參考
18、這個目錄下的內(nèi)容這個目錄下的內(nèi)容,比方比照比方比照Flash以及以及Flash寬度和大寬度和大小的定制鄧就要修改其中的。小的定制鄧就要修改其中的。ncommon: 獨立于處理器體系結(jié)構(gòu)的通用代碼,如內(nèi)獨立于處理器體系結(jié)構(gòu)的通用代碼,如內(nèi)存大小探測與故障檢測;存大小探測與故障檢測; cpu:與處理器相關(guān)的文件。如:與處理器相關(guān)的文件。如mpc8xx子子 目錄下含串口、網(wǎng)口、目錄下含串口、網(wǎng)口、LCD驅(qū)動及中斷初始化等文件;驅(qū)動及中斷初始化等文件;10.2.2 U-bootndriver: 通用設(shè)備驅(qū)動,如CFI FLASH 驅(qū)動(目前對INTEL FLASH支持較好)nfs:這個目錄中存放了U-
19、boot支持的文件系統(tǒng). examples:可在U-Boot下運行的例如程序;如;nInclude: U-Boot頭文件;這個目錄存放頭文件的公共目錄,其中定義了所有和 S3C2410X相關(guān)的資源的配置參數(shù),我們往往只需修改這個文件就可以配置目標板的參數(shù),如波特率、引導(dǎo)參數(shù)、物理內(nèi)存映射等。10.2.2 U-bootn lib_xxx: 處理器體系相關(guān)的文件,如lib_ppc,nlib_arm:目錄分別包含與PowerPC、ARM體系結(jié)構(gòu)相關(guān)的文件;nnet: 與網(wǎng)絡(luò)功能相關(guān)的文件目錄,如bootp,nfs,tftp;npost: 上電自檢文件目錄。尚有待于進一步完善;nrtc rtc:驅(qū)動程
20、序;ntools: 用于創(chuàng)立U-Boot S-RECORD和BIN鏡像文件的工具; 10.3 其他常見的Bootloader n 1. WinCE的Bootloadern Nboot和Eboot是WinCE的Bootloader。 Nboot是nand flash bootloader的簡寫,CPU可以直接從nand flash 啟動,但是其代碼大小不能超過4k,功能有限;Eboot那么支持ethernet network以太網(wǎng),功能強大,用于 Ehternet在線調(diào)試和下載。 Eboot提供的命令命令說明Help列出所有支持的命令并加以說明Eboot從宿主機上通過網(wǎng)線下載CE映像并加載Wri
21、te向某一內(nèi)存地址寫入數(shù)據(jù)Read顯示某一內(nèi)存地址的數(shù)據(jù)Jump跳轉(zhuǎn)到某一地址執(zhí)行程序Xmodem從計算機的超級終端接收以Xmodem協(xié)議傳送的文件Toy測試平臺CPU的計數(shù)器是否運轉(zhuǎn)Flash擦除或者更新Flash中的數(shù)據(jù)Tlbread顯示CPU的所有TLB表Tlbwrit設(shè)置CPU的TLBMacaddr設(shè)置CPU的MAC地址Seti設(shè)置平臺的IP地址Blob是Bootloader Object的縮寫,是一款功能強大的Bootloader,目前常用于Intel推出的Xscale架構(gòu)的CPU的引導(dǎo),譬如SA1110、PXA255/270等。 nBlob的代碼也可以分為兩個階段。第一階段從文件開始,這也是開機執(zhí)行的第段代碼,這局部代碼是在Flash中運行,主要功能包括對S3C2410的一些存放器的初始化和將Blob第二階段代碼從Flash拷貝到SDRAM中。這一階段的代碼被編譯后最大不能超過1kB。 第二階段的起始文件為,被復(fù)制到SDRAM后,就從第一階段跳到這個文件開始執(zhí)行,先進行一些變量設(shè)置、堆棧的初始化等工作后,跳轉(zhuǎn)到進入C函數(shù)。第二階段最大為63KB
- 溫馨提示:
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)容負責。
6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習題含答案
- 2煤礦安全監(jiān)測工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識競賽試題
- 1 礦井泵工考試練習題含答案
- 2煤礦爆破工考試復(fù)習題含答案
- 1 各種煤礦安全考試試題含答案