uboot啟動過程理解


    對於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啟動過程

image
    和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)一定程度上就不再受大小的限制了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM