1、Tiny4412启动时首先运行固化在芯片内部iROM中的程序,把启动设备(可能是EMMC/nand flash、SD、USB启动)特定位置处的程序读入片内存 (iRAM) ,并执行它,BL1又把启动设备上另一个特定位置处的程序读入片内内存,并执行它。这个被称为 BL2(Bootloader 2) ,是我们编写的源码。(详情可参考博文“Exynos4412的启动过程分析”)在汇编流水灯程序中我们通过mkbl2工具制作的BL2:
sudo ./sd_fusing.sh /dev/sdc ../../../hardware/1th_led_s/led.bin
分析sd_fusing.sh可知:
####################################
# check files
SOURCE_FILE=$2
MKBL2=./my_mkbl2
# make bl2
#使用my_mkbl2工具来处理传入的bin,从而生成bl2.bin
${MKBL2} ${SOURCE_FILE} bl2.bin 14336
####################################
# fusing images
signed_bl1_position=1 #bl1的镜像烧写到sd卡的第1个扇区
bl2_position=17 #bl2的镜像烧写到sd卡的第17个扇区
# BL1 fusing
echo "---------------------------------------"
echo "BL1 fusing"
# 烧写bl1到SD卡512字节处
dd iflag=dsync oflag=dsync if=/work/4412/tools/E4412_N.bl1.bin of=$1 seek=$signed_bl1_position
# BL2 fusing
echo "---------------------------------------"
echo "BL2 fusing"
# 烧写bl2到SD卡(512+8K)字节处, 512+8K=17x512,即第17个block
dd iflag=dsync oflag=dsync if=./bl2.bin of=$1 seek=$bl2_position
# flush to disk
# 同步文件
sync
rm bl2.bin
####################################
# Message Display
echo "---------------------------------------"
echo "source file image is fused successfully."
echo "Eject SD card and insert it to Exynos 4412 board again."
故Tiny4412是把裸板固件放在SD卡BL2地址处运行。
2、Tiny210(S5PV210)上电将iROM(interal ROM)处执行固化的启动代码,它对系统时钟进行初始化,对启动设备进行判断,并从启动设备中复制BL1(最大16KB)到iRAM(0xd002_0000处,其中0xd002_0010之前的16个字节存储的的BL1的校验信息和BL1尺寸)中,并对BL1进行校验,检验OK转入BL1进行执行;BL1执行完成后,开始执行BL2,BL2加载内核,把OS在SDRAM中运行起来。
S5PV210用SD/MMC启动时:
在这种模式下,BL0会跳过SD的block0,从SD的block1加载,先加载block1到0xD002_0000,通过header中的size判断需要读取多少block,然后再加载剩余的block。 最后计算除header外的数据的校验和,和header中的校验和比较,一旦匹配,则跳转到0xD002_0010。 因此,当我们选择这种方式的时候,需要给BL1的镜像加上16B的header,然后以block1位置开始存放整个镜像。
而在烧写裸板时要先把编译出来的裸板固件经过mktiny210spl.exe工具(是u-boot生成的,可以参考博文:“自己写mktiny210spl工具生成bin文件”制作一个)重新生成一个新的bin文件,而该bin文件只比旧的bin文件多出四行信息(共16字节不能够是真正的代码,而应该是头部信息),对上述内容解析:
---------------------------------------------
0x0地址:BL1 size
---------------------------------------------
0x4地址:必须设置为0 (是规定)
---------------------------------------------
0x8地址:CheckSum
---------------------------------------------
0xc地址:必须设置为0 (是规定)
---------------------------------------------
进一步解析:
BL1 size:就是用于告诉IROM中的代码,需要从外部存储器中(SD,Nand等)拷贝多大的数据到IRAM中,最多16K;
CheckSum:用作校验,当IROM将数据往IRAM拷贝完以后,会自动生成一个“校验数据”,然后会让该“校验数据”和CheckSum进行比较。
根据:“SD卡烧写210裸板、uboot”
先用mktiny210spl.exe工具生成可用的.bin文件,再用下面方法烧写:
下载sd-wy.bin文件到SD卡,PC上执行:
dd iflag=dsync oflag=dsync if=sd-wy.bin of=/dev/sdb seek=1
下载sd-wy.bin文件到SD卡,dd命令用于对SD进行烧写,根据三星手册《S5PV210_iROM_ApplicationNote_Preliminary_20091126》,将sd-wy.bin烧写到SD卡的第1个Block,保留第0个block不用,每个block=512B。
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』