Exynos 4412的启动过程分析

一、Exynos 4412 启动过程

做实验时我们是把bin文件烧入SD 卡。是谁把这些指令从SD卡读出来执行?是固化在芯片内部ROM上
的代码──它被称为iROM, iROM是厂家事先烧写在芯片上的,无源码。

iROM把启动设备上特定位置处的程序读入片内内存(iRAM),并执行它。这个程序被称为BL1(Bootloader
1), BL1是三星公司提供的,无源码。

BL1又把启动设备上另一个特定位置处的程序读入片内内存,并执行它。这个程序被称为BL2(Bootloader
2),是我们编写的源码。

iROM、 BL1更细致的启动过程如下:
(1) iROM: 下图是iROM启动流程图。

125544_TPqb_2888084.png

简单地说,就是先设置程序运行环境(比如关看门狗、关中断、关 MMU、设置栈、启动 PLL 等等);然后
根据OM引脚确定启动设备(NAND Flash/SD 卡/其他),把BL1从里面读出存入iRAM;最后启动BL1。

(2) BL1:下图是BL1的启动过程。
125705_XnF0_2888084.png

简单地说,也是设置程序运行环境(初始化中断、设置栈等等);然后从启动设备上把BL2读入iRAM;最
后启动它。
有几个问题需要解决:

  1. 在启动设备上哪个位置存放 BL1、BL2?
  2. 把 BL1、BL2 读到 iRAM 那个位置?
  3. BL1、BL2 大小是?
  4. 怎么保证 BL1、BL2 程序的完整性(即读出程序时没有错误)?

假设启动设备为SD卡, 如下图图所示:
125917_Cc6H_2888084.png

图: BL1/BL2在SD卡上的存储位置

130034_uQ59_2888084.png

图: BL1/BL2在iRAM中的存储位置
BL1位于SD卡偏移地址512字节处, iROM从这个位置读入8K字节的数据,存在iRAM地址0x02021400位置处。 所以BL1不能大于8K。
BL2位于SD卡偏移地址(512+8K)字节处,BL1从这个位置读入14K字节的数据,存在iRAM地址0x02023400处。 BL2不能大于(14K – 4)字节,最后4字节用于存放较验码。
如果我们的程序大于(14K – 4)字节,那么需要截取前面(14K – 4)字节用来制作BL2并烧入SD卡偏移
地址16K字节处。当BL2启动后,由它来将存放在SD卡另外位置的、完整的程序读入内存。
对于其他启动设备,可以参《Android_Exynos4412_iROM_Secure_Booting_Guide_Ver.1.00.00.pdf》。
板子一上电,首先执行iROM, iROM依次尝试从第1个SD 卡、 NAND Flash、第2个SD 卡、 SPI Nor Flash上把程序读入内存中,一旦从某个设备上成功读出程序就会去启动它。
在前面的实验过程中,我们都是通过sd_fusing.sh这个脚本文件,一键烧写程序到SD卡中。我们解读该脚本程序,发现其核心命令就3条:

dd iflag=dsync oflag=dsync if=/work/tiny4412/sd_fuse/tiny4412/E4412_N.bl1.bin of=$1 seek=$signed_bl1_position
dd iflag=dsync oflag=dsync if=./bl2.bin of=$1 seek=$bl2_position
sync
  1. 第 1 行的命令用于将 E4412_N.bl1.bin 烧写到 SD 卡的第 1 个扇区(扇区从 0 编号);
  2. 第 2 行的命令用于将 bl2.bin 烧写到 SD 卡的第 17 个扇区;
  3. 第 3 行的命令用于将内存缓冲区内的数据写入磁盘。

E4412_N.bl1.bin(BL1)是由三星原厂提供,没有源码, 它的作用在前面稍有介绍;

bl2.bin 是通过mkbl2工具处理源文件得到,具体实现如下:

./mkbl2 leds_on.bin bl2.bin 14336

mkbl2 是 用 来 生 成 bl2.bin 的 工 具 , 通 过 编 译 V310-EVT1-mkbl2.c 文 件 ( 源 程 序 位 于
/work/4412/hardware/mktools 目录下)得到,具体如下:

gcc -o mkbl2 V310-EVT1-mkbl2.c

通过解读 V310-EVT1-mkbl2.c 源码,我们可以知道,它主要做了这些工作:

  1. 从源文件中读取14K的数据到Buf当中;
  2. 处理Buf中前14332字节的数据,得到4字节的checksum;
  3. 组装Buf中前14332字节的数据和4字节的checksum;得到一个新的14K的Buf数据;
  4. 将 3)中构建的Buf数据写到bl2.bin文件中;

转载于:https://my.oschina.net/cht2000/blog/1622230

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值