linux firmware 框架,学习整理:arm-trusted-firmware
本文以AArch64为准,内容以翻译原文为主。
资源说明
基本介绍
权限模型 (Exception Levels)
基本分为EL3-EL0,从高level转低level通过ERET指令,从低level转高level通过exception方式。
各个级别说明:
Non-secure EL0: Unprivileged applications, such as applications downloaded from an App Store.
Non-secure EL1: Rich OS kernels from, for example, Linux, Microsoft Windows, iOS.
Non-secure EL2: Hypervisors, from vendors such as Citrix, VMWare, or OK-Labs.
Secure EL0: Trusted OS applications.
Secure EL1: Trusted OS kernels from Trusted OS vendors such as Trustonic.
Secure EL3: Secure Monitor, executing secure platform firmware provided by Silicon vendors and OEMs ARM Trusted Firmware
启动过程
基本分为BL1->BL2->(BL31/BL32/BL33)这几个阶段,整体框图如下:
BL1
系统reset vector后在ROM上开始执行,EL3模式,起始执行地址BL1_RO_BASE
BL1的数据段被拷贝到trusted SRAM的顶端,起始地址BL1_RW_BASE
地址定义参见platform_def.h
BL1阶段参考函数bl1_main
架构初始化
判断cold reset还是warm reset,参考函数plat_get_my_entrypoint
cold reset和warm reset走不同代码分支,但至少完成后续这些初始化
建立简单的exception vectors,如下:
0x0 : Synchronous exception from Current EL with SP_EL0
0x1 : IRQ exception from Current EL with SP_EL0
0x2 : FIQ exception from Current EL with SP_EL0
0x3 : System Error exception from Current EL with SP_EL0
0x4 : Synchronous exception from Current EL with SP_ELx
0x5 : IRQ exception from Current EL with SP_ELx
0x6 : FIQ exception from Current EL with SP_ELx
0x7 : System Error exception from Current EL with SP_ELx
0x8 : Synchronous exception from Lower EL using aarch64
0x9 : IRQ exception from Lower EL using aarch64
0xa : FIQ exception from Lower EL using aarch64
0xb : System Error exception from Lower EL using aarch64
0xc : Synchronous exception from Lower EL using aarch32
0xd : IRQ exception from Lower EL using aarch32
0xe : FIQ exception from Lower EL using aarch32
0xf : System Error exception from Lower EL using aarch32
当出现异常时会调用函数plat_report_exception,通过LED反映异常情况:
SYS_LED[0] - Security state (Secure=0/Non-Secure=1)
SYS_LED[2:1] - Exception Level (EL3=0x3, EL2=0x2, EL1=0x1, EL0=0x0)
SYS_LED[7:3] - Exception Class (Sync/Async & origin). This is the value of the status code
CPU初始化,参考函数reset_hardler
配置控制寄存器,SCTLR_EL3、SCR_EL3、CPTR_EL3、DAIF、MDCR_EL3等等
平台初始化
使能Trusted Watchdog
初始化console
配置内联,保证硬件一致
使能MMU,并映射需要访问的memory
配置BL2所在的存储
Firmware升级 (可选)
BL2加载和运行
打印”Booting Trusted Firmware”以表明BL1执行成功
预判并加载BL2到trusted SRAM,预判参考函数bl1_plat_handle_pre_image_load,如果失败则打印”Failed to load BL2 firmware.”
调用函数bl1_plat_handle_post_image_load,传递BL2参数,如memory layout
运行BL2
BL2
在trusted SRAM上执行,EL1模式,起始地址BL2_BASE
架构初始化
为ATF子目标和通用软件正常运行而初始化
清 CPACR.FPEN,使EL1和EL0可以访问Floating Point和Advanced SIMD
平台初始化
初始化console
配置可以加载下一个BL阶段所使用的存储设备
使能MMU,并映射需要访问的memory
配置平台安全设置,使能访问控制组件
保留部分memory,用于传递数据给下一个BL EL3 Runtime Software
定义额外可用的memory,给后面每个BL的加载使用
加载Image
load_scp_bl2,(separate System Control Processor)
load_bl31,EL3 Runtime Software image load,从存储设备加载到trusted SRAM
通过提升SMC将控制回到BL1,将BL31的入口提供给BL1
BL1关闭MMU,并通过清除SCTLR_EL3.M/I/C,冲掉data cache
BL1将控制转给BL31的入口
load_bl32 (optional), Secure-EL1 Payload image load
load_bl33, Non-trusted Firmware image load,从存储设备加载到non-secure memory
BL31
在trusted SRAM上执行,EL3模式,入口地址BL31_BASE
架构初始化
与BL1的架构初始化相近,覆盖BL1的初始化
初始化每个CPU的数据框架,包括各个CPU的cache
替换BL1的exception vector
平台初始化
使normal world software能正常工作
初始化console
配置内联使其硬件一致
使能MMU,并映射需要访问的memory
初始化通用中断控制器
初始化电源控制器设备
检测系统拓扑
Runtime services初始化
EL3 runtime services framework如下:
Standard service calls,如PSCI(Power State Coordination Interface)
Secure-EL1 Payload Dispatcher service
CPU implementation service
BL32 (可选,略过)
BL33
Non-trusted Firmware image
EL3 Runtime Software使用BL2提供的entrypoint信息跳转到BL33,EL2模式
地址布局
DRAM
0xffffffff +----------+
: :
|----------|
|HW_CONFIG |
0x83000000 |----------| (non-secure)
| |
0x80000000 +----------+
Trusted SRAM
0x04040000 +----------+ loaded by BL2 +----------------+
| BL1 (rw) | <<<<<<<<<<<<< | |
|----------| <<<<<<<<<<<<< | BL31 NOBITS |
| BL2 | <<<<<<<<<<<<< | |
|----------| <<<<<<<<<<<<< |----------------|
| | <<<<<<<<<<<<< | BL31 PROGBITS |
| | <<<<<<<<<<<<< |----------------|
| | <<<<<<<<<<<<< | BL32 |
0x04002000 +----------+ +----------------+
|fw_configs|
0x04001000 +----------+
| Shared |
0x04000000 +----------+
Trusted ROM
0x04000000 +----------+
| BL1 (ro) |
0x00000000 +----------+
关于FIP
Firmware Image Package
通常BL1被烧录在ROM中,BL2/BL31/BL32/BL33/uboot被打包成fip.bin烧录在flash中;启动时通过检索UUID找到fip.bin中的各个image,参考firmware_image_package.h
通过函数plat_get_image_source()读取数FIP数据
tools/fiptool/fiptool可以生成和分解fip文件
linux firmware 框架,学习整理:arm-trusted-firmware相关推荐
- ATF(Arm Trusted Firmware)/TF-A Chapter 02 BL1-ROMCode
第二章目录: Chapter 02.TF-A(Arm Trusted Firmware, ATF ) BL1-ROMCode(本文) Chapter 02.TF-A(Arm Trusted Firmw ...
- linux 文件inode,linux文件系统-inode学习整理
linux文件系统-inode学习整理 介绍 linux文件系统可讲的模块有很多,包括文件系统整体架构.文件系统分类.虚拟文件系统以及文件系统存储结构等等,本文主要介绍的是文件系统的存储结构,也就是本 ...
- linux arm 汇编学习,如何在LINUX平台上学习GNU ARM汇编
本例说明如何在LINUX平台上学习GNU ARM汇编. 1.软件环境 vmware 5.0 + redhat 9.0 + skyeye 1.2.4 + arm-elf 工具 2. 源文件 a.s -- ...
- ATF(Arm Trusted Firmware)/TF-A Chapter 01. 介绍
1.TF-A 介绍 TF-A是一套通用的软件架构+特定于平台的实现代码. TF-A满足大多数SoC厂商的CPU设计:单核启动,多核启动,自定义reset vector,可裁剪的启动阶段,bootrom ...
- PHP,mysql,Linux,CI框架学习总结
PHP,mysql,CI框架学习总结 PHP标记 1.Xml风格<?php ?> 2.简短风格 <? ?> 需在php.ini中开启short_open_tag 3.asp风格 ...
- [ATF] ARM Trusted firmware 构建选项
TF-A 构建系统支持以下构建选项.除非另有说明,这些选项应在构建命令行中指定,并且不会在任何组件生成文件中修改.请注意,构建系统不会跟踪构建选项的依赖性.因此,如果任何构建选项从先前的构建中发生更改 ...
- ATF(Arm Trusted Firmware)/TF-A Chapter 04 Authentication Framework
4.1. 代码分析 首先,重新分析之前忽略掉的 TRUSTED_BOARD_BOOT =1 的情况,bl1_platform_setup->arm_bl1_platform_setup-> ...
- 蓝牙整体框架学习整理
从来也没写过技术博客,最近在男票的积极鼓励下,在系统学习蓝牙,写下今天的收获,持续更新中~~~ 1.蓝牙的系统架构,从底到上:如下图: 按照我自己看的文章总结, 上层的大多是Profile 底层的大多 ...
- Flask框架学习整理——从零开始入门Flask
文章目录 Flask框架 一. 简介 二. 概要 三. 知识点(附代码) 1. Flask基础入门 1)路由route的创建: 2)endpoint的作用 3)request对象的使用 4)请求钩子b ...
最新文章
- python使用界面-如何使用Python建立有窗口、按钮之类的图形界面
- WebGIS在行业中应用的演变
- ORACLE将表中的数据恢复到某一个时间点
- 比特(bit)_二进制数
- java.util.Array中的方法
- 计算机专业的学生该选择日后的人生道路?继续从事IT还是考公务员……
- 【毕业设计】JAVA医药管理系统设计(论文+源代码)
- java 反射与封装性的_Java反射的封装
- Unity-粒子特效
- OpenCV之IplImage详解
- itunes计算机丢失,itunes怎么找不到app store了 最新版itunes app store在哪
- 学生宿舍管理系统毕业设计(python)
- 如何配置谷歌浏览器_如何科学地使用Chrome?下载谷歌浏览器?
- 如何用Python制作学术动图?(数据+代码)
- 自动化学报latex模板下载
- 常见花材的固定的方法有哪些_别再傻傻只知道使用花泥了,这4种纯天然花材固定方法你该试试!...
- Uniapp之API promise化
- 常见电子元器件等效电路汇总
- java编程思想 英文版 打卡
- vux踩坑指南 i18n国际化踩坑指南 i18n国际化含demo
热门文章
- 移动APP测试,adb工具,常用的命令(1)
- sketch导出html可以跳转,Sketch导入、导出功能说明及技巧
- 没有一个冬天不可逾越
- 二叉树的创建以及先中后序遍历
- 诺基亚NBU备份文件名片导出程序 vCard助手
- mini计算机结构,通用解决方案:[教程信息]计算机主板ATX / Micro ATX / Mini-ITX的几种结构标准...
- Apache ECharts 官网布局排版错乱的解决办法
- can协议crc计算_CAN总线通信的CRC校验方法
- Android RecyclerView实现类似于老虎机抽奖,数字滚动等动画效果
- 《北京遇上西雅图之不二情书》