uboot移植理解

2021-08-13 22:54:36 字數 2480 閱讀 2975

對於2440而言,啟動的方式不多。一般就是外界乙個nand flash ,2440內部有個nand flash 

controller,會自動把nand flash的前4k拷貝到2440的片內sram。2440這個片內sram就是所謂的 

stepping stone剛好也是4k。 

在製作啟動**時,就是uboot。一般會把uboot分為兩個部分,一般就會叫做bl1和bl2。 

bl1和bl2兩者相加就是整個uboot。這兩個部分各有分工。 

為了符合2440的特點,bl1的大小會被設定為4k,這4k需要完成的任務有: 

1、配置好記憶體(對於2440來說,記憶體就是sdram)。 

2、配置好記憶體後,將整個uboot搬運到sdram執行。 

此時bl1的使命就完成了,接下來是bl2,他在sdram上執行,將flash上的os也搬運到sdram 

執行。那麼整個boot的過程就完成了。

晶元換代公升級,變成s5pv210,此時啟動的方式不想2440那麼單一了,如sd卡啟動,emmc啟動,usb啟動,等等啟動方式,其次外部的記憶體也不再是sdram這種簡單的記憶體了,而是ddr這種記憶體。所以一開始需要做的準備工作大大增加。 

所以,s5pv210內部多了乙個叫做irom的東西,他的內部固化了一下程式,在上電之後irom會啟動內部的程式,將外部的某些裝置進行簡單的初始化,如sd卡,emmc等。 

內部的sram也從4k公升級到了96k.就是為了滿足更複雜的配置要求。

那麼接下來,來看看三星官方推薦的uboot啟動過程

和2440啟動過程類似,在上電的時候它會自動將外部的固定大小的程式拷貝到片內的sram。 

對於2440來講,這個大小是4k。而對於210來講這個大小是16k。 

假設,我們現在選擇的是sd卡啟動,那麼我們的uboot當然會放到sd卡中。同理為了滿足, 

210的特性,uboot同樣會被分為兩個部分——bl1和bl2;bl1的大小當然就是16k。 

那麼,在上電之後,這個16k會被自動的拷貝到片內的sram,這個過程由晶元內部的 

irom完成(這個過程通常被稱之為bl0)。而此時片內的sram並沒有被填滿,還有80k的容量。 

三星想,這80k的容量也夠bl2放的了。所以,按照三星設想,當bl1被載入到sram之後。 

bl1開始執行,此時bl1的任務只要把bl2也搬運到sram就可以了。然後讓bl2去配置ddr, 

並且將os搬運到ddr執行。 

也就是說,三星給bl1分配的任務是搬運bl2到sram;給bl2分配的任務是配置ddr並且搬運os 

到ddr執行。

但是,在學校uboot的過程中,發現uboot並沒有採用三星推薦的啟動過程。原因是隨著uboot的 

發展,uboot的大小變得很大,遠超過了96k。就是說uboot無法整個都放入片內的sram。那麼讓就 

不能採取三星的方式。 

所以uboot給bl1和bl2重新分配任務:(當然bl1的大小還只能是16k,這是應為irom裡的程式是固定的,它只會將前16k的內容拷貝到sram。) 

uboot將bl1委以重任,不僅需要將ddr配置好,還要將bl2搬運到ddr上執行。 

bl2就只需要將os搬運到ddr執行即可。

那麼,3星推薦的做法,和uboot的做法他們的區別就出來的: 

1、uboot交給bl1的任務要比三星交給bl1的任務要多。他首先需要配置ddr,其次再將 

bl2搬運到ddr執行。而三星交給bl1的任務,僅僅是將bl2搬運到片內的sram執行。 

2、uboot的方式,bl2是在ddr上執行的,而三星的方式bl2是在片內的sram執行的。 

3、uboot的方式,bl2只需搬運os到ddr;三星的方式,bl2需要先配置ddr,在將os搬運到 

ddr。

總結: 

1、sram他在晶元的內部,他可以直接訪問,而無需初始化。而ddr,sdram這種外部 

記憶體是需初始化的,需要我們寫一些配置程式,初始化之後才可以訪問。所以不管是 

2440,還是210,還是intel。都遵循逐步啟動的過程。 

2、對於2440來說,先需要將外部flash的前4k內容載入到sram,然後通過在sram裡執行的** 

去初始化sdram,並搬運主體程式到sdram。 

3、對於210來講也是這樣,會先將外部flash的前16k內容拷貝到sram。 

4、區分bl0 和bl1,bl2。bl0其實是固化在晶元內部的一段程式。而bl1和bl2是組成boot的兩個部分 

bl1的大小是必須根據晶元的特性設計的。對於2440來說你的bl1不應該超過4k,對於210來說bl1不應該超過16k。 

5、我們自己寫boot的時候,也可以參照三星步驟,只要你的bl2不大於80k即可。 

7、ddr或者是sdram會比片內的sram大很多倍,所以只要外部記憶體被初始化好了之後,很多東西(如bl2)一定程度上就不再受大小的限制了。

uboot移植 uboot啟動回顧

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

u boot移植詳解 初識u boot

u boot是一種普遍用於嵌入式系統中的bootloader。bootloader是基於特定硬體平台來實現的,因此幾乎不可能為所有的嵌入式系統建立乙個通用的bootloader,不同的處理器架構都有不同的bootloader,bootloader不但依賴於cpu的體系結構,還依賴於嵌入式系統板級裝置...

uboot移植記錄

首先是uboot移植記錄系列。這系列文章適合於uboot移植的初學者,這裡基於常見的開發平台s3c2410。若需要移植uboot到乙個全新開發板,則需要參考更多的資料並對uboot有更深入的了解。本人對此也有所鑽研,也有個較牛的同事專門做這這個的,呵呵 若感興趣的朋友大家可以一起 因此關於新平台ub...