<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è) > 嵌入式系統 > 設計應用 > BLOB啟動(dòng)流程與Bootloader程序可移植性研究

BLOB啟動(dòng)流程與Bootloader程序可移植性研究

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

在嵌入式系統應用中,通過(guò)引導()可以初始化硬件設備、建立內存空間的映射圖、加載內核,從而將系統的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終調用操作系統內核準備好正確的環(huán)境[1]。依賴(lài)于實(shí)際的硬件和應用環(huán)境,對于不同的硬件架構以及相同架構的不同電路板,都需要不同的。由于單獨開(kāi)發(fā)Bootloader的工作量較大,因此開(kāi)發(fā)人員一般針對固定體系構架開(kāi)發(fā)一種可性的Bootloader,使之能夠在少量修改后應用于同一體系構架的其他電路板。就是一種針對ARM體系定制的可性良好的嵌入式Linux引導。支持多種CPU,包括SA1100、SA1110、PXA255、PXA270等,用戶(hù)可以根據目標板的特性進(jìn)行定制。它能實(shí)現以下功能:
  (1)引導嵌入式Linux,它可以把Linux、Kernel等從Flash加載到RAM中執行;

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

  (2)命令行下在線(xiàn)更新、Kernel和ramdisk;

  (3)命令行下可以直接對物理尋址空間進(jìn)行查看和修改。

  可見(jiàn)BLOB除了引導系統這個(gè)基本功能外,還具備板級支持包(BSP)開(kāi)發(fā)的功能。

  1 分析

  系統的通常有兩種方式,一種是可以直接Flash ,另一種是可以將壓縮的內存映像文件從Flash中復制、解壓到RAM,再從RAM啟動(dòng)。系統上電時(shí),BLOB采用后者,啟動(dòng)過(guò)程分兩個(gè)階段進(jìn)行,其中第一階段在Flash中運行,第二階段在RAM中運行。圖1為BLOB啟動(dòng)圖。

  

BLOB啟動(dòng)流程圖

  1.1 第一階段

  第一階段為從系統上電后在0x00000000 地址開(kāi)始執行的部分。這部分代碼運行在Flash中,其目的是為第二階段(stage 2)的執行以及隨后的Kernel的執行準備好基本的硬件環(huán)境[2]。

  (1)屏蔽所有的中斷

  為中斷提供服務(wù)通常是OS設備驅動(dòng)的責任,因此在Bootloader的執行全過(guò)程中不必響應任何中斷。中斷屏蔽可以通過(guò)寫(xiě)CPU的中斷屏蔽寄存器或狀態(tài)寄存器(如ARM的CPSR寄存器)來(lái)完成。

  (2)設置CPU的速度和時(shí)鐘頻率

  (3)RAM初始化

  包括正確地設置系統內存控制器的功能寄存器以及各內存庫控制寄存器等。

  (4)LED初始化

  通過(guò)GPIO來(lái)驅動(dòng)LED,其目的是表明系統的狀態(tài)是否正常。如果板子上沒(méi)有LED,則可以通過(guò)初始化UART向串口打印 Bootloader的Logo字符信息來(lái)完成。

  1.2 第二階段

  第二階段是C語(yǔ)言執行代碼,具體說(shuō)明如下。

  (1)UART設置及初始化

  至少初始化一個(gè)串口,以便與終端用戶(hù)進(jìn)行 I/O 輸出信息,初始化計時(shí)器等。設備初始化完成后,可以輸出一些打印信息、程序名字字符串、版本號等。

  (2)設置系統的內存映射

  內存映射是指在整個(gè)物理地址空間中有哪些地址被分配用來(lái)尋址系統的RAM單元。具體的嵌入式系統往往只把CPU預留的全部RAM地址空間中的一部分映射到RAM單元上,而讓剩下的部分預留RAM地址空間處于未使用狀態(tài)。因此Bootloader的 stage 2必須在使用它之前檢測整個(gè)系統的內存映射情況。在用上述算法檢測完系統的內存映射情況后,BLOB將內存映射的詳細信息打印到串口。

  (3)加載內核映像和根文件系統映像

  在規劃內存占用的布局時(shí),應包括兩個(gè)方面:內核映像所占用的內存范圍;根文件系統所占用的內存范圍。在規劃內存占用布局時(shí),主要考慮基地址和映像的大小兩個(gè)方面。

  對于內核映像,一般將其拷貝到從(MEM_START+0x8000)這個(gè)基地址開(kāi)始的大約1MB大小的內存范圍內(嵌入式Linux的內核一般都不超過(guò)1MB)。

  而對于根文件系統映像,則一般將其拷貝到 MEM_START+0x0010,0000開(kāi)始的地方。如果用Ramdisk作為根文件系統映像,則其解壓后的大小一般是1MB。

  (4)設置Linux內核的啟動(dòng)參數。

  (5)可以選擇直接調用內核或者進(jìn)入下載模式。

  在下載模式下,BLOB將通過(guò)串口從主機(Host)下載文件,例如下載內核映像和根文件系統映像等。


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

評論


相關(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>