<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于cortex-A8的Bootloader設計

基于cortex-A8的Bootloader設計

作者: 時(shí)間:2016-09-12 來(lái)源:網(wǎng)絡(luò ) 收藏

隨著(zhù)整個(gè)微電子行業(yè)日新月異的發(fā)展,ARM處理器已經(jīng)帶給了人們越來(lái)越多的驚喜。目前它憑借著(zhù)自身高性能,低成本,低功耗等特點(diǎn),已經(jīng)廣泛應用于消費電子、數字家電、及工業(yè)生產(chǎn)等領(lǐng)域中。ARM公司推出的新一代cortex系列產(chǎn)品為開(kāi)發(fā)人員提供了更多不同層面的選擇。cortex-A8為cortex 系列中的“A”系,屬于A(yíng)RMV7架構,主要面向搭載操作系統的,高性能的應用領(lǐng)域。Bootloader是系統上電后執行的第一段代碼,其功能類(lèi)似于電腦的BIOS。簡(jiǎn)單來(lái)說(shuō),Bootloader主要的工作有兩點(diǎn):其一是初始化底層硬件資源,為操作系統啟動(dòng)提供必要的環(huán)境;其二是從存儲設備中讀取操作系統鏡像并啟動(dòng)。但為了方便后期開(kāi)發(fā),我們往往要為Bootloader添加其他的功能。如支持串口打印調試信息,支持nfs網(wǎng)絡(luò )下載,支持根文件系統燒寫(xiě)等。本文以u-boot-2013.01為源碼包,設計和實(shí)現了一個(gè)基于平臺的,功能齊全且高效穩定的Bootloader。

本文引用地址:http://dyxdggzs.com/article/201609/303830.htm

1 硬件平臺

1.1 簡(jiǎn)介

是三星公司推出的一款基于cortex-A8架構的,高性能的應用處理器。該處理器支持ARM V7指令集,具有32位內部總線(xiàn)結構,主頻最高可達1GHz。另外該處理器還支持掛接LPDDR1、LPDDR2和DDR2類(lèi)型的RAM,Flash方面可選擇Nand Flash,Nor Flash等。不僅如此,該處理器還提供了包括串口、LCD、IIC、SPI、USB、HDMI等豐富的外部接口資源。目前s5pv210以其高效的性能和卓越的圖形處理能力已經(jīng)廣泛的應用于智能手機和平板電腦之中。

1.2 s5pv210的啟動(dòng)方式

s5pv210支持多種啟動(dòng)方式,下圖為s5pv210啟動(dòng)的流程圖:

圖1  s5pv210的啟動(dòng)流程

圖1 s5pv210的啟動(dòng)流程

s5pv210 的啟動(dòng)過(guò)程由BL0,BL1和BL2(BL為Bootloader的簡(jiǎn)稱(chēng))三部分代碼實(shí)現,其中BL0在出廠(chǎng)時(shí)已經(jīng)被固化到64KB的iROM中。 s5pv210上電后首先執行BL0,該段代碼主要負責一些簡(jiǎn)單的初始化工作,如關(guān)看門(mén)狗,初始化ICache等。然后BL0會(huì )根據硬件設置判斷為何種方式啟動(dòng),并將BL1從啟動(dòng)設備(OneNand,Nand Flash,USB,UART,SD card等)拷貝到Internal SRAM的BL1區中。最后BL0會(huì )比較一個(gè)校驗值,如果相等則跳轉到BL1中繼續執行,否則轉入其他啟動(dòng)方式。該校驗值存在BL1的頭部中,其大小為 16字節。

開(kāi)發(fā)人員一般會(huì )單獨編寫(xiě)一個(gè)工具對BL1編譯出的二進(jìn)制文件添加頭部。其校驗值(checksum)的計算方法如下:

...

a = Buf + SPL_HEADER_SIZE;

for(i = 0, checksum = 0; i IMG_SIZE - SPL_HEADER_SIZE; i++) {

checksum += (0x000000FF) *a++;

}

...

BL1的完整結構如下:

BL1的完整結構如下

由于BL1的大小被限制為16K,所以一般情況下BL1負責的工作也不多。BL1在被執行后首先初始化系統時(shí)鐘、內存、串口等。然后將BL2代碼拷貝到 Internal SRAM的BL2區中并跳轉執行。實(shí)際上SRAM的BL2區的大小只有80K,但很多情況下BL2代碼的大小遠遠超過(guò)80K,所以將BL2代碼拷貝到 SRAM中意義不大。更好的做法是直接將BL2拷貝到容量更大的內存中,不過(guò)在拷貝之前一定要先初始化好系統時(shí)鐘和內存。

BL2是整個(gè)Bootloader的主體部分,因此它需要完成更多的初始化工作,例如初始化網(wǎng)卡,Flash等。之后BL2讀取操作系統鏡像到內存中運行。我們一般把操作系統鏡像放到Flash上,也可以放到SD卡上,根據具體的開(kāi)發(fā)平臺而定。

2 軟件平臺

2.1 U-Boot介紹

U-Boot(全稱(chēng)Universal Boot Loader)是Bootloader的一種,其他常見(jiàn)的Bootloader還有RedBoot,vivi等。與之相比,U-Boot具有代碼開(kāi)源,可靠性和擴展性較高等優(yōu)點(diǎn)。另外,對于類(lèi)似于Nand Flash、Nor Flash、網(wǎng)卡、LCD等硬件資源的,U-Boot已經(jīng)抽象出與硬件平臺無(wú)關(guān)的代碼作為設備驅動(dòng)源碼提供給開(kāi)發(fā)者。對于與硬件平臺相關(guān)的代碼,U- Boot將其定義成宏,并保留到配置文件中。開(kāi)發(fā)者往往只需要修改這些宏的值就能成功使用這些硬件資源,這讓我們的移植工作變得十分簡(jiǎn)單。

2.2 U-Boot中幾個(gè)比較重要的源文件

U-Boot的源碼包包含有上千個(gè)源文件,但經(jīng)過(guò)分析之后,可以找出如下幾個(gè)比較重要的源文件(括號中為該源文件所在源碼包的位置)。

(1)start.S(archarmcpuarmv7start.S)

通過(guò)分析U-Boot的鏈接文件可以發(fā)現,start.S是U-Boot上電后被執行的第一個(gè)源文件。該源文件包括定義了異常向量入口,相關(guān)的全局變量,禁用L2緩存,關(guān)閉MMU等,之后跳轉到lowlevel_init()函數中繼續執行。

(2)lowlevel_init.S(boardsamsungsmdkv210lowlevel_init.S)

該源文件同樣用匯編代碼編寫(xiě),其中只定義了一個(gè)函數lowlevel_init()。該函數實(shí)現對平臺硬件資源的一系列初始化過(guò)程,包括關(guān)看門(mén)狗,初始化系統時(shí)鐘,內存和串口。

(3)mem_setup.S(boardsamsungsmdkv210)

該源文件包含對內存進(jìn)行初始化的匯編源碼。

(4)board.c(archarmlibboard.c)

該源文件是用C編寫(xiě)的,主要實(shí)現了U-Boot第二階段啟動(dòng)過(guò)程。包括初始化環(huán)境變量,串口控制臺,Flash和打印調試信息等,最后調用main_loop()函數。

(5)smdkv210.h(includeconfigsSmdkv210.h)

s5pv210平臺的配置文件,該源文件定義了一些與CPU或者外設相關(guān)的參數,這些參數都是用宏來(lái)定義的。

2.3 U-Boot啟動(dòng)的一般流程

2.3.1 第一階段初始化

U-Boot的啟動(dòng)過(guò)程分為兩個(gè)階段,第一個(gè)階段主要由匯編代碼實(shí)現,負責對CPU及底層硬件資源的初始化。第二階段用C實(shí)現,負責使能Flash,網(wǎng)卡和引導操作系統等。其第一階段流程如下圖所示:


上一頁(yè) 1 2 3 4 下一頁(yè)

關(guān)鍵詞: cortext-A8 Bootloader設計 s5pv210

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>