讯为4412开发板嵌入式学习(九)uboot启动过程

文章目录

    • 一、根据拨码开关OM选择启动(booting)设备
      • (一)、启动模式选择部分原理图
      • (二)、拨码开关部分原理图
      • (三)、拨码开关和启动设备对应的关系图
    • 二、4412uboot启动流程
      • (一)、iROM启动流程图
      • (二)、BL1启动流程图
      • (三)、BL2启动流程图

关于如何boot启动文档名为SEC_Solution Training doc_uboot mr structure.pdf

下一篇:讯为4412开发板嵌入式学习(十)uboot源代码结构
下下篇:讯为4412开发板嵌入式学习(十一)Makefile代码分析

一、根据拨码开关OM选择启动(booting)设备

(一)、启动模式选择部分原理图

讯为4412开发板嵌入式学习(九)uboot启动过程_第1张图片

图一、启动模式选择部分原理图

图中N.M. 表示的是不上件,即断开的意思。
从图一可以看出,如果无其他电路连接,XOM0=1,XOM1=XOM2=XOM4=0,XOM3=XOM5=1,XOM6=0。

(二)、拨码开关部分原理图

讯为4412开发板嵌入式学习(九)uboot启动过程_第2张图片

图二 拨码开关部分原理图

从图二可以看出XOM3和COM5是连在一起的,即XOM3=COM5。

(三)、拨码开关和启动设备对应的关系图

讯为4412开发板嵌入式学习(九)uboot启动过程_第3张图片

图三 拨码开关和启动设备对应的关系图

从图三可以看出,如果想要用SD卡做启动设备(SDMMC_CH2),则需要将拨码开关设置成b’00010,即只有XOM2=1,其他设为0。

二、4412uboot启动流程

硬件结构和启动流程概览图

讯为4412开发板嵌入式学习(九)uboot启动过程_第4张图片

uboot镜像(uboot image)=BL1(及签名共15KB,二进制文件)+BL2(及签名共16KB)+U-boot.bin(328KB)+TZSW(trust zone用户定义区域,小于156KB)

讯为4412开发板嵌入式学习(九)uboot启动过程_第5张图片
BL1

在这里插入图片描述

BL2=BL2.bin+all00_padding.bin

在这里插入图片描述
在这里插入图片描述

u-boot.bin

在这里插入图片描述

TZSW

在这里插入图片描述

uboot镜像

在这里插入图片描述

(一)、iROM启动流程图

讯为4412开发板嵌入式学习(九)uboot启动过程_第6张图片

iROM启动步骤如下:

  1. 关闭看门狗(watchdog)。
  2. 关闭中断和MMU(memory management unit,内存管理单元)。
  3. 关闭高速缓冲存储器(cache)。
  4. 使能指令缓存器(I-cache)。
  5. 使核心1待机。
  6. 判断是否处于Deep-Stop或AFTR状态,是的话就执行BL1,否则进入下一步。
  7. 初始化IRQ状态和SVC状态下的堆栈。
  8. 初始化零初始化数据区ZI(Zero initialize data)和可读可写数据区RW(Read Write data)。
  9. 注册函数指针(用作回调callback)。
  10. 获取复位后的状态寄存器值。
  11. 设置时钟分频器和锁相环。
  12. 通过拨码开关状态(OM[4:0])确定启动下载方式(由于4412可以通过移动设备TF卡下载程序,故不需要jtag)。
  13. 通过选择的设备进行booting初始化。
  14. 下载成功的话(根据执行重启还是休眠状态,这里讲重启后的操作步骤)检查下载的数据的校验和是否正确,然后验证BL1是否正确,进而加密BL1并(在iRAM中)运行BL1。如果上述某个环节出错则初始化iROM失败。

附上ARM状态(32位指令)和Thumb状态(16位指令,另外还有新版的Thumb-2状态,它兼容了16位和32位指令,实现更高的性能)下的工作模式:

讯为4412开发板嵌入式学习(九)uboot启动过程_第7张图片

(二)、BL1启动流程图

BL1是由三星提供的二进制文件,故不开源(无源码)。

讯为4412开发板嵌入式学习(九)uboot启动过程_第8张图片

BL1启动步骤如下:

  1. 启动,判断是否处于Deep-Stop/AFTR状态,是的话则直接执行BL2,否则执行下一步。
  2. 从启动设备读取BL2镜像。
  3. 判断睡眠是否被唤醒,是的话直接执行BL2,否则进入下一步。
  4. 判断是否安全的启动,正确的话执行下一步,否则直接执行BL2。
  5. 判断电子签名是否合法,正确的话执行BL2,否则错误并进入死循环。

(三)、BL2启动流程图

讯为4412开发板嵌入式学习(九)uboot启动过程_第9张图片

BL2启动步骤如下:

  1. 启动,判断是否处于Deep-Stop/AFTR状态,是的话则直接跳转到DRAM运行固件/操作系统,否则执行下一步。
  2. 设置时钟源。
  3. 初始化DRAM(Dynamic Ramdom Access Memory,动态随机存取存储器)。
  4. 判断睡眠是否被唤醒,是的话则直接跳转到DRAM运行固件/操作系统,否则进入下一步。
  5. 从启动设备读取固件F/W或OS镜像(system.img)。
  6. 判断是否安全的启动,正确的话执行下一步,否则直接跳转到DRAM运行固件/操作系统。
  7. 判断电子签名是否合法,正确的话跳转到DRAM运行固件/操作系统,否则错误并进入死循环。

至此启动完成并开始执行程序。

参考资料:
ARM 中断状态和SVC状态的堆栈切换 (异常)

ARM官方手册

IRAM IROM 区别

Linux grep 命令

Linux awk 命令

makefile下$^,$@,$?定义使用详解

Linux sed 命令

Shell 传递参数

makefile中的:BUILD_DIR解释

cat <

Tcsh脚本编程

makefile之findstring函数

$(origin variable)详解

uboot笔记之makefile分析

u-boot.lds链接文件详解

x86 Assembly Language Reference Manual

ARM Assembly Language Programming

你可能感兴趣的:(Linux,uboot)