uboot啟動感悟

2021-05-27 01:50:28 字數 2028 閱讀 1798

arm內部有rom,該rom有**,上面駐留著系統真正啟動的**,和uboot沒有關係。

通過該段**根據不同的啟動模式進行不同的啟動方式:

如果是nand會自動讀取uboot前4k的**到片內sdram執行,該**要完成cpu的初始化和ram初始化(初始化ram為外圍的)等。

——————————————————————————

i.mx51沒有nand但有sd卡,但都是作為儲存裝置!

——————————————————————————

一直困惑自己的是,一直以為uboot的前4k是拷貝到外圍ram執行的,但片外的ram需要前4k去初始化這樣造成了死鎖

拿freescale的imx51為例 片內rom 36k 片內ram128k

imx51啟動機制如下(在實際開發中不會涉及到該內容寫下這些只是讓你更好的了解系統的啟動過程,系統的啟動過程不單單只有uboot這一塊在uboot之前還做了很多的工作):

boot_mode[1:0]

啟動模式型別

啟動模式細節

00內部啟動模式 (通過啟動模式gpio管腳判斷啟動外設)

imx51執行晶元內部的啟動**,可以從以下裝置啟動

01測試模式

10內部啟動模式 (通過啟動模式fuse位判斷啟動外設)

與00模式相同,只是不通過啟動模式gpio管腳來判斷啟動外設,而是通過imx51的內部fuse位,這些fuse位可以一次性寫入。

00l           uart

imx51在系統重啟時,會讀取gpio_bt_sel的內部fuse位:

a)如果gpio_bt_sel=1(被燒寫過),在晶元內部啟動**會通過讀取內部fuse位來判斷外設相關性。

b)如果gpio_bt_sel=0,imx51會在啟動時取樣外設相關特性的gpio管腳,並儲存在sbmr暫存器中。晶元內部啟動**會通過讀取該暫存器判斷外設相關性。所以,晶元內部fuse位與啟動相關gpio管腳是一一對應的。

imx51內部啟動**

imx51內部有一段romcode,在內部啟動模式下,系統啟動時,會執行這段**,這段**會初始化最基本的硬體,然後判斷系統的外部儲存裝置資訊(通過讀取sbmr暫存器)。然後系統會初始化相應的外設,並將外設中的第一部分**拷貝到晶元內部ram中,並跳轉到其頭位址並執行。

通過這種方式,imx51可以支援從多種外設啟動,從而增加啟動靈活性,imx51 romcode流程如下

我們是按照從sd卡

1)   通過取樣sbmr暫存器讀取fuse位或者採用啟動模式的管腳 <——reset

2)通過boot_mode[1:0]來判斷是否是那種啟動模式

為了保持穩定性boot_mode[1:0]=10,內部啟動模式(通過啟動模式fuse位判斷啟動外設),將外部資訊燒寫到晶元內部fuse中,這樣系統將從內部fuse中讀取相關外設資訊。

3)因為是從sd卡啟動所以 boot memo ctrol sd/mmc/movinand?

bt_mem_ctl = 外設介面擴充套件儲存裝置

『00』=sd/mmc hdd

4)配置sd/mmc的控制器 esdhc1 controller

5)basic config and obtain base addr of boot device

基本的配置和獲取啟動硬體的基位址

6)執行映象

講這些的作用:imx51的romcode固化在晶元內部,不能修改,以上分析romcode主要可以幫助大家理解以下幾點:

1)imx51最初是如何啟動的

2)在bootloader開始執行前,系統處於何種狀態,由以上分析可見

a)imx51已經初始化了硬體部分,包括部分時鐘,內部匯流排以及外部儲存裝置的控制器,以及外部儲存裝置本身

b)bootloader的頭2k已經被拷貝到imx51內部的ram了,除開1k的mbr頭,以及flash檔案頭,剩下的部分就是可執行**。由此可知剩下部分已經不能放下整個bootloader了,所以必須把bootloader分成兩個部分:xldr和eboot本身。

c)可以利用dcd段來初始化某些暫存器,例如androidbsp利用它來初始化系統ddr2控制器

uboot啟動感悟

arm內部有rom,該rom有 上面駐留著系統真正啟動的 和uboot沒有關係。通過該段 根據不同的啟動模式進行不同的啟動方式 如果是nand會自動讀取uboot前4k的 到片內sdram執行,該 要完成cpu的初始化和ram初始化 初始化ram為外圍的 等。i.mx51沒有nand但有sd卡,但都...

uboot啟動流程概述 uboot啟動流程

u boot系統啟動流程 大多數bootloader都分為stage1和stage2兩大部分,u boot也不例外。依賴於cpu體系結構的 如裝置初始化 等 通常都放在stage1,且可以用組合語言來實現,而stage2則通常用c語言來實現,這樣可以實現複雜的功能,而且有更好的可讀性和移植性。2.1...

uboot移植 uboot啟動回顧

一 uboot啟動的第一階段start.s 路徑uboot cpu s5pc11x start.s 1 include 標頭檔案包含,config.件原始碼中不存 在,配置後自動生成 路徑 include linux config.h 2 include 標頭檔案包含,version.件原始碼中不存...