一、U-boot的版本选择
1. 操作系统分层的概念
Windows的bios是集成在主板上,它是一段固化得程序,然后进入内核模式,在内核模式中进行硬件初始化,API初始化;紧接着进入用户模式,最后进入应用模式。
Linux系统下,bootloader要把内核的zImage文件从EMMC中读取到内存中。
2.bootloader种类介绍
Bootloader | 描述 | x86 | ARM | PowerPC |
LILO | Linux磁盘引导程序 | 是 | 否 | 否 |
GRUB | GNU的LILO替代程序 | 是 | 否 | 否 |
ROLO | 从ROM引导Linux而不需要BIOS | 是 | 否 | 否 |
Etherboot | 通过以太网卡启动Linux系统的固件 | 是 | 否 | 否 |
LinuxBIOS | 完全替代BUIS的Linux引导程序 | 是 | 否 | 否 |
BLOB | LART等硬件平台的引导程序 | 否 | 是 | 否 |
U-boot | 通用引导程序 | 是 | 是 | 是 |
RedBoot | 基于eCos的引导程序 | 是 | 是 | 是 |
Loadlin | 从DOS引导Linux | 是 | 否 | 否 |
vivi | 针对三星的ARM来定制,2440上有用到 |
3.底层代码的编写方式
4.u-boot的版本选择
标准:够用即可
下载地址:ftp://ftp.denx.de/pub/u-boot/
exynos4412架构如下图:
cortexA9为ARM公司架构,其他是三星附加的外设架构。cortexa9为arch对应u-boot目录中的arch目录下,外面的外设对应u-boot中的board目录,相当于PC机中的南桥。
目录结构如下:
board目录下:
- goni开发板:第三方制作的开发板,非三星的开发板,型号为Exynos 3110(SPPC110,S5PV210),CPU为Cortex-A8单核
- universal_c210:型号为exynos4210(S5PC210,S5PV310),Cortex-A9双核
- origen:针对A9双核
- smdk5250:Cortex-A15双核
- trats:Cortex-A15双核
二、exynos4412 u-boot
exynos 4412 SCP 有64KB的iROM和256KB的SRAM(iRAM)作为内部存储。我们可以使用nandflash、SD/MMC卡、eMMC和USB设备作为启动设备。
iROM:这段地址空间对应exynos 4412内部固化的一段程序,exynos4412启动的第一条指令就存放在这里。它主要用来初始化基本的系统功能,比如时钟。
iRAM:这段地址空间对应的是exynos 4412内部的一个存储器,这段存储器的特点是上电就可以用,不用初始化。
BL1:First boot loader,存储在扩展存储器上,由三星提供的二进制代码,不开源,BL1需要iROM中的代码去校验。
BL2:Second boot loader, 存储在扩展存储器上,不由三星提供,开源,对应OS。
OM(拨码开关):操作模式管脚,是由iROM控制的
2.exynos 4412的启动
(1)iROM代码
- iROM中的代码会关掉看门狗,中断和内存管理单元(MMU),关掉D-cache,使能I-cache。
- 若是设备直接从休眠状态唤醒,则直接进入BL1或是去其他地方,不执行u-boot(需要设置休眠标志位,Direct-Go flag)。即跳过U-BOOT,直接去运行系统。
- verify BL1:校验BL1
- Decrypt BL1:BL1加密
- OM拨码开关在iROM中起作用。Get Bootmode(OM)。OM的启动图如下所示:
电路图如下:
- 控制启动设备的主要是OM1-OM5引脚,OM0和OM6被直接拉到低电平。OM的引脚高低电平对应OM的启动模式。
- OM引脚未拨动到开关的右边(SW-4)时,都未低电平,此时对应的OM位为 0b 00000 查OM表格可以知道为保留位,不执行任何启动
- XOM2拨动到右边时候,电路导通,VDD1V8_EXT拉高XOM1上的电平,此时为0b00010,为SMMMC_CH2启动。
3.U-boot分析
Uboot引导程序分为BL1、BL2、U-boot、TZSW。如下图所示:
U-boot的镜像是由BL1、BL2、U-boot.bin和TZSW组成的。其中各部分大小如上图。
U-boot的启动流程如下:
- iROM从启动设备中加载BL1的镜像到内部256KB的SRAM中。启动设备是通过操作模式管脚(OM)选择的。根据安全启动的键值,IROM将对BL1的镜像做一个完整的校验。
- BL1初始化系统时钟,DRAM控制器。在初始化DRAM控制器后,它从启动设备中加载OS镜像到DRAM中。根据安全启动键值,BL1对系统镜像做一个完整的校验。
- 在启动完成后,BL1跳到操作系统。
- 启动步骤:
- 上电后,exynos4412会先启动片内的iROM中的程序,此步骤做两件事情:(1)初始化提供执行ARM代码的系统基本环境;(2)从启动设备(SD/MMC, eMMC4.3, eMMC4.4和NAND)中加载BL1的程序到片内RAM(SRAM)中。
- u-boot的SPL镜像分为两部分,一部分为ubootspl.bin(16K),另一部分仍然为u-boot.bin(210K左右),BL1的代码(ubootspl.bin)已经加载到iRAM当中,然后配置DDR内存(DRAM),再把210K的u-boot.bin加载到SDRAM内存当中,接着BL1直接跳转到SDRAM的u-boot.bin当中开始运行。