ATF史上最全分析--bl1阶段

news/2024/5/19 6:16:56 标签: atf, bl1, bl2, bl31, bl33

一、bl1是什么?

        bootloader 1简称bl1,通常bl1就是存放在bootrom中的代码,CPU上电解复位后,会从0地址(具体启动地址,要看每个cpu自己的特性,一般是从0地址启动)取指令运行,所以一般bootrom的地址就是从0地址开始分布,将bl1放在bootrom中,并通过ld文件制定代码入口地址,就可以运行bl1的代码了。

二、bl1的主要作用

        bl1是存放在rom中的代码,rom空间都比较小,通常64K或128K,因此对bl1镜像文件就存在大小限制。但bl1要实现加载bl2的作用,因此下述这些功能是必须的:

        1. 初始化CPU相关;

        2. 初始化基本外设(串口输出、存储设备读写。。。);

        3. 从flash上读取bl2至ram;

        4. 设置上下文,跳转至bl2入口;

三、代码分析

1. bl1入口

ENTRY(bl1_entrypoint)

        从bl1的链接文件(bl1.ls.S)中可以知道bl1的代码入口是bl1_entrypoint,bl1_entrypoint定义在bl1_entrypoint.S中。

func bl1_entrypoint
/* ---------------------------------------------------------------------
* If the reset address is programmable then bl1_entrypoint() is
* executed only on the cold boot path. Therefore, we can skip the warm
* boot mailbox mechanism.
* ---------------------------------------------------------------------
*/
	el3_entrypoint_common					\
		_init_sctlr=1					\
		_warm_boot_mailbox=!PROGRAMMABLE_RESET_ADDRESS	\
		_secondary_cold_boot=!COLD_BOOT_SINGLE_CPU	\
		_init_memory=1					\
		_init_c_runtime=1				\
		_exception_vectors=bl1_vector_table		\
		_pie_fixup_size=0

	/* -----------------------------------------------------
	 * Perform BL1 setup
	 * -----------------------------------------------------
	 */
	bl	bl1_setup

	/* -----------------------------------------------------
	 * Jump to main function.
	 * -----------------------------------------------------
	 */
	bl	bl1_main

	/* -----------------------------------------------------
	 * Jump to next image.
	 * -----------------------------------------------------
	 */

	/*
	 * Get the smc_context for next BL image,
	 * program the gp/system registers and save it in `r4`.
	 */
	bl	smc_get_next_ctx
	mov	r4, r0

	/* Only turn-off MMU if going to secure world */
	ldr	r5, [r4, #SMC_CTX_SCR]
	tst	r5, #SCR_NS_BIT
	bne	skip_mmu_off

	/*
	 * MMU needs to be disabled because both BL1 and BL2/BL2U execute
	 * in PL1, and therefore share the same address space.
	 * BL2/BL2U will initialize the address space according to its
	 * own requirement.
	 */
	bl	disable_mmu_icache_secure
	stcopr	r0, TLBIALL
	dsb	sy
	isb

skip_mmu_off:
	/* Restore smc_context from `r4` and exit secure monitor mode. */
	mov	r0, r4
	monitor_exit
endfunc bl1_entrypoint

        bl1_entrypoint->bl1_setup->bl1_main

        对上述代码主要流程整理,就可以得到简化的流程,从简化流程也可以看出,bl1_setup负责对bl1阶段需要用到的环境进行设置,包括对时钟、基本外设的配置;而bl1_main主要实现下一阶段文件的加载,以及如何跳到下一阶段代码去执行的流程。从这点来看,代码逻辑还是比较清晰的。

        由于ATF支持的平台较多,相同的函数在很多文件中都有定义,因此需要选择一个平台来分析代码,其他平台的代码基本上都大同小异。这里我们以海思的hikey平台为例进行代码分析。

 

完整的代码框架图可在以下地址进行下载:

ATF_BL1.xmind-Linux文档类资源-CSDN下载


http://www.niftyadmin.cn/n/1491988.html

相关文章

ATF史上最全分析--概貌

一. 什么是ATF? 二. ATF加载流程? 三

java test的用法,Java的testcase用法

简单来说,就是测试开发,部署以及代码结构如下图所示:Disk.javapackage com.test.vo;public interface Disk {public void read();public void write(String m);}UDisk.javapackage com.test.vo;public class UDisk implements Disk {Override…

java微信公众号图文消息编辑器,如何使用微信公众号自带的编辑器做出简洁舒适的图文排版...

所谓云想衣裳花想容,写文章也讲内容与形式,做微信公众号、新媒体、自媒体,光生产内容还不够,编辑排版也非常重要。一个简洁、美观、使读者看起来舒适的排版能更好地抓住读者的眼球,愉悦读者的眼睛,才能更好…

简述什么是操作系统

操作系统 用于管理和控制计算机硬件和软件的计算机程序,是直接运行在裸机上的最 基本的系统软件,其他软件必须要在操作系统上才能运行。 功能: 管理计算机的硬件,软件和数据资源,控制程序运行 例如:在pc端安装QQ就需…

Liunx的前世今生(什么是分时操作系统)

Unix的前身 1965 年左右由贝尔实验室加入了麻省理工学院以及通用电气合作的计划,该 计划要建立一套多使用者、多任务、多层次的 MULTICS 操作系统,想让大型主机 支持 300 台终端1969 年前后这个项目进度缓慢,资金短缺,贝尔实验室…

什么是Linux及其优点(什么是GNU 计划)

什么是Linux Linux 是由芬兰人李纳斯托瓦兹和众多爱好者共同开发出来一套免费使用和自由 传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX的多用户、多任务、支持多 线程和多 CPU 的操作系统。Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 …

Hadoop生态圈

Hadoop生态圈 Linux: 操作系统 Hadoop: 解决海量数据的分布式存储,分布式计算 Hbase 大数据的数据库,列式存储的数据(可存储TB,EB以上的数据) Hive: 数据仓库 scala: 函数式编程&am…

Linux 怎么安装增强

Linux 安装增强 选择【虚拟机】–>【安装 VMware Tools】–>加载 VMware Tools 的镜像 完成后 复制【VMwareTools-10.0.10-4301679.tar.gz】至桌面 Desktop 鼠标右键 解压【VMwareTools-10.0.10-4301679.tar.gz】 $>tar -zxvf VMwareTools-10.0.10-4301679.tar.gz …