1、Booting:一、Exynos 4412 SCP has 64 KB ROM (iROM) and 256 KB SRAM (iRAM) as internal memory.Exynos 4412 拥有 64K 的内部 ROM(IROM)和 256K 的内部 SRAM(IRAM)。Exynos4412 支持四种启动方式:1、 General NAND flash memory2、 SD/MMC memory card3、 eMMC memory4、 USB device二、上电执行过程当系统复位或者上电,程序会从 IROM(0x00000000)运行,引导加载程序。IROM 是芯片厂家事先
2、烧写到芯片上的(固化在内部 ROM 中的) ,自带 bootloader。 (无源码)问:那么 IROM 功能是什么呢?IROM 把启动设备上特定地址的程序读入到片内内存(IRAM) ,然后执行这个程序。(这个程序就叫 BL1,一样由芯片厂商提供)问:那么启动这个芯片厂商的程序后,又会做什么事情?BL1 又从 特定的地址把程序读入片内内存(IRAM) ,并且执行。 (这个程序叫 BL2,由工程师自己编写的源码)那么根据上面的图来总结下 4412 的启动过程:第一步:图上的在内部 64K 的 IROM 运行程序(也就是 0 地址运行程序)功能是把启动设备上特定位置处图上的的程序读入到片内的 IR
3、AM 里面(这种方式叫 BL1,BL1 是三星公司提供的,无源码。 )第二步:IRAM 运行的程序(也就是 BL1 的程序,0x0202 1400 位置开始运行程序) ,这个程序又会将的程序读入片内内存/或者片外内存,并且去执行它。 (这个阶段叫 BL2,程序由编写者提供)猜想:如果 OS 文件大于 256K 那么片内内存空间不够,那么程序应该如何去执行,在 BL1把 OS 文件拷贝到内部内存时候,前面的小于 256K 用于把启动设备中的 OS 文件拷贝到更大的片外内存去运行。 (u-boot 时候就能体现出来)总结上面,可以了解 4412 的启动过程,那么如何让 4412 开发板工作起来?那
4、就有以下几个问题:1、 IROM 做了什么事情?固化在芯片的那个位置?2、 BL1 又做了什么事情?又是如何去存放的?3、 BL2(自己写的程序)是如何构成,又是如何去存放的?接下来先介绍 BL1 和 BL2 文件。那么 BL1 文件从哪里来?答:上面介绍中,BL1 文件由三星公司提供:E4412_N.bl1.bin那么 BL2 文件如何构成:答:BL2.bin 文件获取就比较复杂点:1.从源文件(比如 led.bin)中读取 14K 的数据到 Buf 当中;2.处理 Buf 中前 14332 字节的数据,得到 4 字节的 checksum;3.组装 Buf 中前 14332 字节的数据和 4
5、 字节的 checksum,得到一个新的 14K 的 Buf 数据;4.将第三步中构建的 Buf 数据写到 bl2.bin 文件中如何存放就要去看 4412 的内存是如何排布的。三、对于 IRAM 的起始地址和大小是多少?查看内存映射图:可以看出来 IRAM 是从 0x0202 0000 到 0x0206 0000 大小为 256K从启动流程可以知道 BL1 阶段 IROM 会去设备的某个位置读取数据,那么这个位置是多少?BL1 阶段后又会去设备某个位置读取数据,那么这个位置是多少?问题:程序 应该放在设备的那些特定的位置,才能保证程序能正确被读取和正常运行?下面来看个图来解决上面的问题。从图
6、上看,IRAM 的起始地址 0x0202 0000 到 0x0202 1400 的位置,5K 大小为芯片的产品ID,IROM 的版本,设备的入口函数等。从 0x0202 1400 到 0x0202 3400 的位置,8K 大小为 BL1 的存放大小。从 0x0202 3400 到 0x0202 7400 的位置,16K 大小为 BL2 的存放大小。以 SD 卡为例子:最后总结下:IROM 启动流程:IROM 内部固定程序,会先去运行环境,关看门狗、关中断、关MMU、设置栈、启动 PLL 等,然后根据 OM 引脚从启动设备读取 BL1 程序。BL1 程序启动流程:同样去设置运行环境、初始化中断、设置栈。从启动设备读取 BL2读取程序,执行 BL2 程序。BL2:由裸机开发人员自己决定。 (当然只能干板级支持的事情)