TINY4412从sd卡启动过程分析

来源:互联网 发布:python for嵌套循环 编辑:程序博客网 时间:2024/04/21 00:35

从4412的数据手册,我们能够了解到,tiny4412启动过程是分下面几步的:


总结起来就是,4412上电,然后就从iROM处执行代码,iROM要做的任务就是①:将BL1从sd卡或者其他的存储设备中下载到芯片内部256KB的SRAM中,然后跳转到芯片内部SRAM中执行BL1,②:检查BL1的完整性. 而后BL1初始化系统时钟以及DRAM等,初始化完毕后,从sd卡或者其他存储设备中拷贝操作系统到DRAM中,并跳转到DRAM中运行.

相信这些东西,大家从数据手册上也是能了解到,但是数据手册并没有告诉我们实际的操作,下面介绍我用的分析以及操作:

首先需要阅读Android_Exynos4412_iROM_Secure_Booting_Guide_Ver.1.00.00.pdf 这分文档,里面有完整的说明各个阶段需要完成的任务,这个在之后自己写操作系统是要用到的,


这里面说到,iROM将会从启动设备中拷贝8KB的数据,启动设备的前512B是需要空出来的,不能使用的,而sd卡的一个block是512B.所以BL1的这8kB数据是放在block1-block16中,而BL1是由三星公司提供的,是没有源码的.BL1完成本阶段的任务后就将放在block17到block48的内容拷贝出来,然后执行,要是我们想通过uboot启动开发板,只需要将uboot烧写到这个位置就行.


下面讲解一下我的烧写方法:

首先将友善提供的uboot编译好,在uboot的源码文件夹下面会有一个sd_fush的文件夹,进入到这个文件夹,里面有一个tiny4412文件夹以及三个文本文件,通过查看Makefile,我们可以知道,执行make的话,能够生成两个文件,一个是mkbl2,这个文件是用来生成bl2文件的.另一个是sd_fdisk,这个文件用来烧写sd卡用的,必须生成这两个文件才能完成uboot的烧写.,然后进入到tiny4412文件夹里面.我们主要关注的是sd_fusing.sh 这个文件,通过查看代码(下图)可以知道, 正如我上面说的那样,通过linux系统自带的dd指令,将bl1文件烧写到指定的位置,而bl2.bin就是通过mkbl2这个程序将u-boot.bin制作成BL2,所以,如果想通过sd卡启动,只需要将sd卡插入电脑中,然后通过这个文件夹下面的sd_fusing.sh这个文本就能够成功烧写了,sd_fusing.sh需要接受一个参数,那就是sd卡的设备号,下面是我举得一个例子,注意需要使用root权限

#sudo ./sd_fusing.sh /dev/sdc


0 0