写在前面
本文主要对U-Boot介绍进行介绍,并讲述了U-Boot和FSBL之间的关系。
U-Boot介绍
U-Boot的作用
U-boot全称是Universal Boot Loader,是一个通用的启动、引导程序。他的主要作用是启动引导Linux内核或者其他内核。支持多种操作系统,如NetBSD,Vxworks,QNX,RTEMS,ARTOS,Lynxos,android;同时支持多种硬件平台处理器,如arc,m68k,microblaze,mips,nds32,nios2。
它在完成启动内核之前,他的镜像文件通常存储在开发板的SD卡或者QSPI的这些外部存储设备中,在使用时一定要将内核镜像文件拷贝到DDR内存当中,所以U-boot需要将内核镜像文件从SD卡或者外存中读取出来,并且拷贝到DDR中,所以在U-Boot程序中包含了SD卡或者QSPI等设备的驱动程序。同时还需要DDR的驱动程序,因为在拷贝到DDR之前将DDR进行初始化。
U-Boot的本质
U-Boot的本质是一个开源的裸机程序,这个裸机程序程序比较复杂,这个跟他的功能有关系,支持功能比较多。
U-Boot的功能
包含了SD卡或者QSPI等设备的驱动程序,还包含其他的总线协议的驱动程序,除此之外还包含文件系统和网络相关的协议等部分。
U-Boot的分类
主要分为以下几类,一类是U-Boot官方提供的U-Boot源码,一类是Soc厂商提供的U-Boot源码,还有开发板厂商进行移植的Soc厂商提供的U-Boot源码。
U-Boot和FSBL之间的关系
U-Boot的作用主要是用于启动Linux内核,FSBL是开发板在开机上电之后运行的第一段代码,作用就是去启动u-boot (在嵌入式1inux系统,ZYNQ平台)
如果想启动开发板进行逻辑程序应用开发,我们要先制作一个启动文件Boot.BIN这个启动文件一般包括fsbl +用户裸机程序+ bit。
那么在静态情况下,BOOT . BIN是存放在QSPI或者SD卡里边的系统启动之后,FSBL代码会第一一个运行,它的作用是去引导、启动用户裸机程序。首先要将用户裸机程序从BOOT.BIN这个组合文件将读取出来并且存放到DDR内存,再起启动用户的裸机程序。
fsbl代码需要能够满足以下几个条件:
- fsbl代码有SD卡或者QSPI设备的驱动程序。
- fsbl代码要能够初始化DDR芯片。
在嵌入式Linux系统当中,对于zynq平台来说,BOOT. BIN结构如下:
BOOT.BIN = fsbl + u-boot + bitstream