Uboot功能

Uboot功能

Uboot(Universal bootloader)就是一个裸机程序,用于启动内核。不过相较于单片机程序更加复杂

相关知识补充

  1. Uboot:Universal bootloader
  2. XIPCPU可以直接发出地址信号读取Flash/RAM,执行指令(可以看成直接在Flash/RAM中运行);此类Flash/RAM称为XIP设备
    XIP:有时程序从SD卡启动,CPU无法直接读取SD卡,需要通过emmc控制器访问SD卡。则SD卡为非XIP设备

启动过程

  1. 运行Uboot,目的是启动内核:读Flash,将内核代码拷贝到RAM
    带来了一个问题,一般单片机的RAM使用的是SRAM,比较小,无需初始化即可使用。而嵌入式Linux的内存一般比较大,使用DDR。那么就需要初始化内存。
    Uboot的工作

    1. 初始化内存
    2. 初始化其他硬件:初始化时钟,然后是Flash
    3. 将内核拷贝到RAM
    4. 启动内核
  2. 启动内核:目的是为了启动应用程序
    内核的工作:

    1. R/W硬件驱动,比如Flash(U盘,网络,LCD,输入输出设备)驱动程序
    2. R/W文件,文件系统
    3. 找到启动APP
  3. 为了适配所有设备,防止引入许多冗余的配置文件,在Uboot中引入设备树。文件目录中有一个dtb文件夹
    Uboot = Uboot.bin + 某个dtb文件

支持非XIP设备启动(SD卡启动,串口启动)的过程

由于CPU无法直接从SD卡(非XIP设备)读到程序(指令),但是当前又需要CPUSD卡启动程序。出现了矛盾,因此引入了BRom(BootRom)-CPU可以直接访问。
完整启动过程:

  1. CPU读BootRom,运行BootRom代码
  2. BootRom工作:Copy:将SD卡上的Uboot拷贝到RAM运行

总结

Uboot启动流程

XIP设备

CPU直接访问Flash,读取Uboot代码并执行(相当于直接再FLASH上运行):初始化内存,初始化硬件,将Flash上的内核代码拷贝到RAM。启动内核

非XIP设备

  1. 首先CPU执行BootRom代码,将SD卡(非XIP)上的Uboot拷贝到RAM
  2. 执行Uboot代码:初始化硬件(不再初始化内存,程序本身就在RAM中),将Flash上的内核代码拷贝到RAM。启动内核
posted @ 2024-03-20 21:41  wow-  阅读(29)  评论(0编辑  收藏  举报