转载请申明出处:http://blog.chinaunix.net/uid-30256248-id-5205495.html
S5PV210的地址空间分配如下图:
上图三星官方推荐的引导OS的流程图,这仅仅是个参考,但是实际我们并不是按照这幅图来引导OS的。我们实际是按照U-boot的启动方式来引导OS的,下面我们就来分析U-boot引导OS的方式:
一.系统上电复位时,CPU会自动到0x00000000去取指令运行,而硬件会把高地址的IROM&IRAM这块区域映射到0x00000000处,这样CPU会首先到IROM中执行指令,而IROM里面是什么呢?
根据官方的文档里的说明可知,IROM中的代码被称为BL0(其实就是一个代号),而BL0是芯片公司在出厂前就已经烧写进IROM的一段代码,我们程序员不能更改的(其实我们也不需要更改),所以它的作用已经给定好了:
1. Disable the Watch-Dog Timer
2. Initialize the instruction cache
3. Initialize the stack region (see “memory map” on chap 2.5)
4. Initialize the heap region. (see “memory map” on chap 2.5)
5. Initialize the Block Device Copy Function. (see “Device Copy Function” on chap 2.7)
6. Initialize the PLL and Set system clock. (see “clock configuration” on chap 2.11)
7. Copy the BL1 to the internal SRAM region (see “Device Copy Function” on chap 2.7)
8. Verify the checksum of BL1.
If checksum fails, iROM will try the second boot up. (SD/MMC channel 2)
9. Check if it is secure-boot mode or not.
If the security key value is written in S5PV210, It’s secure-boot mode.
If it is secure-boot mode, verify the integrity of BL1.
10. Jump to the start address of BL1
翻译成中文就是:
1.关看门狗
2.初始化指令cache
3.初始化栈区域
4.初始化堆区域
5.初始化块设备复制函数
6.初始化PLL和设置系统时钟
7.复制BL1(是OM引脚指定的启动介质中的BL1)到IRAM中
8.检验BL1的校验和,如果校验失败,IROM会尝试第二次启动(这里的第二次启动是通过SD/MMC通道二进行启动)
9.检查是否为安全启动模式。如果安全密钥被写入S5PV210中,就是安全启动模式。如果是安全启动,就要检查BL1的完整性。
10.如果一切检查都顺利通过就跳至BL1的地址继续执行BL1的代码。
其中数据手册上有这么一句话:BL1 max. size is 16KB
BL1的大小最大为16K,所以可以推断BL0复制的BL1大小为16K
从上面可以清楚知道BL0的作用,简单来说就是关看门狗,初始化堆栈,复制BL1到IRAM中,然后如果校验BL1通过的话,就跳至BL1中继续执行。
至此IROM到此结束,下面到IRAM的BL1了。
二.在16K的BL1代码中,即是U-boot的前16K代码,它的作用是:
1.关闭指令cache和数据cache
2.关闭MMU
3.设置栈
4.初始化DDR
5.初始化OM引脚的指定的启动介质
6.复制启动介质中的BL2(是指在代码重定向后在内存中执行的uboot的完整代码)到DDR中
7.跳至DDR中的BL2中继续执行
三.在BL2代码中,它的作用是:
初始化其它外设,加载OS内核
所以U-boot的启动方式图解如下图所示:
总结启动流程:
S5PV210上电复位CPU到iROM处执行固化的启动代码,它对系统时钟进行初始化,对启动设备进行判断,并从启动设备中复制BL1(最大16KB)到iRAM(0xd002_0000处,其中0xd002_0010之前的16个字节存储的BL1的校验信息和BL1尺寸)中,并对BL1进行校验,检验OK转入BL1进行执行;BL1执行完成后,开始执行BL2,BL2加载内核,把OS在SDRAM中运行起来。
阅读(1987) | 评论(0) | 转发(0) |