这里介绍的是bootloader中的一种u-boot;首先所有的芯片手册,及分析都是基于exynos4412的。
三星exynos4412关于soc的简单图示
在u-boot启动之前,芯片中有一段固定代码由三星公司烧写在IROM中,芯片上电后后通过CPU的OM引脚来判断启动方式(SD/FLISH);再会把SD/FILSH中的代码搬移到SRAM中运行(注意此内存只有256K),所需要做的事就是初始化时钟,初始化DRAM···;之后将其余代码放入DRAM中引导启动uboot等;
这张图是IROM的结构图
BL0/BL1/BL2是irom固件代码,三者之间的关系:BL0将BL1(bootloader的前(8KB--BL1)加载到iRAM;BL1然后在iRAM中运行将BL2(剩下的bootloader)加载到SDRAM;BL2加载内核,把OS在SDRAM中运行起来,最终OS是运行在SDRAM(内存)中的。
其中有个点:
irom物理地址函数指针
IROM中的物理地址会被安排为函数指针,通过对地址的引用会调用相关 的函数功能;SDMMC_ReadBlocks->实现将代码搬移到DstByte的内存地址空间中;
为了加深理解,我们可以自己写一个类bootloader:
实现板子上电后从SD卡中读取启动代码,并点亮我们制定的led灯;