[002-u-boot-Exynos4412] SDK BL2阶段详解

来源:互联网 发布:横新软件怎么样 编辑:程序博客网 时间:2024/06/03 16:47

0. 前言

本文以Exynos4412芯片为例,简要介绍了uboot的相关概念,并择重分析了BL2阶段的软件流程。

1. uboot简介

uboot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目。

它的作用是进行系统引导(相当于BIOS)。它的目标包含以下两个方面:

  1. 支持多种嵌入式操作系统。如:Linux、NetBSD、VxWorks等。
  2. 支持多种嵌入式芯片架构。如:PowerPC、MIPS、x86、ARM等。

2. uboot硬件抽象

从uboot的设计目标中,我们可以得知uboot是一个跨平台、跨设备的引导程序,因此其对于硬件设备的抽象和封装就显得相当的重要。那么uboot是如何能以简介、高效的方式移植于不同的平台呢?它的解决方案是“board->machine->arch->cpu”框架。

  • ARCH:以指令集架构作为区分标准,对应于不同的CPU系列。
  • CPU:对应于IP Core的概念。
  • Machine:对应于SOC。指一些专业应用的场景,芯片厂商会在芯片上集成DSP、RAM、FLASH等外部器件,这些集成了其它功能的芯片被称为SOC。
  • Board: 对应于需要移植的单板。

3. BL2介绍

BL2是执行在iRAM中的代码,负责初始化CPU Core,系统时钟和DRAM控制器等,并负责将uboot的镜像拷贝到内存中。它可以解决iRAM空间较小的问题(iRAM只有256KB),衔接BL1和uboot阶段。

BL2由工具mkbl2生成,参看脚本sd_fusing.sh可知BL2实际上就是由uboot的前14K代码组成。

4. BL2软件流程

  • 橘黄色部分为BL2和uboot阶段共有的代码。
  • 紫色部分为BL2阶段特有的代码。
  • 蓝色部分为uboot阶段特有的代码。

5. 详细流程

u-boot.lds

OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")OUTPUT_ARCH(arm)ENTRY(_start)SECTIONS{ . = 0x00000000; . = ALIGN(4); .text : {  arch/arm/cpu/armv7/start.o (.text)  board/samsung/smdk4212/libsmdk4212.o (.text)  arch/arm/cpu/armv7/exynos/libexynos.o (.text)  *(.text) }
  1. 系统的入口函数为_start。入口函数的具体地址由CONFIG_SYS_TEXT_BASE定义。
  2. uboot镜像的前三个二进制文件依次为start.o -> libsmdk4212.o -> libexynos.o,因此我们如果需要在BL2中增加新功能,应该放到这三个二进制文件中。

start

lowlevel_init

Memory map

原创粉丝点击