OMAP開發板的啓動過程

OMAP的啓動過程

參考文檔:http://www.omappedia.org/wiki/Bootloader_Project#u-boot_overview

OMAP平臺的啓動初始化過程(bootloaders)分爲了幾個不同的階段.下圖指示了啓動的順序爲:ROM代碼,x-loader,u-boot, kernel,每一個階段都完成足夠的配置以加載和執行下一階段。

 

這個引導程序項目特別包含了x-loader和u-boot:代碼簡介,怎樣獲取和編譯這個代碼。

爲什麼需要這兩個bootloaders呢?x-loader是u-boot的一個精簡版,被設計爲可以在OMAP板子上的SRAM上運行,它初始化芯片外的主存和其它一些必要的設備驅動,然後加載較大的引導程序u-boot.

 

1.      OMAP 啓動順序

(1)    OMAP 啓動的詳細順序請參考文檔

http://www.ti.com/general/docs/wtbu/wtbudocumentcenter.tsp?templateId=6123&navigationId=12037

(2)    系統啓動管腳

OMAP內部的ROM代碼能夠試圖從很多不同的外圍存儲設備啓動,包括但不限於:串口(UART3), SD卡,eMMC, NAND, 和USB。從這些設備中搜索一個有效的啓動鏡像(x-loader)的順序是由SYSBOOT寄存器的配置決定的。在TRM中有一個表格列出了啓動設備及其啓動順序的配置情況。

         SYSBOOT的值可以從物理地址:ox480022f0處讀取,可以用JTAG或者用devmem2(後面這種是對於已經在板子上運行了linux系統的情況)

# devmem2 0x480022f0 b                          

/dev/mem opened.

Memory mapped at address 0x40020000.

Value at address 0x480022F0 (0x400202f0): 0x2F

 

2.      啓動第一階段

例如,SYSBOOT可以設置啓動順序爲:1.串口(UART3),2.SD卡(MMC1),3.NAND閃存。

在這種情況下,ROM啓動代碼首先將從串口查找有效的x-loader,然後是SD卡,接着是NAND閃存,無論什麼時間它找着了一個有效的x-loader則開始執行x-loader.

(1)串口啓動

         對於串口啓動來說,串口輸出一個簡單的ID,如果外部主機在一個較短的時間內正確的響應了該ID,那麼ROM啓動代碼將從串口讀取數據並將該數據傳入內部的SARM中,如果沒有發現錯誤的話,控制權將轉移到SDRAM。另外ROM啓動代碼只會試圖從UART3中搜索x-loader。

(2)SD卡啓動

         如果MMC(Multi MediaCard)包含在啓動設備列表中,則ROM啓動代碼會在第一個MMC控制器中查找SD卡,如果找到了一個SD卡,那麼ROM啓動代碼會在分區別中查找第一個FAT32分區,如果找到了該分區則在其根目錄下查一個名爲“MLO”的文件(該文件是x-loader的可執行文件,它的頭部包含了需要加載的文件的內存位置和文件的大小)。如果一些都順利的話,該文件會被傳到SRAM中,並且控制權也將轉移。MMC1和MMC2都能夠被用於啓動。

(3)NAND/eMMC啓動

         如果NAND 包含中啓動列表中,則ROM啓動代碼會加載NAND的第一個分區,如果第一個分區是壞的或者空的,則ROM啓動代碼會試着搜索接下來的三個分區,一旦找着一個好的分區,則ROM啓動代碼會將其中的數據傳入SRAM中,控制構也將轉移過去(e/MMC的啓動與NAND的一樣)。

3.      啓動的第二階段

         x-loader的功能就是將第二階段引導程序(u-boot)加載到主存中. 比較特別的是x-loader和u-boot來自同一個存儲設備(比如SD卡)。當然這並不是必須的。

(1)    串口啓動

         在u-boot也通過串口加載的情況下,x-loader等待主機初始化kermit連接以可靠的傳輸較在的文件到主存中,文件(指的就是u-boot)傳輸完成後,控制權也將轉移。

(2)    SD卡啓動

         在u-boot通過SD卡加載的情況下,x-loader查找第一個MMC控制器的FAT32分區,並在頂級目錄下查找名爲“u-boot.bin”的文件,然後將該文件傳輸到主存並將控制權轉移過去。

(3)    NAND/eMMC啓動

         當u-boot存在NAND的情況下,x-loader期望u-boot存放在第五扇區(偏移地址爲0x00800000).然後傳輸該文件到主存中並轉移控制權。如果是eMMC,則x-loader希望u-boot存放在偏移地址爲0x200處

 

4.      x-loader概述

x-loader是從u-boot精簡出來的很小的第一階段的啓動代碼,它被OMAP ROM啓動代碼加載到內部的靜態RAM中,由於內部靜態RAM很小,x-loader只完成最基本的功能。它配置管腳的功能複用、時鐘、DDR和串口終端,因此它能仿問並加載第二階段的啓動程序(u-boot)到DDR中,下面的圖顯示了x-loader代碼的流程(在start.s文件中)

5.      u-boot概述

u-boot完成x-loader沒有完成的CPU還有開發板子的初始化和配置。u-boot在主CPU(CPU ID 0)上運行,該CPU負責初始化和啓動,同進,從CPU阻塞在“等待事件”狀態,下圖顯示了u-boot的代碼流程(在start.s文件中)

 

如果只想在OMAP開發板上移植一個linux核,可以參考:http://omappedia.org/wiki/OMAP_Ubuntu_Core

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章