【SA8295P 源码分析】03 - SA8295P QNX Host上电开机流程分析

【SA8295P 源码分析】03 - SA8295P QNX Host上电开机流程分析

  • 一、阶段1 固件开机自检 (SM BIST):APPS PBL加载XBL后触发 INT_RESET进行Warm Reset
  • 二、阶段2 固件开机自检 (SM BIST):加载TZ,初始Hypervisor,启动QNX Kernel,加载并启动各子系统



系列文章汇总见:《【SA8295P 源码分析】00 - 系列文章链接汇总》
本文链接:《【SA8295P 源码分析】03 - SA8295P QNX Host 上电开机流程分析》


一、阶段1 固件开机自检 (SM BIST):APPS PBL加载XBL后触发 INT_RESET进行Warm Reset

在这里插入图片描述

  • 1 . 按下开机键,触发复位信号,高通®Kryo™CPU Gold core 0 核 心 CPU0 退出Reset状态,开始执行 APPS PBL
    初始化硬件(定时器、PRNG、时钟等等),启用caches 缓存和MMU,并根据BOOT PIN 配置检测引导设备:
    默认启动设备为:UFS Extern Storage外置存储
    默认启动选项:被EDL cookie覆盖 或 通过USB GPIO强制配置

  • 2a . APPS PBL 从引导设备bootdevice 加载并验证 XBL Loader 镜像(region #1)到 Boot IMEM 中。 (xbl_a分区中的xbl.elf 镜像)

  • 2b . APPS PBL 从引导设备bootdevice 加载并验证 XBL SDI 镜像(region #2)到 OCIMEM中(片上内部存储器 On-Chip Internal Memory

  • 2c . APPS PBL 从引导设备bootdevice 加载 XBL SEC镜像(region #0)到 Boot IMEM 中,(xbl_sec 分区中的 xbl_sec.mbn 镜像)
    XBL SEC 是一个QC签名的ELF代码段,用于锁定xPUs

  • 3 . XBL SEC跳到 XBL并将 CPU 控制 从 Secure EL3 安全等级3环境 切换到 Non-Secure EL1 非安全等级1环境

  • 4a . 在阶段1引导中,XBL执行SMSS MBIST 进行内存自检(Memory BIST)和 SMSS LBIST进行逻辑自检(Logic BIST),
    加载并验证SMSSCSM内存中的SMSS FW 固件,并Reset SMSS 触发SMSS 运行,
    然后APXBL Loader)将 CPU 控制权移交给SMSS(安全管理) (smss_a中的smss.elf镜像),并进入WFI 待机模式 (standby 模式 Wait For Interrupt)。
    此时,SMSS 将分别在APIMEMLLCCSMMUGEMNOC 这些区域上执行BIST 内存自检。

  • 5 . 自检完成后,在没有PMIC的情况下,整个芯片触发 INT_RESET,进行 Warm Reset 操作
    之所以进行 Warm Reset ,是保持供电,以便保持之前初始化过的一些 TCSR寄存器和 SMSS IMEM/registers的状态。


二、阶段2 固件开机自检 (SM BIST):加载TZ,初始Hypervisor,启动QNX Kernel,加载并启动各子系统


在这里插入图片描述

在阶段一中,整个芯片启动 INT_RESET,启动warm reset ,此时,APPS PBL 代码会重新跑一遍。
详细过程如下:

  • 2a . APPS PBL 从引导设备bootdevice 加载并验证 XBL Loader 镜像(region #1)到 Boot IMEM 中。 (xbl_a分区中的xbl.elf 镜像)

  • 2b . APPS PBL 从引导设备bootdevice 加载并验证 XBL SDI 镜像(region #2)到 OCIMEM中(片上内部存储器 On-Chip Internal Memory

  • 2c . APPS PBL 从引导设备bootdevice 加载 XBL SEC镜像(region #0)到 Boot IMEM 中,(secdata 分区中的 sec.dat
    XBL SEC 是一个QC签名的ELF代码段,用于锁定xPUs

  • 3 . XBL SECEL3模式下运行Security Configuration 启动SMSSsmss_a中的smss.elf镜像),然后跳转到 EL1 非安全环境 并运行XBL Loader

  • 4 . XBL Loader CPU控制权移交给 SMSS 并进入WFI 模式。
    SMSS将分别在DPUCameraCamNocNSPEthernet以太网、PCIe上执行BIST
    自检完毕后,将 CPU 控制权交回给 XBL Loader
    接着 XBL Loaders 继续正常的冷启动流程

  • 4b . XBL Loader 加载和校验 XBL Config 镜像到 BOOT IMEM 中 (xbl_config_a分区中的xbl_config.elf 镜像)

  • 4c . XBL Loader 加载Shrm 镜像到 Code RAM 中(shrm_a分区中的 shrm.elf 镜像)

  • 4d . XBL Loader 加载并验证 MISC 镜像到 BOOT IMEM

  • 4e . XBL Loader 从引导设备 boot device 加载并验证 AOP 镜像 到 AOP CodeRAM 中 (aop_a 分区中的 aop.mbn 镜像)

  • 4f . XBL Loader 触发 AOP 实时响应处理器 Reset ,开始 AOP CodeRAM 中跑 AOP代码

  • 4g . XBL Loader 加载并验证 QSEE 镜像到 pIMEM 中(tz_a 分区中的 tz.mbn

  • 4h . XBL Loader 加载并验证 QHEE 镜像(hyp_a 分区中的 mifs_hyp_la.img 镜像,用于 hypervisor 虚拟化)

  • 4i . XBL LoaderXBL 镜像中加载并验证 UEFI Segment 代码段

  • 4j . XBL Loader 从跳转到 XBL_SEC ,由 XBL_SECCPU 交到 QSEE (TrustZone)手中

  • 5 . QSEETZ)将CPU 转交到 QHEEhypervisor),高通Hypervisor 运行在 EL2 模式,QHEE 配置 SMMUs,并提供虚拟化服务

  • 6 . 高通 Hypervisor 执行 XBLcore 代码(位于 region #3 中),它是在 Non-sec EL1 非安全模式下运行的,
    UEFI 外围镜像加载器(UEFI peripheral image loader (PIL))挂载并运行 ABL firmware volume(FV)固件(abl_a中的 abl_fastboot.elf abl.elf),其中包含 FastbootLinux Loader 应用程序

  • 7 . Linux Loader 应用程序(位于abl.elf镜像)通过 verified boot 加载并验证 HLOS Kernel 镜像(对应 boot_a 中的 boot_la.img,它是 QNX Host Kernel 微内核),HLOS Kernel 运行在 Non-Sec EL1 模式下

  • 8 . HLOS PIL driver (QNX) 将所有子系统 Iris FWCamera FWAudio FWSensor FWTuring FWDeep Learning FW 的镜像加载到DDR,并相应的配置时钟和电源。HLOS PIL driver (QNX) 执行对QSEE (TrustZone)SCM 系统调用,以请求一个安全的 PIL driver,用于验证各子系统的镜像,然后 高通 Hypervisor 触发每个子系统进行 Reset 启动


注意,此时只是 QNX Host 启动起来了,运行在 EL1 环境中,IVI Android Guest 还没启动呢,GVM 是运行在 EL0 中的





本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/82777.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

22年电赛B题——具有自动泊车功能的电动车——做题记录以及经验分享

前言 这道题目也是小车类电赛题目,十月份的电赛题,由于之前积累了一些经验,这道题目在做下来的感觉还行,但是我们看题目没有仔细审题,和题目要求有一些些偏差,但是基础大功能还是做出来辽,大家还是可以参考…

LeetCode283.移动零

这道题还是很简单的,我用的是双指针,左指针i从头开始遍历数组,右指针j是从i后面第一个数开始遍历,当左指针i等于0的时候,右指针j去寻找i右边第一个为0的数和i交换位置,交换完了就break内层循环,…

Linux网络编程:网络基础

文章目录: 一:协议 二:网络应用设计模式_BS模式和CS模式 三:网络分层模型(OSI七层 TCP/IP四层) 四:通信过程 五:协议格式 1.数据包封装 2.以太网帧格式和ARP数据报格式 …

【SA8295P 源码分析】06 - SA8295P XBL Loader 阶段 sbl1_main_ctl 函数代码分析

【SA8295P 源码分析】06 - SA8295P XBL Loader 阶段 sbl1_main_ctl 函数代码分析 一、XBL Loader 汇编源码分析1.1 解析 boot\QcomPkg\XBLLoader\XBLLoader.inf1.2 boot\QcomPkg\XBLDevPrg\ModuleEntryPoint.S:跳转 sbl1_entry 函数1.3 XBLLoaderLib\sbl1_Aarch64.s…

Communication Channels

沟通渠道 n * (n - 1) / 2 你1 相关方3 4 4 * 3 / 2 6 你1 相关方3 相关方1 5 5 * 4 / 2 10 人越多,沟通渠道越多,沟通成本理论越高

Roxy-Wi 命令执行漏洞复现

漏洞描述 Roxy-WI是开源的一款用于管理 Haproxy、Nginx 和 Keepalived 服务器的 Web 界面 Roxy-WI 6.1.1.0 之前的版本存在安全漏洞,该漏洞源于系统命令可以通过 subprocess_execute 函数远程运行,远程攻击者利用该漏洞可以执行远程代码。 免责声明 技术文章仅供参考,任…

jstack(Stack Trace for Java)Java堆栈跟踪工具

jstack(Stack Trace for Java)Java堆栈跟踪工具 jstack(Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照(一般称为threaddump或者javacore文件)。 线程快照就是当前虚拟机内每一条线程正在执…

使用预制体画刷在游戏场景中快速布置预制体、粒子特效等

有时候在使用tilemap的时候,会希望在场景中添加更复杂的对象。 在2d-extras中,加入了预制件笔刷(Prefab Brush),可以将游戏物体预制体作为瓦片,来方便的在游戏场景中快速的绘制。可以自动适应游戏物体的位置…

GitHub 开启 2FA 双重身份验证的方法

最近收到GitHub官方发来的邮件,全是英文的,如图: 使用邮箱翻译插件,进行翻译,哦,原来是要我进行2FA注册,如果不注册,GitHub的访问将收到限制,所以还是得注册一下 然后怎…

【Redis基础篇】浅谈分布式系统(一)

一、浅谈分布式系统 1. 单机架构:只有一台服务器,这个服务器负责所有的工作。 如果遇到了服务器不够的场景怎么处理? 开源:增加更多的硬件资源节流:软件上的优化,优化代码等…一台服务器资源使用有限,就…

无涯教程-PHP - 常量声明

常量值不能更改。默认情况下,常量区分大小写。按照约定,常量标识符始终为大写。与变量不同,您不需要具有"$"的常量。 constant 函数 如名称所示,此函数将返回常量的值。 当您要检索常量的值但不知道其名称时&#xf…

WebGL的剪裁空间

推荐:使用NSDT场景编辑器助你快速搭建可二次编辑的3D应用场景 什么是WebGL的剪裁空间 WebGL的剪裁空间(Clipping Space)是在图形渲染过程中处理视图体积裁剪的一种特定空间。它是指定义在3D世界坐标系和屏幕窗口之间的虚拟空间,用…

宝塔部署Java+Vue前后端分离项目经验总结

前言 之前部署服务器都是在Linux环境下自己一点一点安装软件,听说用宝塔傻瓜式部署更快,这次浅浅尝试了一把。 确实简单! 1、 买服务器 咋买服务器略,记得服务器装系统就装 Cent OS 7系列即可,我装的7.6。 2、创建…

css 实现svg动态图标效果

效果演示&#xff1a; 实现思路&#xff1a;主要是通过css的stroke相关属性来设置实现的。 html代码: <svgt"1692441666814"class"icon"viewBox"0 0 1024 1024"version"1.1"xmlns"http://www.w3.org/2000/svg"p-id"…

游戏msvcr120.dll丢失怎样修复?msvcr120.dll丢失常见原因

在尝试运行某些游戏时&#xff0c;我遇到了“msvcr120.dll丢失”的错误提示。经过一番调查和尝试&#xff0c;我成功地解决了这个问题。msvcr120.dll是Visual C Redistributable Package的一部分&#xff0c;它包含了许多运行Windows应用程序所需的库和函数。当游戏或其他应用程…

The internal rate of return (IRR)

内部收益率 NPV(Net Present Value)_spencer_tseng的博客-CSDN博客

电商项目part04 微服务拆分

微服务架构拆分 微服务介绍 英文:https://martinfowler.com/articles/microservices.html 中文:http://blog.cuicc.com/blog/2015/07/22/microservices 微服务拆分时机 如下场景是否需要进行微服务拆分&#xff1f; 代码维护困难&#xff0c;几百人同时开发一个模块&…

Java之接口

作者简介&#xff1a; zoro-1&#xff0c;目前大一&#xff0c;正在学习Java&#xff0c;数据结构等 作者主页&#xff1a; zoro-1的主页 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f496; Java之接口 接口的概念语法规则接口特性接口使用案…

16----公式

本节我们来学习如何在markdown中打印公式 Markdown是一种轻量级标记语言&#xff0c;常用于撰写文档、博客和论坛帖子。虽然Markdown本身并不支持数学公式&#xff0c;但可以使用一些扩展来实现公式的显示。在支持公式扩展的 Markdown 解析器中&#xff0c;我们可以使用 Katex …

openstack搭建

1 设置root密码&#xff1a;sudo passwd root 2 网络配置&#xff1a;虚拟机安装是选择nat映射&#xff0c;系统安装成功后直接配置vmnet8的地址段即可&#xff08;操作系统正常安装即可&#xff0c;虚拟机内存大于4G即可&#xff09;&#xff1b; 3 安装ssh 在命令行输入 “su…