概述
CPU(中央处理单元),主要包括两部分:控制器 和 运算器。CPU正常的运行起来需要从存储单元中读取指令,然后解码执行。
S5PV210 的CPU是arm Cortex-A8,32bit 总线,最大可以访问 2^32 (4G)内存地址访问空间。
存储设备分为 内存(RAM)和 外部存储器(FLASH);其中 内存RAM 分为 SRAM和DRAM,flash 分为 Norflash 和 NandFlash。
其中,SRAM和 Norflash 容量小,价格贵,上电后可以CPU可以总线读取信息。DRAM和 NandFlash 容量大,价格便宜,上电后需要CPU初始化,然后通过时序接口读取。
基于价格考虑(及芯片半导体工艺发展):嵌入式操作系统的的通用存储配置
外接大容量的 NandFlash + 外接大容量的 DRAM + Soc内置的SRAM + Soc内置的 ROM(这个含有出厂代码,代码不可更改,启动最开始执行的代码)。
启动过程分析
启动过程见下图:
设备上电
加载 BL0,
加载BL1,
加载BL2
上电启动完成,下面详细介绍每一步作用
BL0 代码介绍和作用
第一步,CPU加载 Soc 内置的Irom内的代码(BL0),
BL0 内的代码是,芯片出厂时,就芯片原厂固化好的代码,无法更改。
注意: Irom(internal ROM SOC内置ROM),ROM是 只读存储器,一旦写入代码就固定下来。
BL0 做一些 SoC相关初始化(关看门狗,设置Soc时钟等 其他初始化),然后,根据启动方式选择,跳到对应的存储设备地址,读取uboot的第一部分启动代码Bl1(16K)到Iram,校验读取数据时是否出错。然后,cpu跳到Iram中读取指令,执行BL1相关指令代码
BL0 代码的主要功能
关看门狗
初始化指令cache
初始化栈
初始化堆
初始化块设备复制函数device copy function
设置SoC时钟系统
复制BL1到内部IRAM(16KB)
检查BL1的校验和
跳转到BL1去执行
说明:
初始化指令cache 后就可以 解释 和执行汇编指令了。
初始化 堆和栈后,就可以执行 C语言了。
根据截图中OM = irom boot 跳去到相应的存储区域读取uboot的BL1的指令
boot(uboot) 分成 BL1 和 BL2 的原因是:基于成本考虑,Soc的Iarm不能无限大,通用为96K,而boot编译后的镜像有时大于96K,因此,考虑拆分成Bl1 和 Bl2.
BL1 介绍和主要功能
CPU跳转到 IRAM中,读取执行BL1相关代码。将剩余的boot代码BL2 拷贝到IRAM,校验 BL2的和,跳转到BL2 执行。
BL2 介绍和主要功能
初始化 DRAM相关内容,将OS读取到DRAM里面,从DRAM中启动OS
上电过程结束