[002-u-boot-Exynos4412] SDK BL2阶段详解
来源:互联网 发布:横新软件怎么样 编辑:程序博客网 时间:2024/06/03 16:47
0. 前言
本文以Exynos4412芯片为例,简要介绍了uboot的相关概念,并择重分析了BL2阶段的软件流程。
1. uboot简介
uboot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目。
它的作用是进行系统引导(相当于BIOS)。它的目标包含以下两个方面:
- 支持多种嵌入式操作系统。如:Linux、NetBSD、VxWorks等。
- 支持多种嵌入式芯片架构。如: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) }
- 系统的入口函数为_start。入口函数的具体地址由CONFIG_SYS_TEXT_BASE定义。
- uboot镜像的前三个二进制文件依次为start.o -> libsmdk4212.o -> libexynos.o,因此我们如果需要在BL2中增加新功能,应该放到这三个二进制文件中。
start
lowlevel_init
Memory map
阅读全文
1 0
- [002-u-boot-Exynos4412] SDK BL2阶段详解
- [003-u-boot-Exynos4412] 移植SPL阶段
- [001-u-boot-Exynos4412] make smdk4412_config 命令详解
- [000-u-boot-Exynos4412] RP4412 IROM Booting
- [004-u-boot-Exynos4412] Clock Management Unit
- bootloader详解----u-boot启动的2个阶段
- U-boot初始化阶段流程分析
- U-Boot移植各阶段概览
- x210v3开发板u-boot-2012.10移植之九---运行阵地转移,赶紧把BL2扔到内存
- u-boot常用命令详解
- U-boot启动详解
- u-boot参数详解
- U-Boot命令详解
- u-boot命令详解
- U-Boot命令详解
- U-Boot命令详解
- U-boot命令详解
- U-boot启动详解
- 【唯一分解定理】Sphenic numbers Gym
- MySQL Show命令的用法大全
- C#基础-007 swith-case的用法
- Python3 大型网络爬虫实战 001 --- 搭建开发环境
- Mtbatis传入Date格式异常 Error querying database.
- [002-u-boot-Exynos4412] SDK BL2阶段详解
- poj 1094
- 机器学习笔记——集成学习
- OpenGL
- ruby to_json "\xE6" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError)
- flume
- ArcGIS api for javascript+jquery实现简单的图层控制切换
- Ubuntu下安装MySQL
- python实现-取近似值