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