目录

前言

通用boot流程

8155/8295 boot流程概述


前言

本文将基于高通8155/8295 Q+A hypervisor平台分析整个boot的启动流程。高通其他SOC芯片的启动流程大致相同,所以本文也具备一定的参考性。

阅读本文需要你有一定的嵌入式开发经验或者具备一定的操作系统原理知识。

CPU通用boot流程

下面这张图展示了一个通用的boot流程:

注:图片来源于Arria ® 10 SoC Boot User Guide,1.1.1. Typical Boot Flow,PG 4

1,SOC power on/reset之后,将会首先执行CPU内部的Boot ROM代码

2,Boot ROM至少完成下面几个事情:

2.1,根据bootconfig判断当前SOC启动方式

2.2,根据不同的启动方式,初始化对应的驱动,例如如果设定为UFS启动,BootROM则会初始化UFS驱动

2.3,从UFS中加载第一阶段的bootloader,并在片内ram中,跳转到第一阶段的bootloader

2.4,第一阶段bootloader初始化ddr硬件,并从UFS中加载第二阶段bootloader到ddr中

2.5,跳转到第二阶段bootloader(Second-Stage Boot Loader)

3,Second-Stage Boot Loader加载并跳转到操作系统内核镜像

4,操作系统挂载文件系统,开始运行application

上面的boot流程比较简单,很多细节并没有描述到,大部分人对于boot流程的理解可能也仅限于此.但是还有一部分喜欢思考的同学会有几个问题:

1,什么是BootROM?

BootROM是固化在SOC内部的一段代码,不同厂家的叫法可能不太一样,比如高通的叫法是PBL(primary boot loader),其他家也有的叫romcode

2,BootROM上电之后是怎么运行的?

上电之后,如果CPU供电正常,晶振正常起振,那么CPU的指针会被reset到BootROM的第一条指令开始执行

3,SOC是如何知道是哪一种启动方式?

一般通过CPU的boot config pin脚来判断启动方式,当然也可以通过内部的fuse来判断,前提是硬件支持e-fuse(可编程熔断保险丝),且产品已经fuse完成

8155/8295 boot流程概述

下图是8155/8295 boot阶段中XBL的大致工作流程:

8155/8295 boot流程框图

上面我们已经介绍了通用的CPUboot流程,接下来我们会对8155/8295的boot流程进行简单的介绍。

注:80-PG469-11 Rev. B

Boot流程说明

1 .  After reset, the Kryo Silver core 0 comes out of reset and then executes PBL
On Kryo Silver core 0, applications PBL initializes hardware (clocks, and so on), CPU caches and MMU, and detects the boot device as per the
boot option configuration:
- Default boot option: UFS > SD > USB
- Default boot option: overridden by EDL cookie or Force USB GPIO
2a. Loads and authenticates XBL-SEC (region #0) from the boot device to OCIMEM
2b. Loads and authenticates XBL-Loader (region #1) from the boot device to Boot IMEM
2c. Loads and authenticates XBL-Debug (region #2) from the boot device to OCIMEM
Jumps to XBL-SEC
3. XBL-SEC runs the security configuration in EL3 mode, and then executes the XBL-Loader in EL1 mode
XBL-Loader initializes hardware and firmware images, CPU caches, MMU, boot device, XBLConfig, PMIC driver, and DDR. It performs DDR
training if applicable, executes an SCM call to XBL-SEC to initialize PIMEM, and initializes clocks and configures the clock frequencies as per
clock plan
4a. Loads and authenticates applications debug policy (APDP) image from the boot device
4b. If, DLOAD cookie is set, loads, and authenticates XBL-RAM dump and jumps to XBL-RAM dump to collect crash dump
4c. Initializes SMEM (shared memory) and fills platform ID and RAM partition table
4d. Loads and authenticates AOP image from the boot device and then bring AOP out of reset
4e. Loads and authenticates DEVCFG (TZ device configuration) image from the boot device
4f. Loads SEC.dat (fuse blowing data) image from the boot storage if exists
4g. Loads and authenticates QTEE image from the boot device
4h. Loads and authenticates QHEE image from the boot device
4i. Loads and authenticates ABL image from the boot device
4j. Executes an SCM call to XBL-SEC to jump to QTEE cold boot
5. QTEE sets up a secure environment, and then transfers the execution to QHEE image
6. QHEE proceeds to execute the XBL core (or XBL region #3) and then, XBL core mounts and transfers the execution to UEFI application processor (ABL FV)
7. Linux loader application (part of ABL FV) loads and authenticates the HLOS kernel with verified boot
8-8’. PIL driver in HLOS applications loads each subsystem image to DDR and configures clocks and power rails required
9. PIL driver in HLOS applications executes an SCM call to request secure PIL driver, authenticates the images, and brings each subsystem out of reset
10-14’. For SP image, SP PBL decrypts the image and loads it to SP SRAM

注:80-PG469-11 Rev. B

Boot流程 Q&A

1, CPU是通过哪几个pin来判断boot启动方式的?这些pin脚是受谁控制?

注:80-PG469-11 Rev. B

上图展示了使用GPIO和e-fuse控制启动具体细节。如果使用GPIO控制启动方式,通常是使用GPIO64/67/68/69这四个pin脚来控制,这几个pin脚在高通EVB开发板中是通过拨码开关来控制高低电平。在实际的产品中,通常是有另外的单片机来控制高低电平,这个单片机通常为NXP的S32单片机系列或者瑞萨的RH850系列.

需要注意,在8155上存在FORCED_USB_BOOT pin(GPIO136),拉高这个pin脚可以直接让SOC强行从USB启动。

2,如果boot config pin没有指定,默认是什么启动方式?

我们假定boot config pin没有指定指的是低电平,那么按照上面表格的顺序会默认尝试首先从UFS启动,如果UFS启动失败会切换到SD启动,如果SD启动还是失败的则会尝试从USB3.1的口上通过USB方式启动.

3,如何判断boot config是否正确?

一般判断boot config是否正确可以通过测量对应的启动方式的clock/data引脚来确定。

4,实际项目开发中是否需要对boot流程中的代码进行修改?

DEMO项目不需要,SOP项目一般都需要,因为在实际SOP的项目中,需要考虑太多的异常场景了,举个例子,现在一般都是MCU和SOC协同工作,MCU负责监控SOC,这就需要MCU实时的了解到SOC当前所处的状态(boot,work,update,flash),很多场景是没有操作系统运行的,实际在跑的可能只有bootloader,此时就要求bootloader以某种方式通知MCU,当前自己所处的状态。再一个例子,MCU对SOC的watchdog机制是需要覆盖到整个运行期间的,其中当然也包括了bootloder阶段,否则一旦出现hang在bootloader阶段但是又不触发重启就麻烦了.

高通8155/8295 boot分析相关推荐

  1. 04 基于高通8155的智能座舱功能安全设计

    前言 本篇图文跟大家分享一下基于高通8155的智能座舱仪表域功能安全设计. 全系内容可在<搞一下汽车电子>后台回复 "系列",或进入菜单栏 "分享平台&quo ...

  2. linux驱动由浅入深系列:高通sensor架构实例分析之一

    点击打开链接 本系列导航: linux驱动由浅入深系列:高通sensor架构实例分析之一(整体概览+AP侧代码分析) linux驱动由浅入深系列:高通sensor架构实例分析之二(adsp驱动代码结构 ...

  3. 高通8155车载芯片_WEY来“摩卡”云首秀,搭载高通8155芯片

    本期亮点  "咖啡"一词源自埃塞俄比亚的一个名叫卡法的古镇,在希腊语中"Kaweh"的意思是"力量与热情",而摩卡咖啡代表着创新和更多可能性 ...

  4. 认识高通8155(开发板介绍)

    认识高通8155 一.8155芯片介绍 高通8155就是高通SA8155P芯片的简称,发布于2019年,是全球首款量产7nm制程车机芯片,整个芯片的AI算力能够达到8TOPS,同时还有蓝牙5.0.Wi ...

  5. 高通8155智能座舱「风头正劲」,三款热销车型过万辆

    2021年之前,大部分市场在售车型的座舱尤其是车机芯片主要是NXP.TI.瑞萨.联发科等厂商供货.不过,随着高通8155芯片的上车,买车认准高通8155成为车市的"网红级"配置. ...

  6. linux驱动由浅入深系列:高通sensor架构实例分析之三(adsp上报数据详解、校准流程详解)

    本系列导航: linux驱动由浅入深系列:高通sensor架构实例分析之一(整体概览+AP侧代码分析) linux驱动由浅入深系列:高通sensor架构实例分析之二(adsp驱动代码结构)

  7. 高通Android display架构分析

    目录(?)[-] Kernel Space Display架构介绍 函数和数据结构介绍 函数和数据结构介绍 函数和数据结构介绍 数据流分析 初始化过程分析 User Space display接口 K ...

  8. 高通8155 GPS HAL层代码移植

    1.添加gps hal层代码包 将ublox gps芯片的hal层代码拷贝至apps/LINUX/android/hardware/ublox/路径下,树状图如下: 2.修改编译选项 将新增的ublo ...

  9. 高通MSM8255 GPS 调试分析

    没事做整理一下GPS的流程,也算给自己一个交代. 1.硬件抽象层: 高通MSM的硬件层代码在:hardware/qcom/gps/loc_api下,高通的GPS集成在baseband侧,与Modem部 ...

最新文章

  1. 结合项目实例 回顾传统设计模式(九)迭代器模式
  2. MMD的unity导入插件
  3. SQLserver单表数据导入导出
  4. 同事说rar压缩有风险,让我用zip压缩文件
  5. 8 个 Linux 下 ls 命令的高级用法!个个惊艳!
  6. 批量给hive的表加分区
  7. HTML图片动画特效
  8. 邮箱怎么群发你知道吗?邮件群发效果较好的邮箱有哪些
  9. 怎样设置CAD图纸批量打印?
  10. 字节 找出最近时间(回溯) C++ 2021-07-17
  11. eclipse中刷新项目
  12. 【机器学习】梯度下降 (python代码)
  13. Linux系统目录管理
  14. 《流浪地球》程序员破解行星发动机到底靠不靠谱
  15. Ansys workbench结构线性静力学分析-应变分析
  16. 【每日一题】014 星期一
  17. java 韩文转中文_java-如何转换为韩文缩写
  18. java thread resume_java 线程Thread方法之suspend()和resume() | 学步园
  19. 统计大串中小串出现的次数
  20. QT定时器QTimer

热门文章

  1. 跟我一步一步使用VMware安装ubuntu20.04及优化
  2. Deep Reinforcement Learning for Sepsis Treatment文献阅读记录
  3. 医生学python_Python微医挂号网医生数据抓取
  4. java 线程池控制多线程_Java多线程开发系列之四:玩转多线程(线程的控制1)...
  5. datagridview取消默认选中_DataGridView点击空白处和失去焦点后取消选择和关闭默认选择第一行C#Winform...
  6. [英文邮件] 表达感谢的话 + 回复别人的祝福
  7. kettle-创建资源库
  8. 前端自动化集成部署交付实践
  9. mysql指定服务标记为删除_如何解决“指定的服务已标记为删除”
  10. 电影票房排名查询易语言代码