1、Exynos 4412的0地址:
可以看到0x0000_0000 叫做iROM,一共64K。主要功能是根据外部拨码开关选择启动方式。这部分代码是三星固化好的,我们只需要知道怎么拨码选择启动方式。
2、拨码方式:
iROM里的程序就会首先去1st里找程序,如果找不到,然后再去2nd卡里找程序。
iROM执行以后,会到外部找程序,找到以后,要拷贝8K(后面版本可能不一样,有15K等,如下图就是15K)的程序到内部RAM,这8K的程序就是 BL1(bootloader1)。这部分是三星自己写的,就是这个文件E4412_N.bl1.SCP2G.bin。不开源的。uboot在编译完成后,把BL1和自己拼接到了一起。
我们来看看uboot是怎么把BL1和自己拼接在一起的。uboot的编译脚本如下:
if [ -z $1 ]
then
.ild_uboot.sh
else
.ild_uboot.sh $1
fi
实际是执行了另一个脚本:build_uboot.sh
我们打开build_uboot.sh,里面有一句话:(本来是一行的,我拆成7行。方便大家看)
cat
E4412_N.bl1.SCP2G.bin
bl2.bin
all00_padding.bin
u-boot.bin
tzsw_SMDK4412_SCP_2GB.bin
> u-boot-iTOP-4412.bin
这个是什么意思呢?就是把">"前面几个拼接成一个uboot-iTOP-4412.bin。
第一个文件:E4412_N.bl1.SCP2G.bin
这个就是BL1 ,刚才说过的,前8K就是他,三星给的,神秘兮兮的
第二个文件:bl2.bin
这个是BL2,也就是BL1执行后要加载的文件,是Uboot的前14K(后面版本也有其他大小的,如下图就是16K)截取的。
第三个文件: all00_padding.bin
这个完全是为了补齐用的,里面全是0000
第四个:u-boot.bin
这个才是真正的uboot源码编译出来的镜像文件
最后一个文件是:tzsw_SMDK4412_SCP_2GB.bin ,这个是ARM的一项新技术,也就是trustzoon技术,为了系统安全用的,大家可以不管他。
3、最后总结下:
iROM-->BL1--->BL2---->uboot---->zImage---->挂接文件系统
4、补充:
BL1在哪里运行?谁知道?在DDR3运行吗?不,是在IRAM运行。因为这个时候DDR3还没有被初始化,就是说DDR3的控制器还没有初始化。没有办法,只好把BL1放到IRAM中。因为IRAM是可以上电就能使用的。iRAM这个东东造价高,但是好用。总共才256K。所以不能把操作系统装进来,所以要分段去启动。BL2是uboot的一部分,就是uboot的前面一小段程序,也就是前14K,这前14K也是要在IRAM里运行的!也就是说BL1和BL2都是在IRAM里执行的。换句话说BL1并没有初始化DDR3。