This is my study note of Uboot.

u-boot 功能

uboot被称为universal bootlooder,所以是通用的bootloder,uboot是bootloder的一种,不能说bootloder就是uboot,u-boot一般有如下两种方式,一种flash跟CPU封装在一起,另一种flash通过EMMC等控制器拓展到外部。
Alt text1
Alt text1

1
2
3
4
5
6
7
8
9
10
11
以上两种方式中,Flash从低址到高址分别存储Uboot->内核->文件系统,uboot主要的任务是启动内核:
1.即读flash把内核copy进内存
a.如果RAM或DDR的话,内存较小,需要进行初始化操作(如果是SRAM的话,内存较大,不需要进行初始化操作)
b.初始化其他硬件,例如时钟等
c.将flash copy进内核里
2.启动内核

内核的主要任务是:
a.能R/W读写flash,驱动程序
b.能R/W读写文件,文件系统
c.能找到并启动APP

XIP和非XIP

CPU可以直接访问的就是XIP格式,如下:
Alt text1
不可访问到的就是非XIP格式,例如EMMC控制器访问SD卡启动uboot,此时SD卡就是非XIP格式,但是CPU可以直接访问的EMMC控制器为XIP格式,如下:
Alt text1
使用SD卡等非XIP设备启动uboot时,CPU一般都要访问BROM寄存器,通过执行BROM内部的代码将uboot拷贝到内存中。

BROM如何选择启动设备

  • 通过bootpin选择某个设备启动设备
  • 通过bootpin,选择某个顺序(优先级)启动(全志、瑞芯微)
    1
    BROM会初始化DDR寄存器,随后将非XIP设备内部的Uboot整个复制到DDR寄存器中,在每个非XIP设备的uboot前都存有DDR寄存器的参数,DDR寄存器通过这些参数进行初始化配置(强BROM),也有部分BROM是将非XIP设备Uboot内部一段代码放到RAM等中执行,通过这部分代码进行后续的所有操作,并将自身uboot再复制到外部DDR寄存器中(弱BROM)。