arm嵌入式系統(tǒng)設(shè)計基礎(chǔ)教程課件-第10章bootloader基礎(chǔ)_第1頁
arm嵌入式系統(tǒng)設(shè)計基礎(chǔ)教程課件-第10章bootloader基礎(chǔ)_第2頁
arm嵌入式系統(tǒng)設(shè)計基礎(chǔ)教程課件-第10章bootloader基礎(chǔ)_第3頁
arm嵌入式系統(tǒng)設(shè)計基礎(chǔ)教程課件-第10章bootloader基礎(chǔ)_第4頁
arm嵌入式系統(tǒng)設(shè)計基礎(chǔ)教程課件-第10章bootloader基礎(chǔ)_第5頁
免費預(yù)覽已結(jié)束,剩余27頁可下載查看

付費下載

下載本文檔

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

文檔簡介

10.1

Bootloader

概述Bootloader,啟動引導(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ā)中的難點之一。10.1.1

Bootloader

的作用Bootloader是在 操作系統(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幾乎是不可能的。在PC機中,主板的BIOS和位于硬盤0磁道上的主引導(dǎo)記錄(Master

Boot

Record,

MBR)中的引導(dǎo)程序(如LILO或GRUB等),兩者一起的作用就相當于Bootloader在 系統(tǒng)中的作用,即實現(xiàn)整個系統(tǒng)的啟動引導(dǎo),并最終能引導(dǎo)操作系統(tǒng)的運行。10.1.1

Bootloader

的作用在 系統(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

的作用Bootloader從第一條指令跳轉(zhuǎn)后,就開始初始化各種最重要的硬件,比如CPU的工作頻率、定時器、中斷、看門狗、檢測

RAM大小和Flash等。一般,硬件初始化的這段程序是用匯編語言編寫的,其后就用C語言編寫??傮w上Bootloader主要完成以下工作:10.1.1

Bootloader

的作用初始化CPU速度;初始化內(nèi)存,包括啟用內(nèi)存庫,初始化內(nèi)存配置寄存器等;初始化中斷控制器,在系統(tǒng)啟動時,關(guān)閉中斷,關(guān)閉看門狗;初始化串行端口(如果在目標上有的話);啟用指令/數(shù)據(jù)高速緩存;設(shè)置堆棧指針;設(shè)置參數(shù)區(qū)域并構(gòu)造參數(shù)結(jié)構(gòu)和標記,即引導(dǎo)參數(shù);執(zhí)行POST(上電自檢)來標識存在的設(shè)備并報告有何問題;為電源管理提供掛起/恢復(fù)支持;傳輸操作系統(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中,這就需要主機和目標機進行文件傳輸;跳轉(zhuǎn)到內(nèi)核的開始,在此又分為ROM啟動和RAM啟動。所謂ROM啟動就是用XIP技術(shù)直接在Flash中執(zhí)行操作系統(tǒng)鏡像文件;所謂RAM啟動就是指把內(nèi)核鏡像從Flash

到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)(FileSystem)、圖形窗口系統(tǒng)(GUI)和應(yīng)用程序(AP)等幾個部分,其中系統(tǒng)必不可少的,它們在開發(fā)的前三部分是一個可運行的過程中,被分別獨立地編譯或打包為一個二進制目標文件,然后

(燒錄)到系統(tǒng)的ROM(一般是Flash)中。后兩部分如果有的話,通常也是和根文件系起打包后燒錄到Flash中。因此,在Bootloader階段,也提供了對Flash設(shè)備的分區(qū)格式化的支持,其空間分配通常

。10.1.2

Bootloader

的工作模式對于 系統(tǒng)的開發(fā) 而言,Bootloader通常包含“啟動加載”和“ ”這兩種不同的工作模式。當然,這兩種工作模式的區(qū)別一般僅僅對于開發(fā) 才有意義,而對最終用戶來說,Bootloader

的作用就是用來加載操作系統(tǒng),從而啟動整個 系統(tǒng)。10.1.2

Bootloader

的工作模式啟動加載(Boot

loading)模式--正常啟動模式(Downloading)模式--提供給開發(fā)

或者技術(shù)支持

使用10.1.3

Bootloader

的啟動流程分為stage1和stage2兩個階段一般依賴于

CPU體系結(jié)構(gòu)的代碼,比如設(shè)備初始化代碼等,都放在stage1中,而且通常都用匯編語言來實現(xiàn),以達到短小精悍且啟動快的目的;而

stage2則通常用C語言來實現(xiàn),這樣可以實現(xiàn)各種復(fù)雜的功能(比如串口、以太網(wǎng)接口的支持等)Bootloader的第一階段硬件設(shè)備初始化為加載

Bootloader

的stage2

準備

RAM空間拷貝

Bootloader的stage2

到RAM

空間中設(shè)置好堆棧跳轉(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的BootloaderViviU-BOOT10.2

S3C2410

平臺下Linux的Bootloader1.

vivi簡介vivi是由韓國mizi公司為ARM處理器系列設(shè)計的一個bootloader。它同樣支持啟動加載模式和工作模式。在 模式下,vivi為用戶提供一個命令行人機接口,通過這個人機接口可以使用vivi提供的一些命令。如果

系統(tǒng)沒有鍵盤和顯示,那么可以利用vivi中的串口,將其和宿主機連接起來,利用宿主機中的串口w

中的超級終端或者(如中的

)來控制。10.2.1

vivivivi常用

令Lo

art,bon,Param,Boot,Flashvivi文件結(jié)構(gòu)代碼包括arch,init,lib,drivers和include等幾個

,共200多條文件vivi的配置和編譯①

#makedistclean。清除一些早先生成的無用的目標文件。②

#make config。然后可以根據(jù)菜單中的信息進行配置。③

make”命令開始編譯10.2.1vivi10.2.1

vivi3.

vivi的配置和編譯vivi的配置和

Linux內(nèi)核一樣,可以采用菜單化的形式進行。其步驟主要如下:①#make

distclean。清除一些早先生成的無用的目標文件。②#make

config。然后可以根據(jù)菜單中的信息進行配置。編譯。菜單配置完畢后,保存退出。然后執(zhí)行“make”命令開始編譯。10.2.1

vivivivi的第一階段主要完成了依賴于CPU的體系結(jié)構(gòu)硬件初始化,包括 中斷、初始化串口、第二階段到RAM中等。由于這些代碼是和硬件緊密相關(guān)的,因此要求讀者在閱讀時對照S3C2410處理器的

,查閱相關(guān)的寄存器的描述,以便更好地理解。這些匯編代碼全部就集中在vivi\arch\s3c2410

下的head.S這一個匯編文件中,當然還有相關(guān)的頭文件。10.2.1

vivivivi第二階段的分析vivi的第二階段的就是init/main.c,按照源代碼的組織流程,根據(jù)模塊化劃分的原則,共分為8個功能模塊即八個步驟,在源代碼的注釋中以step非常清晰的給出了區(qū)分。10.2.1

vivi第一步:vivi從main()函數(shù)開始執(zhí)行,函數(shù)開始通過

putstr(vivi_bannner)打印出

vivi的版本。第二步:主要是初始化GPIO,本的思路和方法就是在把握好整個系統(tǒng)硬件資源的前提下,根據(jù)

把所有的初始值設(shè)定,在這里利用set_gpios這個函數(shù)就可以完成初始化了。10.2.1

vivi第三步:進行內(nèi)存

初始化和內(nèi)存管理單元(MMU)的初始化工作第四步:初始化堆,然后內(nèi)存會發(fā)生變化。在這里,實際上就是實現(xiàn)動態(tài)內(nèi)存分配策略。10.2.1

vivi第五步:初始化mtd設(shè)備第六步:配置參數(shù),主要是init_priv_data函數(shù)。第七步:提供vivi人機接口的各種命令。第八步:進入Bootloader的兩種模式之一.10.2.2

U-bootU-Boot,全稱UniversalBootloader,是遵循

GPL條款的開放源碼項目它還支持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-bootU-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)不同引導(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-boot常用命令

:Help/

? Bdinfo

setenvprintenv saveenv

mw

md

mm

flinfoerase[起始地址

結(jié)束地址].cp[源地址目標地址大小]imi[起始地址]bootm[起始地址]

tftboot[起始地址

鏡像名]

reset10.2.2

U-bootU-boot文件結(jié)構(gòu)U-boot代碼采用了一種高度模塊化的編程方式,與移植樹有關(guān)的有以下幾個

.board:這個 存放了所有U-boot支持的目標板的子,如board/smdk2410/*就是 說關(guān)心的.要將U-boot移植到自己的s3c2410x目標板上,必須參考這個目錄下的內(nèi)容,比如對比Flash以及Flash寬度和大小的定制鄧就要修改其中的mon:獨立于處理器體系結(jié)構(gòu)的通用代碼,如內(nèi)存大小探測與故障檢測;cpu:與處理器相關(guān)的文件。如mpc8xx子下含串口、網(wǎng)口、LCD驅(qū)動及中斷初始化等文件;10.2.2

U-bootdriver:通用設(shè)備驅(qū)動,如CFI

FLASH驅(qū)動(目前對IN

FLASH支持較好)fs:這個 中存放了U-boot支持的文件系統(tǒng).examples:可在U-Boot下運行的示例程序;如o_world.c,timer.c;Include:U-Boot頭文件;這個存放頭文件的公共,其中include/configs/smdk2410.h定義了所有和S3C2410X相關(guān)的資源的配置參數(shù),

往往只需修改這個文件就可以配置目標板的參數(shù),如波特率、引導(dǎo)參數(shù)、物理內(nèi)存等。10.2.2

U-bootlib_

:處理器體系相關(guān)的文件,如lib_ppc,lib_arm: 分別包含與PowerPC、ARM體系結(jié)構(gòu)相關(guān)的文件;net:

與網(wǎng)絡(luò)功能相關(guān)的文件 ,如bootp,nfs,tftp;post:

上電自檢文件 。尚有待于進一步完善;rtc

rtc:驅(qū)動程序;tools:用于創(chuàng)建U-BootS-RECORD和BIN鏡像文件的工具;10.3

其他常見的Bootloader1.

WinCE的BootloaderNboot和Eboot是WinCE的Bootloader。Nboot是nand

flash

bootloader的簡寫,CPU可以直接從nand

flash

啟動,但是其代碼大小

過4k,功能有限;Eboot則支持ethernetnetwork(以太網(wǎng)),功能強大,用于

Ehternet

調(diào)試

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論