1. S5PV210存儲配置:
+內置64KB NorFlash(上電不需要初始化)(叫IROM 內部外存):用于存儲預先設置的BL0;
+ SoC內置96KB SRAM(上電不需要初始化)(叫IRAM) : 用于加載,存儲,運行BL1;
+外接的大容量NandFlash (硬盤,上電需要初始化) --如SD卡,iNand等,用于存儲uboot
+ 外接大容量DRAM(動態內存,上電需要初始化) :被BL1初始化,并通過BL2將OS從NandFlash讀取到DRAM中;
2.S5PV210內置:
一塊內置的64KB大小的NorFlash(內部外存,不需要初始 化,上電可以直接使用)(叫IROM)
一塊96KB大小的SRAM(靜態內存,不需要初始化)(叫IRAM)。
3. 210的啟動過程大致是:
第一步:CPU上電后先從內部IROM(內置的64KB大小的NorFlash)中讀取預先設置的代碼(BL0),執行;
————>首先做了一些基本的初始化(CPU時鐘、關看門狗...)(這一段IROM代碼是三星出廠前設置的,三星也不知道我們板子上將來接的是什么樣的DRAM,因此這一段IROM是不能負責初始化外接的DRAM的,因此這一段代碼只能初始化SoC內部的東西);
————>然后這一段代碼會判斷我們選擇的啟動模式(我們通過硬件跳線可以更改板子的啟動模式);
————>然后從相應的外部存儲器去讀取第一部分啟動代碼(BL1,大小為16KB)到內部SRAM(IRAM)中。
第二步:從IRAM(SRAM)去運行剛上一步讀取來的BL1(16KB),然后執行。
BL1負責初始化和DRAM相關的部分時鐘、初始化DRAM、從SD等存儲介質上講BL2讀取到DRAM中;
第三步:從(DRAM )運行BL2;
BL2就是指傳統意義上的bootloader,也就是我們這里的uboot的主體,負責flash操作、uboot命令操作等等,并且最終目標是啟動內核。
思路:因為啟動代碼的大小是不定的,有些公司可能96kb就夠了,有些公司可能1MB都不夠。所以剛才說的2步的啟動方式不合適。三星的解決方案是:把啟動代碼分為2半(BL1和BL2),這兩部分協同工作來完成啟動。
http://blog.csdn.net/ooonebook/article/details/52916202
4. 再來分析uboot的SD卡啟動細節
(1) uboot編譯好之后有200多KB,超出了16KB。uboot的組織方式就是前面16KB為BL1,剩下的部分為BL2.
(2) uboot在燒錄到SD卡時是這樣的:
先截取uboot.bin的前16KB(實際腳本截取的是8KB)燒錄到SD卡的 block1~bolck32;然后將整個uboot燒錄到SD卡的某個扇區中(譬如49扇區)
(3) 實際uboot從SD卡啟動時是這樣的:
iROM先執行,根據OMpin判斷出啟動設備是SD卡,然后從SD卡的block1開始讀取16KB(8KB)到SRAM中執行BL1,BL1執行時負責初始化DDR,并且從SD卡的49扇區開始復制整個uboot到DDR中指定位置(0x23E00000)去備用;然后BL1繼續執行直到ldr pc, =main時BL1跳轉到DDR上的BL2中接著執行uboot的第二階段。
總結:uboot中的這種啟動方式比上節講的分散加載的好處在于:能夠兼容各種啟動方式。
上一篇:S5PV210之內外存學習
下一篇:linux內核移植到S5pv210
- 熱門資源推薦
- 熱門放大器推薦
設計資源 培訓 開發板 精華推薦
- 迅為IMX6開發板Android應用-AndroidStudio-calculator測試
- 玩轉 ESP32 + Arduino (二十) SIM800L上傳數據到OneNet(新版Mqtts)
- 玩轉 ESP32 + Arduino (二十一) SPIFFS文件系統 (已棄用)
- 玩轉 ESP32 + Arduino (二十二) SIM800L上傳數據到阿里IOT(溫濕度和LBS)(NTP對時)
- 玩轉 ESP32 + Arduino (二十三) 多文件系統及全局變量
- 玩轉 ESP32 + Arduino (二十四) SD卡讀寫
- 玩轉 ESP32 + Arduino (二十五) SSD1306庫驅動OLED
- 玩轉 ESP32 + Arduino(二十六) 按鍵控制庫 OneButton
- 玩轉 ESP32 + Arduino(二十七) ESP對象