讯为4412开发板嵌入式学习(九)uboot启动过程
文章目录
关于如何boot启动文档名为SEC_Solution Training doc_uboot mr structure.pdf
下一篇:讯为4412开发板嵌入式学习(十)uboot源代码结构
下下篇:讯为4412开发板嵌入式学习(十一)Makefile代码分析
一、根据拨码开关OM选择启动(booting)设备
(一)、启动模式选择部分原理图
图一、启动模式选择部分原理图
图中N.M. 表示的是不上件,即断开的意思。
从图一可以看出,如果无其他电路连接,XOM0=1,XOM1=XOM2=XOM4=0,XOM3=XOM5=1,XOM6=0。
(二)、拨码开关部分原理图
图二 拨码开关部分原理图
从图二可以看出XOM3和COM5是连在一起的,即XOM3=COM5。
(三)、拨码开关和启动设备对应的关系图
图三 拨码开关和启动设备对应的关系图
从图三可以看出,如果想要用SD卡做启动设备(SDMMC_CH2),则需要将拨码开关设置成b’00010,即只有XOM2=1,其他设为0。
二、4412uboot启动流程
硬件结构和启动流程概览图
uboot镜像(uboot image)=BL1(及签名共15KB,二进制文件)+BL2(及签名共16KB)+U-boot.bin(328KB)+TZSW(trust zone用户定义区域,小于156KB)
BL1
BL2=BL2.bin+all00_padding.bin
u-boot.bin
TZSW
uboot镜像
(一)、iROM启动流程图
iROM启动步骤如下:
- 关闭看门狗(watchdog)。
- 关闭中断和MMU(memory management unit,内存管理单元)。
- 关闭高速缓冲存储器(cache)。
- 使能指令缓存器(I-cache)。
- 使核心1待机。
- 判断是否处于Deep-Stop或AFTR状态,是的话就执行BL1,否则进入下一步。
- 初始化IRQ状态和SVC状态下的堆栈。
- 初始化零初始化数据区ZI(Zero initialize data)和可读可写数据区RW(Read Write data)。
- 注册函数指针(用作回调callback)。
- 获取复位后的状态寄存器值。
- 设置时钟分频器和锁相环。
- 通过拨码开关状态(OM[4:0])确定启动下载方式(由于4412可以通过移动设备TF卡下载程序,故不需要jtag)。
- 通过选择的设备进行booting初始化。
- 下载成功的话(根据执行重启还是休眠状态,这里讲重启后的操作步骤)检查下载的数据的校验和是否正确,然后验证BL1是否正确,进而加密BL1并(在iRAM中)运行BL1。如果上述某个环节出错则初始化iROM失败。
附上ARM状态(32位指令)和Thumb状态(16位指令,另外还有新版的Thumb-2状态,它兼容了16位和32位指令,实现更高的性能)下的工作模式:
(二)、BL1启动流程图
BL1是由三星提供的二进制文件,故不开源(无源码)。
BL1启动步骤如下:
- 启动,判断是否处于Deep-Stop/AFTR状态,是的话则直接执行BL2,否则执行下一步。
- 从启动设备读取BL2镜像。
- 判断睡眠是否被唤醒,是的话直接执行BL2,否则进入下一步。
- 判断是否安全的启动,正确的话执行下一步,否则直接执行BL2。
- 判断电子签名是否合法,正确的话执行BL2,否则错误并进入死循环。
(三)、BL2启动流程图
BL2启动步骤如下:
- 启动,判断是否处于Deep-Stop/AFTR状态,是的话则直接跳转到DRAM运行固件/操作系统,否则执行下一步。
- 设置时钟源。
- 初始化DRAM(Dynamic Ramdom Access Memory,动态随机存取存储器)。
- 判断睡眠是否被唤醒,是的话则直接跳转到DRAM运行固件/操作系统,否则进入下一步。
- 从启动设备读取固件F/W或OS镜像(system.img)。
- 判断是否安全的启动,正确的话执行下一步,否则直接跳转到DRAM运行固件/操作系统。
- 判断电子签名是否合法,正确的话跳转到DRAM运行固件/操作系统,否则错误并进入死循环。
至此启动完成并开始执行程序。
makefile下$^,[email protected],$?定义使用详解