管理學(xué),基礎(chǔ),答案 (2)_第1頁
已閱讀1頁,還剩34頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第10章 Bootloader 設(shè)計基礎(chǔ),說明:由于本課程內(nèi)容較多,各學(xué)校開課的課時不同,講授的內(nèi)容也有不同,本課件本著盡可能的多的提供素材,以滿足各位老師不同的需要。希望各位老師根據(jù)自己的講授需要,對課件進(jìn)行剪裁編排,以適合自己的課程要求。,10.1 Bootloader 概述,Bootloader,啟動引導(dǎo)程序,又叫引導(dǎo)加載程序,功能強(qiáng)大的Bootloader也就直接叫做板級支持包(BSP,Board Support Packet

2、)或者固件(Firmware)。近年來,為了方便嵌入式產(chǎn)品的推廣,也有些直接將Bootloader叫做BIOS。BIOS是PC機(jī)的“基本輸入輸出系統(tǒng)”,燒錄在電腦主板上一塊專門的芯片中。一般BIOS由主板廠商或者專門的BIOS生產(chǎn)商提供,不是開源的,用戶不能修改其中的代碼進(jìn)行定制。而嵌入式系統(tǒng)的開發(fā)則離不開Bootloader的開發(fā),它也是整個系統(tǒng)開發(fā)中的難點之一。,10.1.1 Bootloader 的作用,Bootloader是在嵌

3、入式操作系統(tǒng)內(nèi)核運行之前運行的一段小程序,也是系統(tǒng)開機(jī)后執(zhí)行的第一段程序。通過這段小程序,可以初始化硬件設(shè)備、建立內(nèi)存空間,從而將系統(tǒng)的軟硬件環(huán)境設(shè)置成一個合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。Bootloader是依賴于底層硬件而實現(xiàn)的,因此建立一個通用的嵌入式系統(tǒng)Bootloader幾乎是不可能的。在PC機(jī)中,主板的BIOS和位于硬盤0磁道上的主引導(dǎo)記錄(Master Boot Record, MBR)中的引導(dǎo)程

4、序(如LILO或GRUB等),兩者一起的作用就相當(dāng)于Bootloader在嵌入式系統(tǒng)中的作用,即實現(xiàn)整個系統(tǒng)的啟動引導(dǎo),并最終能引導(dǎo)操作系統(tǒng)的運行。,10.1.1 Bootloader 的作用,在嵌入式系統(tǒng)中,Bootloader對嵌入式設(shè)備中的主要部件如CPU、SDRAM、FLASH、串口等進(jìn)行了初始化,這樣可以使用Bootloader通過串口下載各種文件到設(shè)備的SDRAM中或者燒錄Flash,然后將操作系統(tǒng)內(nèi)核讀入到內(nèi)存中來或者直接

5、跳轉(zhuǎn)到內(nèi)核的入口點,從而實現(xiàn)操作系統(tǒng)的引導(dǎo)。現(xiàn)在有些Bootloader也把對以太網(wǎng)的支持等功能也加進(jìn)去了,這樣一個功能比較強(qiáng)大的Bootloader實際上就已經(jīng)相當(dāng)于一個微型的操作系統(tǒng)了。,10.1.1 Bootloader 的作用,Bootloader從第一條指令跳轉(zhuǎn)后,就開始初始化各種最重要的硬件,比如CPU的工作頻率、定時器、中斷、看門狗、檢測RAM大小和Flash等。一般,硬件初始化的這段程序是用匯編語言編寫的,其后就用C語言

6、編寫。總體上Bootloader主要完成以下工作:,10.1.1 Bootloader 的作用,初始化CPU速度;初始化內(nèi)存,包括啟用內(nèi)存庫,初始化內(nèi)存配置寄存器等;初始化中斷控制器,在系統(tǒng)啟動時,關(guān)閉中斷,關(guān)閉看門狗;初始化串行端口(如果在目標(biāo)上有的話);啟用指令/數(shù)據(jù)高速緩存;設(shè)置堆棧指針;設(shè)置參數(shù)區(qū)域并構(gòu)造參數(shù)結(jié)構(gòu)和標(biāo)記,即引導(dǎo)參數(shù);執(zhí)行POST(上電自檢)來標(biāo)識存在的設(shè)備并報告有何問題;為電源管理提供掛起/恢復(fù)支

7、持;傳輸操作系統(tǒng)內(nèi)核鏡像文件到目標(biāo)機(jī)。也可以將操作系統(tǒng)內(nèi)核鏡像文件事先存放在Flash中,這樣就不需要Bootloader和主機(jī)傳輸操作系統(tǒng)內(nèi)核鏡像文件,這通常是在做成產(chǎn)品的情況下使用。而一般在開發(fā)過程中,為了調(diào)試內(nèi)核的方便,不將操作系統(tǒng)內(nèi)核鏡像文件固化在Flash中,這就需要主機(jī)和目標(biāo)機(jī)進(jìn)行文件傳輸;跳轉(zhuǎn)到內(nèi)核的開始,在此又分為ROM啟動和RAM啟動。所謂ROM啟動就是用XIP技術(shù)直接在Flash中執(zhí)行操作系統(tǒng)鏡像文件;所謂RAM

8、啟動就是指把內(nèi)核鏡像從Flash復(fù)制到RAM中,然后再將PC指針跳轉(zhuǎn)到RAM中的操作系統(tǒng)啟動地址。,10.1.1 Bootloader 的作用,在嵌入式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ā)的過程中,被分別獨立地

9、編譯鏈接或打包為一個二進(jìn)制目標(biāo)文件,然后下載(燒錄)到嵌入式系統(tǒng)的ROM(一般是Flash)中。后兩部分如果有的話,通常也是和根文件系統(tǒng)一起打包后燒錄到Flash中。因此,在Bootloader階段,也提供了對Flash設(shè)備的分區(qū)格式化的支持,其空間分配通常如圖所示。,10.1.2 Bootloader 的工作模式,對于嵌入式系統(tǒng)的開發(fā)人員而言,Bootloader通常包含“啟動加載”和“下載”這兩種不同的工作模式。當(dāng)然,這

10、兩種工作模式的區(qū)別一般僅僅對于開發(fā)人員才有意義,而對最終用戶來說,Bootloader 的作用就是用來加載操作系統(tǒng),從而啟動整個嵌入式系統(tǒng)。,10.1.2 Bootloader 的工作模式,啟動加載(Boot loading)模式 --正常啟動模式 下載(Downloading)模式--提供給開發(fā)人員或者技術(shù)支持人員使用,10.1.3 Bootloader 的啟動流程,分為stage1和stage2兩個階段 一般依賴于 CPU

11、體系結(jié)構(gòu)的代碼,比如設(shè)備初始化代碼等,都放在stage1中,而且通常都用匯編語言來實現(xiàn),以達(dá)到短小精悍且啟動快的目的;而 stage2 則通常用C語言來實現(xiàn),這樣可以實現(xiàn)各種復(fù)雜的功能(比如串口、以太網(wǎng)接口的支持等),Bootloader的第一階段,1. 硬件設(shè)備初始化2. 為加載 Bootloader 的 stage2 準(zhǔn)備 RAM 空間 3. 拷貝 Bootloader的 stage2 到 RAM 空間中4. 設(shè)置好堆棧 5

12、.跳轉(zhuǎn)到 stage2 的 C 入口點main()函數(shù)處,Bootloader的第二階段,初始化本階段要使用到的硬件設(shè)備檢測系統(tǒng)內(nèi)存映射(memory map)將 kernel 映像和根文件系統(tǒng)映像從 flash 上讀到 RAM 空間中為內(nèi)核設(shè)置啟動參數(shù)調(diào)用內(nèi)核,10.2 S3C2410 平臺下Linux的Bootloader,ViviU-BOOT,10.2 S3C2410 平臺下Linux的Bootloader,1. v

13、ivi簡介vivi是由韓國mizi公司為ARM處理器系列設(shè)計的一個bootloader。它同樣支持啟動加載模式和下載工作模式。在下載模式下,vivi為用戶提供一個命令行人機(jī)接口,通過這個人機(jī)接口可以使用vivi提供的一些命令。如果嵌入式系統(tǒng)沒有鍵盤和顯示,那么可以利用vivi中的串口,將其和宿主機(jī)連接起來,利用宿主機(jī)中的串口軟件(如windows中的超級終端或者Linux中的minicom)來控制。,10.2.1 vivi,vivi

14、常用的命令 Load,Part,bon,Param,Boot,Flash,vivi文件結(jié)構(gòu)代碼包括arch,init,lib,drivers和include等幾個目錄,共200多條文件vivi的配置和編譯 #make distclean。清除一些早先生成的無用的目標(biāo)文件。#make menuconfig。然后可以根據(jù)菜單中的信息進(jìn)行配置。make”命令開始編譯,10.2.1 vivi,10.2.1 vivi,3. vivi的

15、配置和編譯vivi的配置和嵌入式Linux內(nèi)核一樣,可以采用菜單化的形式進(jìn)行。其步驟主要如下:① #make distclean。清除一些早先生成的無用的目標(biāo)文件。② #make menuconfig。然后可以根據(jù)菜單中的信息進(jìn)行配置。編譯。菜單配置完畢后,保存退出。然后執(zhí)行“make”命令開始編譯。,10.2.1 vivi,vivi的第一階段主要完成了依賴于CPU的體系結(jié)構(gòu)硬件初始化,包括禁止中斷、初始化串口、復(fù)制第二階段到R

16、AM中等。由于這些代碼是和硬件緊密相關(guān)的,因此要求讀者在閱讀時對照S3C2410處理器的數(shù)據(jù)手冊,查閱相關(guān)的寄存器的描述,以便更好地理解。這些匯編代碼全部就集中在vivi\arch\s3c2410目錄下的head.S這一個匯編文件中,當(dāng)然還有相關(guān)的頭文件。,10.2.1 vivi,vivi第二階段的分析vivi的第二階段的入口就是init/main.c,按照源代碼的組織流程,根據(jù)模塊化劃分的原則,共分為8個功能模塊即八個步驟,在源代碼

17、的注釋中以step非常清晰的給出了區(qū)分。,10.2.1 vivi,第一步:vivi從main()函數(shù)開始執(zhí)行,函數(shù)開始通過 putstr(vivi_bannner)打印出vivi的版本。 第二步:主要是初始化GPIO,本的思路和方法就是在把握好整個系統(tǒng)硬件資源的前提下,根據(jù)芯片的數(shù)據(jù)手冊把所有的初始值設(shè)定,在這里利用set_gpios這個函數(shù)就可以完成初始化了。,10.2.1 vivi,第三步:進(jìn)行內(nèi)存映射初始化和內(nèi)存管理單元(MMU

18、)的初始化工作 第四步:初始化堆,然后內(nèi)存會發(fā)生變化。在這里,實際上就是實現(xiàn)動態(tài)內(nèi)存分配策略。,10.2.1 vivi,第五步:初始化mtd設(shè)備 第六步:配置參數(shù),主要是init_priv_data函數(shù)。 第七步:提供vivi人機(jī)接口的各種命令。 第八步:進(jìn)入Bootloader的兩種模式之一.,10.2.2 U-boot,U-Boot,全稱Universal Bootloader,是遵循GPL條款的開放源碼項目 它還支持Ne

19、tBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS等嵌入式操作系統(tǒng)。其目前主要支持的目標(biāo)操作系統(tǒng)有OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks, LynxOS, pSOS, QNX, RTEMS, ARTOS等,因此功能比較強(qiáng)大,這也是U-Boot中Universal的一層

20、含義。,10.2.2 U-boot,U-Boot的主要特點有:① 開放源碼; ?、?支持多種嵌入式操作系統(tǒng)內(nèi)核,如Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS;  ?、?支持多個處理器系列,如PowerPC、ARM、x86、MIPS、XScale;  ④ 較高的可靠性和穩(wěn)定性;  ④ 較高的可靠性和穩(wěn)定性; ?、?高度靈活的功能設(shè)置,適合U-Boot調(diào)試、操作系統(tǒng)不

21、同引導(dǎo)要求、產(chǎn)品發(fā)布等;  ⑥ 豐富的設(shè)備驅(qū)動源碼,如串口、以太網(wǎng)、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、鍵盤等; ?、?較為豐富的開發(fā)調(diào)試文檔與強(qiáng)大的網(wǎng)絡(luò)技術(shù)支持;,10.2.2 U-boot,常用命令 :Help/ ? Bdinfo setenv printenv saveenv mw md mm flin foerase[起始地址 結(jié)束地址]. cp[源地址 目標(biāo)地址大小] imi[起始地址]

22、 bootm[起始地址] tftboot[起始地址 鏡像名] reset,10.2.2 U-boot,U-boot文件結(jié)構(gòu)U-boot代碼采用了一種高度模塊化的編程方式,與移植樹有關(guān)的有以下幾個目錄. board:這個目錄存放了所有U-boot支持的目標(biāo)板的子目錄,如board/smdk2410/*就是我們說關(guān)心的.要將U-boot移植到自己的s3c2410x目標(biāo)板上,必須參考這個目錄下的內(nèi)容,比如對比Flash以及Flash寬度

23、和大小的定制鄧就要修改其中的flash.c。common: 獨立于處理器體系結(jié)構(gòu)的通用代碼,如內(nèi)存大小探測與故障檢測; cpu:與處理器相關(guān)的文件。如mpc8xx子 目錄下含串口、網(wǎng)口、LCD驅(qū)動及中斷初始化等文件;,10.2.2 U-boot,driver: 通用設(shè)備驅(qū)動,如CFI FLASH

24、 驅(qū)動(目前對INTEL FLASH支持較好)fs:這個目錄中存放了U-boot支持的文件系統(tǒng). examples:可在U-Boot下運行的示例程序;如hello_world.c,timer.c;Include: U-Boot頭文件;這個目錄存放頭文件的公共目錄,其中include/configs/smdk2410.h定義了所有和 S3C2410X相關(guān)的資源的配置參數(shù),我們往往只需修改這

25、個文件就可以配置目標(biāo)板的參數(shù),如波特率、引導(dǎo)參數(shù)、物理內(nèi)存映射等。,10.2.2 U-boot,lib_xxx: 處理器體系相關(guān)的文件,如lib_ppc,lib_arm:目錄分別包含與PowerPC、ARM體系結(jié)構(gòu)相關(guān)的文件;net: 與網(wǎng)絡(luò)功能相關(guān)的文件目錄,如bootp,nfs,tftp;post: 上電自檢文件目錄。尚有待于進(jìn)一步完善;rtc rtc:驅(qū)動程序;tools: 用于創(chuàng)建U-Boot S-RECORD和BI

26、N鏡像文件的工具;,10.3 其他常見的Bootloader,1. WinCE的Bootloader Nboot和Eboot是WinCE的Bootloader。 Nboot是nand flash bootloader的簡寫,CPU可以直接從nand flash 啟動,但是其代碼大小不能超過4k,功能有限;Eboot則支持ethernet network(以太網(wǎng)),功能強(qiáng)大,用于 Ehternet在線調(diào)試和下載。,Eboot提供的命

27、令,2.BlobBlob是Bootloader Object的縮寫,是一款功能強(qiáng)大的Bootloader,目前常用于Intel推出的Xscale架構(gòu)的CPU的引導(dǎo),譬如SA1110、PXA255/270等。,Blob的代碼也可以分為兩個階段。第一階段從start.s文件開始,這也是開機(jī)執(zhí)行的第段代碼,這部分代碼是在Flash中運行,主要功能包括對S3C2410的一些寄存器的初始化和將Blob第二階段代碼從Flash拷貝到SDRAM中。

28、這一階段的代碼被編譯后最大不能超過1kB。,第二階段的起始文件為trampoline.s,被復(fù)制到SDRAM后,就從第一階段跳到這個文件開始執(zhí)行,先進(jìn)行一些變量設(shè)置、堆棧的初始化等工作后,跳轉(zhuǎn)到main.c進(jìn)入C函數(shù)。第二階段最大為63KB,,在第二階段中,主要完成如下功能:◆外圍的硬件初始化(串口,USB等);◆從Flash中將kernel加載到SDRAM的kernel區(qū)域;◆從Flash中的ramdisk加載到SDRAM的ra

29、mdisk區(qū)域;◆根據(jù)用戶選擇,進(jìn)入下載模式或者直接啟動OS Kernel。,思考題與習(xí)題,簡述Bootloader的功能和它的啟動過程。簡述Bootloader的兩種模式??偨Y(jié)vivi的第一階段和第二階段實現(xiàn)的功能。參考數(shù)據(jù)手冊,編寫程序禁止看門狗寄存器的匯編程序。參考數(shù)據(jù)手冊,編寫程序設(shè)置S3C2410串口波特率的匯編程序。比較u-boot和vivi,寫出他們的異同。列舉出你所知道的的Bootloader。寫出利用P

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論