在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于cortex-A8的Bootloader設(shè)計(jì)

            基于cortex-A8的Bootloader設(shè)計(jì)

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

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

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

            1 硬件平臺

            1.1 簡介

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

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

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

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

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

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

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

            ...

            a = Buf + SPL_HEADER_SIZE;

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

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

            }

            ...

            BL1的完整結(jié)構(gòu)如下:

            BL1的完整結(jié)構(gòu)如下

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

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

            2 軟件平臺

            2.1 U-Boot介紹

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

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

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

            (1)start.S(archarmcpuarmv7start.S)

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

            (2)lowlevel_init.S(boardsamsungsmdkv210lowlevel_init.S)

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

            (3)mem_setup.S(boardsamsungsmdkv210)

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

            (4)board.c(archarmlibboard.c)

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

            (5)smdkv210.h(includeconfigsSmdkv210.h)

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

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

            2.3.1 第一階段初始化

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


            上一頁 1 2 3 4 下一頁

            評論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉