exynos4412启动流程

exynos4412启动流程

首先我们来看一下看官方文档提供的exynos4412芯片启动框图

exynos4412启动流程_第1张图片
首先一上电固化在芯片内部(iROM)的BL0就会运行,然后Bl0把启动设备上特定位置处的程序读入片内内存iRAM并执行,这段程序称为BL1,然后BL1将OS拷贝到内存运行。当然OS不一定非得是操作系统,也可以是UBOOT代码。
BL0主要工作流程图:
exynos4412启动流程_第2张图片
BL0对芯片做了一些基本的初始化之后,根据OM模式选择引脚,从外部存储拷贝8K的代码到片内内存执行iRAM,拷贝地址为0x02021400地址运行。为什么是0x02021400呢,根据官方手册《Android_Exynos4412_iROM_Secure_Booting_Guide_Ver.1.00.00.pdf》片内内存布局图可知。
exynos4412启动流程_第3张图片
官方提供的BL1的工作流程图:
exynos4412启动流程_第4张图片
官方提供了BL1的固件 (E4412_N.bl1.bin)。BL1工作是做一些初始化并将BL2拷贝到片内内存运行。
IROM代码已经定死BL1大小只能是8K的代码,BL1可以使用官方提供的,也可以直接写。在官方的描述中(如下英文描述),BL2的大小可以用户定义,但是,如果使用了官方的BL1的话,那也就只能按人家说的做,则BL2只能是(14K-4B),后面四个字节用来做校验。通过mkbl2工具(主要是截取代码和计算校验)来制作。

Internal memory of Exynos4212 has been configured as shown in Figure 3-1. The size of
the secure BL1 is 8192B. In order to execute iROM properly, 5KB should be reserved at 
the start of internal memory. The secure context for BL1 code should be located at 
0x0202_3000 of internal memory. The size of BL2 code can be user defined and depends 
on BL1 code. However, in S.LSI?s reference code of BL1, the valid size of BL2 code 
would be less than 14332B 14KB-4B, 4B is the checksum) and if the size of BL2 code 
is less than 14332B, the rest area up to 14332B should be filled with zeros. The 
signature for BL2 should be located 0x0202_6C00 of internal memory and the checksum 
for BL2 should be at 0x0202_6BFC in S.LSI?s reference code. 

但是如果你不使用官方的BL1的话,也可以自己写,有很多的灵活性。BL2的长度就可以自己定,或者没有BL2,直接将uboot拷贝到内存运行了,只要你的BL1不超过8K并能完成你要做的工作就可以,不一定非要用官方的BL1。
但是使用官方的BL1有很多好处,比如制作BL1加头,加校验,加签名等工作就不要做了。所以一般都会使用官方的BL1。

你可能感兴趣的:(芯片启动流程)