我的NPI项目之设备系统启动(七) -- 高通OS启动阶段和镜像分区简析
每当有新的平台起来的时候,大概率会伴随着新系统的发布,无论是高通的还是Google Andorid的。在做平台Bringup阶段总会遇到各种各样的专业术语。例如,总是会听到有人说PBL,SBL,XBL,UFEI,Bootloader,Kernel,Android 等等。这些是说的启动的不同阶段呢,还是指不同的分区镜像呢?今天就以QCM4490为例,简单做一下解释和区分。
分区(镜像)名称:
xbl,xbl_s.melf
xbl config,xbl_config.elf
uefi,uefi.elf
QSEE/TrustZone,tz.img
super,super.img
vendor,vendor.img
system,system.img
启动不同阶段:
启动过程:

详细内容:
- PBL 阶段
- 黑色块表示具体的ROM,TME也是开机 最初阶段进行运行的firmware,TME全称为Trust Managerment Engine,以看名字就知道与安全有关。通常是为开机提供Rot和一套验证机制。蓝色块代表了不同阶段的执行程序,e.g 各种loader。
- PBL(Primary Boot Loader)负责枚举启动方式和加载SBL(Secondary Boot Loader)镜像。
PBL is a rom-based bootloader and there isn't any log such as UART can be catched by external device, so the best way to debug PBL is JTAG with Trace32。 - 如果启动失败,PBL会创建一个虚拟端口9008供镜像下载。
- PBL还会检查BootOption GPIO或fuse来确定当前的启动方式,如通过USB或Flash EMMC或者UFS启动。
SBL阶段(高通新平台用xbl sc替换,Android12之前都还有)- SBL(Secondary Boot Loader)镜像从EMMC/UFS加载并进行校验。
- SBL负责将镜像分配到不同的内存区域,如RPM Code RAM。
- SBL还负责处理电源、休眠唤醒时钟等相关管理任务。
- XBL SC阶段
- XBL system controller, 用于加载XBL镜像(xbl loader),提供XBL config,并将执行移交到xbl。主要功能是setup xbl运行环境,e.g bus/ DDR / clocks / Charger and CDT 有关的设定。xbl sc的代码通常是不可以更改的,通常是release的二进制镜像文件,俗称xbl_sc(但是它不是一个单独的img,而是被包裹在xbl_s.melf分区中)。如果,我们需要在xbl_sc中进行修改代码,通常做法是提QCOM case。例如,同一套代码在不同设备上启动,并且要选择不同的XBL config, 那么我们就必需要改动XBL SC进行选择。但是这样,会带来一个问题,就是每次codebase升级,我们都需要进行提QCOM case寻求帮助。
所以,这里有个教训就是,在我们需要启用新平台时候,需要进行和Qcom TAM进行设计确认。提出我们的需求,请高通实现。这个对架构师的要求比较高,需要看的远才行。 - XBL SC loads SHRM image from the boot device and TME authenticates and brings it out of reset.
- XBL SC loads AOP CFG and AOP image from the boot device and TME authenticates and brings AOP out of reset.
- XBL SC loads CPUCP firmware image from the boot device and TME authenticates it.
- XBL SC loads TZ device configuration (DEVCFG) image and Qualcomm TEE image from the boot device and TME authenticates it.
- ...
- xbl sc是高通签名的一个镜像文件,是否会影响release的bootup?看上去并不会!
- XBL config的主要内容有哪些?xbl_config.elf
- 包含了CDT,这个很重要,现在高通不希望我们改动CDT了,他的code是IDP的CDT,release给我们的code有而是基于IDP开发的。关于CDT的细节可以参考我的NPI项目之设备系统启动(一) -- 客制化/给设备身份的CDT-CSDN博客
- PMIC, DDR and XBL device tree。
- XBL system controller, 用于加载XBL镜像(xbl loader),提供XBL config,并将执行移交到xbl。主要功能是setup xbl运行环境,e.g bus/ DDR / clocks / Charger and CDT 有关的设定。xbl sc的代码通常是不可以更改的,通常是release的二进制镜像文件,俗称xbl_sc(但是它不是一个单独的img,而是被包裹在xbl_s.melf分区中)。如果,我们需要在xbl_sc中进行修改代码,通常做法是提QCOM case。例如,同一套代码在不同设备上启动,并且要选择不同的XBL config, 那么我们就必需要改动XBL SC进行选择。但是这样,会带来一个问题,就是每次codebase升级,我们都需要进行提QCOM case寻求帮助。
- XBL阶段
- XBL(Extended Boot Loader)阶段,用于对硬件环境进行初始化,但这些通常与高通特定的技术相关,且可能不会出现在所有的高通平台上。
- 从XBL sc切换到XBL core, which is known as UEFI.
- UEFI 阶段
- UEFI mounts and runs ABL firmware volume (FV), which has Fastboot and Linux loader applications.
- 进行charging有关的设定和初始化,能够启动ADSP中支持PD快充
- pre-charge/quick charge/
- ABL阶段
- ABL的入口代码位于Linuxloader.c,其入口函数是Linuxloaderentry().
- Linux loader application (part of ABL FV) loads and authenticates the HLOS kernel with verified boot, jumps to HLOS. The HLOS runs at nonsecure EL1 mode.
- Kernel 阶段
- 从EMMC/UFS 中获取boot.img并加载到指定的内存区域。
- 加载内核、ramdisk、devicetree等组件到指定地址,然后引导kernel。
- 内核启动入口在head.S中,最终调用的函数是start_kernel,位于main.c中。
- Android 阶段
- init 经常创建孵化器进程,孵化器进程再逐个的创建Android运行时的service。显示界面,进入Android;
当我们熟悉了分区和阶段之后,在bringup主板阶段,就可以很好的区分,代码执行到哪个阶段了,具体位于哪个分区代码中。
--熟悉启动,定制启动。
相关文章:
我的NPI项目之设备系统启动(七) -- 高通OS启动阶段和镜像分区简析
每当有新的平台起来的时候,大概率会伴随着新系统的发布,无论是高通的还是Google Andorid的。在做平台Bringup阶段总会遇到各种各样的专业术语。例如,总是会听到有人说PBL,SBL,XBL,UFEI,Bootload…...
vue框架-vue-cli
vue-cli Vue CLI是一个官方的脚手架工具,用于快速搭建基于Vue.js的项目。Vue CLI提供了一整套可配置的脚手架,可以帮助开发人员快速构建现代化的Web应用程序。 Vue CLI通过提供预先配置好的Webpack模板和插件,使得开发人员可以在不需要手动编写Webpack配置的情况下快速创建…...
Sora (text-to-video model-文本转视频模型)
以下翻译自维基百科 Introduction Sora 是由美国人工智能 (AI) 研究组织 OpenAI 开发的文本到视频模型。它可以根据描述性提示生成视频,并及时向前或向后扩展现有视频。截至 2024 年 2 月,它尚未发布,尚未向公众开放。 History 在 Sora 之…...
java生态环境评价Myeclipse开发mysql数据库web结构java编程计算机网页项目
一、源码特点 java 生态环境评价管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysq…...
数据结构-最短路径(Dijkstra算法与Floyd算法)
介绍 对于网图来说,最短路径是指两顶点之间经过的边上权值之和最少的路径,其路径上第一个点记为源点,最后一个为终点。 计算最短路径有两个经典算法,即迪杰斯特拉(Dijkstra)算法与弗洛伊德(Fl…...
文献速递:GAN医学影像合成--联邦生成对抗网络基础医学图像合成中的后门攻击与防御
文献速递:GAN医学影像合成–联邦生成对抗网络基础医学图像合成中的后门攻击与防御 01 文献速递介绍 虽然深度学习在医疗保健研究中产生了显著影响,但其在医疗保健领域的影响无疑比在其他应用领域更慢、更有限。造成这种情况的一个重要原因是ÿ…...
Java实现自动化pdf打水印小项目 使用技术pdfbox、Documents4j
文章目录 前言源码获取一、需求说明二、 调研pdf处理工具word处理工具 三、技术栈选择四、功能实现实现效果详细功能介绍详细代码实现项目目录WordUtilsMain类实现部分:第一部分Main类实现部分:第二部分Main类实现部分:第三部分 资料获取 前言…...
hive load data未正确读取到日期
1.源数据CSV文件日期字段值: 2.hive DDL语句: CREATE EXTERNAL TABLE test.textfile_table1(id int COMMENT ????, name string COMMENT ??, gender string COMMENT ??, birthday date COMMENT ????,.......) ROW FORMAT SERDE org.apache.…...
C++ 遍历map的3中方法
方法1 #include <iostream> #include <string> #include <map> using namespace std;int main() {map<string, string> nameList {{"张三丰", "武当山"},{"张无忌", "光明顶"},{"张二蛋", "…...
redis 主从模式,sentinel 模式配置
编辑 sentinel.xml 和 redis.conf redis.conf 中核心是配置 bind 192.168.64.144 daemonize yes protected-mode no dbfilename redis-6379.rdb #默认dump.rdb replica-read-only yes # 自动2.6副本默认只读,也就是slave只有只读权限 replicationOf myapplicat…...
小型医院医疗设备管理系统|基于springboot小型医院医疗设备管理系统设计与实现(源码+数据库+文档)
小型医院医疗设备管理系统目录 目录 基于springboot小型医院医疗设备管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、职员信息管理 2、设备信息管理 3、库房信息管理 4、公告信息管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、…...
CSS学习(三)
目录: 1. CSS引入方式 1.1 三种样式表 1.2 内部样式表(嵌入式引入) 1.3 行内样式表(内联样式表) 1.4 外部样式表 1.5 总结 1. CSS引入方式 1.1 三种样式表 1.2 内部样式表(嵌入式引入) …...
CentOS7安装InfluxDB2简易教程
InfluxDB是一个开源的时间序列数据库,它专门用于处理大规模的时间序列数据。时间序列数据是在特定时间点上收集的数据,例如传感器数据、监控数据、应用程序日志等。 InfluxDB设计用于高效地存储、查询和分析大量的时间序列数据。它具有高性能、可扩展性和…...
数据库:信息存储与管理的关键
数据库:信息存储与管理的关键 数据库是现代信息系统中不可或缺的组成部分,它承担着存储、管理和检索数据的重要任务。本文将详细介绍数据库的定义、分类、作用以及特点。 1. 数据库的介绍 数据库是一个有组织的数据集合,用于存储和管理大量…...
极智芯 | 解读NVIDIA RTX5090 又是一波被禁售的节奏
欢迎关注我的公众号「极智视界」,获取我的更多技术分享 大家好,我是极智视界,本文分享一下 解读NVIDIA RTX5090 又是一波被禁售的节奏。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码和资源下载,链接:https://t.zsxq.com/0aiNxERDq 按 NVIDIA GPU …...
rtt的io设备框架面向对象学习-硬件rtc设备
目录 1.硬件rtc设备基类2.硬件rtc设备基类的子类3.初始化/构造流程3.1设备驱动层3.2 设备驱动框架层3.3 设备io管理层 4.总结5.使用 硬件rtc和软件rtc设备是互斥的。因为它们的名字都叫"rtc",在对象容器中不允许重名。 1.硬件rtc设备基类 此层处于设备驱…...
产品经理学习-产品运营《流程管理》
如何进行流程管理 信息可视化 甘特图-流程管理思维导图-方案讨论原型图-活动文档 明确责任制 分工明确,关键环境有主负责人通过时间倒推督促管理 沟通技巧 明确共同利益以结果激励做好信息同步 如何进行监控活动效果 监控活动的效果是要监控数据 活动每个环境的…...
压缩感知——革新数据采集的科学魔法
引言: 在数字时代,数据以及数据的收集和处理无处不在。压缩感知(Compressed Sensing, CS)是一种新兴的数学框架,它挑战了我们传统上对数据采集和压缩的看法,给医学图像、天文观测、环境监测等领域带来了颠覆性的影响。但到底什么…...
华为配置直连三层组网直接转发示例
华为配置直连三层组网直接转发示例 组网图形 图1 配置直连三层组网直接转发示例组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件扩展阅读 业务需求 企业用户接入WLAN网络,以满足移动办公的最基本需求。且在覆盖区域内移动发生漫游时ÿ…...
MCAL知识点(二十八):TC275如何通过EB-Tresos配置实现硬件触发ADC同步采样(电机控制器三相电流同步采样)
目录 1、概述 2、实现目标 3、EB-Tresos配置 3.1、AdcGeneral 3.2、AdcGlobInputClass 3.3、AdcHwUnit_X...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
MySQL:分区的基本使用
目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...
通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...
云原生周刊:k0s 成为 CNCF 沙箱项目
开源项目推荐 HAMi HAMi(原名 k8s‑vGPU‑scheduler)是一款 CNCF Sandbox 级别的开源 K8s 中间件,通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度,为容器提供统一接口,实现细粒度资源配额…...
阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)
cd /home 进入home盘 安装虚拟环境: 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境: virtualenv myenv 3、激活虚拟环境(激活环境可以在当前环境下安装包) source myenv/bin/activate 此时,终端…...
TJCTF 2025
还以为是天津的。这个比较容易,虽然绕了点弯,可还是把CP AK了,不过我会的别人也会,还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...
