新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > BLOB啟動流程與Bootloader程序可移植性研究

BLOB啟動流程與Bootloader程序可移植性研究

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

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

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

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

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

  可見BLOB除了引導(dǎo)系統(tǒng)這個基本功能外,還具備板級支持包(BSP)開發(fā)的功能。

  1 分析

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

  

BLOB啟動流程圖

  1.1 第一階段

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

  (1)屏蔽所有的中斷

  為中斷提供服務(wù)通常是OS設(shè)備驅(qū)動的責(zé)任,因此在Bootloader的執(zhí)行全過程中不必響應(yīng)任何中斷。中斷屏蔽可以通過寫CPU的中斷屏蔽寄存器或狀態(tài)寄存器(如ARM的CPSR寄存器)來完成。

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

  (3)RAM初始化

  包括正確地設(shè)置系統(tǒng)內(nèi)存控制器的功能寄存器以及各內(nèi)存庫控制寄存器等。

  (4)LED初始化

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

  1.2 第二階段

  第二階段是C語言執(zhí)行代碼,具體說明如下。

  (1)UART設(shè)置及初始化

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

  (2)設(shè)置系統(tǒng)的內(nèi)存映射

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

  (3)加載內(nèi)核映像和根文件系統(tǒng)映像

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

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

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

  (4)設(shè)置Linux內(nèi)核的啟動參數(shù)。

  (5)可以選擇直接調(diào)用內(nèi)核或者進入下載模式。

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


上一頁 1 2 3 下一頁

評論


相關(guān)推薦

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

關(guān)閉