S3C6410的Bootloader的两个阶段BL1和BL2编译相关学习
********************************LoongEmbedded********************************
作者:LoongEmbedded(kandi)
時間:2011.7.20
類別:WINCE bootloader開發
********************************LoongEmbedded********************************
?
備注:此開發支持IROM啟動方式,包括支持SD和NAND Flash這兩種啟動介質的啟動,在學習中主要是針對NAND Flash的啟動方式來展開學習的。
?
本文基于Real6410開發板來學習的,此開發板把我們通常的stepldr分成nbl1和nbl2這兩部分,這里的nbl我的理解是nboot的boot bootloader,而1是stepldr的第一階段,2表示第二階段,下面就來學習如何編譯生成nbl1和nbl2的內容,以及它們的bib和makefile.inc的學習。
?
1.????? nbl1
1.1?? nbl1的bib文件
圖1
下面就來學習這兩部分的內容:
1)????? NBL1的RAMIMAGE這一項的內容
首先因為我們是采用IROM的啟動方式,在SMDK6410的SMDK6410.bat中對此環境變量定義如下:
set BSP_IROMBOOT=1
?
從圖1可知NBL1????? 0C000000? 00002000? RAMIMAGE
我們知道RAMIMAGE指定這塊內存用于加載NBL1的鏡像,在系統上電后,NBL1的鏡像會被IROM的boot code拷貝到這塊區域上面運行。那為什這塊區域的起始地址是0x0C000000?大小是0x00002000(8KB)呢?因為我們采用的是IROM啟動方式,啟動介質是NAND Flash,見下圖:
圖2
圖2是在啟動的時候設備操作模式的選擇
圖3
圖3是設備的內存映射圖,開發板是用Xm0CSn2作為NAND Flash的片選引號的,這種情況下,Stepping Stone映射到0x020000000~0x27FFFFFF這塊區域,圖3中的內部存儲區的internal RAM部分,此區域的范圍是0x0C000000~0x0BFFFFFF(64MB),但實際上可用的internal RAM部分只有8KB,這8KB的RAM也稱為Stepping? Stone。
?
由此可知0x0C000000是NBL1鏡像被IROM的boot code加載到Stepping? Stone中的地址,也就是Stepping? Stone的起始地址。8KB的大小限制是S3C6410的Stepping? Stone只有8KB。
?
2)????? 生成NBL1.nbx的配置
nb0文件就是可執行映像的原始Flash映像,它不包括頭,一般情況下將鏡像下載到設備的RAM中運行都采用nb0格式,nb0文件的尺寸比bin大,但是可以直接運行,要生產nb0文件,就需要在NBL1.bib中加入下面的內容
ROMSTART = 0C000000
ROMWIDTH = 32
ROMSIZE = 00001000
ROMSTART:表示NBL1的nbx文件在內存(這里是Stepping? Stone)中的起始地址。
ROMWIDTH:指數據總線的寬度。
ROMSIZE:NBL1的nbx文件的大小,這里是0x00001000(4KB),在上面不是指定了NBL1.bin文件大小最大值可以是0x000020000(8KB)嗎?這里為什么指定的是4KB呢?我們結合IROM啟動方式的流程圖來理解:
圖4
根據圖4可知,BL1(這里就是NBL1)這個bootloader的大小不能大于8KB,這是強制要求的,可見下圖
圖5
根據上面的描述我們可以理解了為什么ROMSIZE要求大小是4KB了。可因為實際生成的nbl1.bin(6KB)的大小大于4KB,這樣就會生成nbl1.nb0、nbl1.nb1、nbl1.nb2和nbl1.nb3,不知道為什么會生成4個?見下圖:
圖6
我試著用比較工具比較了這4個nbx文件,雖然是亂碼,但比較可知nbl1.nb0和nbl1.nb1內容一樣,nbl1.nb2、nbl1.nb3內容依次減少,而且不一樣。
\WINCE600\PUBLIC\COMMON\OAK\MISC
?
1.2?? NBL1的makefile.inc文件
內容如下:
圖7
1)????? Romimage工具打包生成nbl1.bin
Romimage.exe是WINCE用于創建.bin(binary image)文件,此工具只接受一個bib文件作為輸入參數,Romimage會根據此bib中的內容來為要生成的bin文件來分配物理內存地址。
?
2)????? Copy命令的應用
/y:不使用確認是否要改寫現有目標文件的提示。
/b:表示一個二進制文件。
上面的意思是把$(_PLATFORMROOT)\$(_TGTPLAT)\target\$(_TGTCPU)\$(WINCEDEBUG)目錄下的nbl1.nb1文件復制到此目錄下,并且命名為nbl1.nb0,這也就是為什么用比較工具比較nbl1.nb1和nbl1.nb0內容是一樣的原因。但不是很清楚為什么要這樣做?
?
3)????? Copy指定的文件到指定的目錄
復制$(_PLATFORMROOT)\$(_TGTPLAT)\target\$(_TGTCPU)\$(WINCEDEBUG)下的nbl.*文件到$(_FLATRELEASEDIR)目錄下,這時候要復制的文件見下圖:
圖8
這樣我們就可以在release目錄下看到這些文件了。
1.3?? ?
?
2.????? nbl2
結合圖4,我們知道BL1(nbl1)會裝載BL2(nbl2)到SDRAM中執行,而本設計中SDRAM空間對應于圖3的范圍為0x50000000~0x5FFFFFFF的地址空間,這也就是nbl2鏡像文件在SDRAM的轉載地址,這樣我們就可以較好理解下面的內容了。
2.1?? nbl2.bib文件
圖9
2.2?? nbl2的makefile.inc文件
2.3?? ?
3.????? ?
?
總結
以上是生活随笔為你收集整理的S3C6410的Bootloader的两个阶段BL1和BL2编译相关学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WINCE6.0深入理解TOC
- 下一篇: S3C6410设备时钟源选择、启动方式选