高通8953启动流程

嵌入式工程师有必要了解芯片启动过程,在分析、调试各种问题时都有可能涉及这方面知识。同时,这部分知识复杂,涉及到芯片内部架构,启动各个阶段软件代码执行顺序,启动模式等等。以常用的MSM8953芯片启动过程为例,进行宏观分析。

处理器核心

从上图看出,MSM8953处理器有5个,分别为:

1、APPS: Cortex A53 core,运行Android。

2、RPM(Resource Power Manager):Cortex M3 core,主要用于低功耗应用。

3、Modem(MPSS_QDSP6):高通自有指令集处理器,处理3G、4G通信协议等。

4、Pronto(WCNSS):处理WiFi相关代码

5、LPAS:音频相关

对应下面芯片硬件结构图中各个处理器的框图来看就很清晰。

启动相关image介绍:

1、PBL(Primary BootLoader) 位于rom(只读内存)中,是芯片上电后执行的真正第一行代码,在正常启动流程中会加载SBL1。如果启动异常会虚拟出9008端口用于紧急下载(短接板子上的force_boot_from_usb引脚(MSM8953 为gpio37)到1.8v强制进入紧急下载模式)。

2、SBL1(Second BootLoader stage 1) 位于EMMC中,由PBL加载,初始化buses、DDR、clocks等,会虚拟出9006端口,用于不能开机时dump ram。

3、QSEE/TrustZone  安全相关,如fuse(安全熔丝)。

4、DEVCFG OEM配置信息(如OEMLock)。

5、 Debug Policy 调试相关。

6、APPSBL 即为BootLoader,目前使用LK(LittleKernel)。

7、HLOS(High Level Operating System) 即为Linux/Android。

8、Modem PBL  即为Modem处理器的PBL。

9、MBA(Modem BootAuthenticator) Modem处理器启动鉴权。

启动流程

1、系统上电,使MSM8953从上电复位开始运行。

2、在Cortex A53中运行的PBL会加载:

a)从启动设备(如EMMC)加载SBL1 segment1到L2(即为TCM)。

b)加载SBL1 segment2到RPM处理器的RAM中。

3、SBL1 segment1会初始化DDR,并完成如下加载:

a)从启动设备加载QSEE image到DDR。

b)从启动设备加载DEVCFG image到DDR。

c)从启动设备加载Debug Policy image到DDR。

d)从启动设备加载HLOS APPSBL(Bootloader) image到DDR。

e)从启动设备加载RPM firmware image到RPM的RAM中。

4、SBL1移交运行控制权给QSEE。QSEE建立安全运行环境,配置xPU,支持fuse。

a)SBL1运行在AArch32模式,而QSEE运行在AArch64模式。为了切换到AArch64模式,SBL1会启动重映射器,操作RMR寄存器,然后触发warm-reset,QSEE就能够运行在AArch64模式了。

5、QSEE通知RPM启动RPM 固件的执行。

6、QSEE移交运行控制权给HLOS APPSBL(Bootloader)。

a)APPSBL只能在AArch32模式开始运行。

b)这时AArch32的运行模式切换是在EL3/Monitor模式完成的。通过查看APPSBL的ELF头能够得知其需要运行在32位指令集架构下。EL3/Monitor模式改变到32位模式,然后再启动APPSBL。

7、APPSBL加载、验证kernel。APPSBL通过SCM调用改变到HLOS kernel需要的AArch64模式。这和之前LK直接跳转到kernel运行是不同的。

8、HLOS kernel通过PIL加载MBA到DDR。

9、HLOS kernel对Hexagon modem DSP进行解复位。

10、Modem PBL继续它的启动。

11、HLOS kernel 通过PIL加载AMSS modemimage到DDR。

12、Modem PBL验证MBA然后跳转到MBA。

13、HLOS通过PIL加载WCNSS(Pronto)image到DDR。

14、HLOS对WCNSS(Pronto)进行解复位以便Prontoimage开始执行。

15、HLOS通过PIL加载LPASS image到DDR。

16、HLOS对LPSAA进行解复位以便LPASSimage开始执行。

下面是流程的简化图,其中区分了AArch32和AArch64位的QSEE/TrustZone。

关于EMMC和DDR的初始化时间问题,从上面的描述中可以看到。

1、PBL中是含有EMMC驱动的,有访问EMMC的能力,自身运行在MCU内部SRAM中。

2、除了PBL程序的img在MCU片内ROM外,其余img均存储在EMMC中。

3、PBL首先从EMMC加载SBL1到L2(内部缓存并非DDR),SBL1同样运行在片内SRAM。

4、有SBL1初始化DDR各种时序后,DDR自此可用(eMMC一直可用)。

5、再由SBL1加载其余各个img到DDR,然后按照linux的正常顺序启动。

---------------------

作者:xiezhi123456

来源:CSDN

原文:https://blog.csdn.net/xiezhi123456/article/details/80989150

版权声明:本文为博主原创文章,转载请附上博文链接!

高通modem启动过程_高通8953启动流程【转】相关推荐

  1. 高通modem启动过程_高通modem代码中的NV读写

    NVRAM非易失性随机访问存储器(Non-Volatile Random Access Memory) ,是指断电后仍能保持数据的一种RAM.在手机中,NVRAM位于flash芯片中. 手机上所谓的N ...

  2. 高阶累积量四阶矩_高阶累积量.ppt

    高阶累积量 内 容 经典谱估计与现代谱估计 参数模型法概述 基于AR模型的谱估计法 最大熵谱估计算法 最小方差谱估计 基于矩阵特征分解的谱估计 高阶谱估计 内 容 随机信号的特征 经典谱估计与现代谱估 ...

  3. 申通快递机器人上岗_申通快递机器人效率惊人:70%人工下岗

    原标题:申通快递机器人效率惊人:70%人工下岗 随着快递业的发展,一些与快递有关的"黑科技"也初露端倪.这不,最近申通快递的全自动分拣机器人就引起了网友们的关注.这些橙色的机器人可 ...

  4. springboot启动过程_不要搞笑哈,你用了5年的SpringBoot框架,竟然不了解它的启动过程?...

    SpringBoot的启动很简单,代码如下: @SpringBootApplicationpublic class MyApplication { public static void main(St ...

  5. 威纶通定时循环操作宏_威纶通触摸屏宏指令的使用

    工控多年的公众号运营者 我经常分享原创技术内容 内容涉及到工业多个方面 分享新知识带你一起进步 今天看到一个例程,想再写一下威纶通触摸屏宏指令的使用.之前有分享过一篇有关威纶通关于宏指令使用的文章,那 ...

  6. python是否高送转预测股票_高送转炒作逻辑:建立高准确率的预测模型

    6月26日三联虹普发布公告披露,2018年半年度利润分配及资本公积金转增股本预案为向全体股东每10股转增9股. 随着沪深两市首份半年报高送转预案出炉,预示着又到了市场追捧炒作高送转题材股票的好时候.不 ...

  7. linux内核启动过程2:保护模式执行流程

    上一篇<<linux内核压缩制作bzImage>>分析了bzImage制作流程,本篇继续分析内核启动过程,从实模式跳转到保护模式及后续执行流程. protected_mode_ ...

  8. Zynq linux启动过程,详解zynq的启动步骤

    本文主要介绍zynq启动过程,主要包括BootROM和FSBL等的执行过程. 硬件启动过程 1. 重新上电或POR复位后进行硬件启动过程 2. 扫描"启动引脚"设置,并存入只读寄存 ...

  9. 家用计算机启动过程 装载主引导记录,计算机启动过程详解

    综述: 计算机启动时经过了哪些过程: 计算机接通电源后,第一步要进行加电自检,也就是POST(Power On Self Test),检查RAM.驱动器等:第二步BIOS会读取活动分区主引导记录的启动 ...

  10. win10怎么设置开机启动项目_苹果mac开机启动项怎么设置

    mac系统有没有开机启动项?如何设置呢?有些软件我们不需要开机启动,有些软件我们又想让它开机启动,那么mac系统下要怎么禁止或添加开机启动项呢?下面macdown小编给小伙伴详细的讲解苹果mac开机启 ...

最新文章

  1. 深入理解ext4等Linux文件系统
  2. Android中/system/build.prop文件解读
  3. python语言开发的软件有哪些-最适合人工智能开发的5种编程语言,你知道几种?...
  4. php统计凌晨6点,凌晨是哪一段时间,0:00-6:00(午夜到天亮前)
  5. .NET开发人员犯的6大安全错误
  6. 【程序员面试宝典】递归之两个字符串连接次序问题(P83)
  7. R︱Linux+Rstudio Server尝鲜笔记(打造最佳Rstudio体验+报错的解决方案)
  8. django 模型增加字段后迁移失败
  9. Android IPC通信系列篇
  10. Skype国际版下载方法
  11. 求职、跳槽中英文简历模板下载集合
  12. crc java代码_Java ZipEntry getCrc()用法及代码示例
  13. 如何用ZBrush雕刻出栩栩如生的头发(二)
  14. 空间线与空间平面之间的夹角关系
  15. C语言每日一练——第35天:打印菱形
  16. Computer Vision 杂志对何恺明 Rethinking ImageNet Pre-training 的最新评论
  17. matlab绘制折线图基本操作
  18. mysql 查询小数点_MySQL查询小数点位数
  19. Benji Bananas 与 ApeCoin 一起迈向边玩边赚
  20. 高效办公的Excel小技巧

热门文章

  1. java double精度丢失 0.1+0.2不等于0.3
  2. [转载] 网络游戏程序员须知 调试多人联机游戏
  3. 菜鸟的Springboot学习日历(一)
  4. python print用法举例,Python2和Python3中print的用法示例总结
  5. 热血江湖数据库MYSQL修改_手游服务端框架之配置与玩家数据库设计
  6. springboot的学习(1)
  7. python调用so库
  8. 基于DDD的微服务设计和开发实战
  9. 华为小实例|VRRP协议
  10. 强化学习实战(九) Linux下配置星际争霸Ⅱ环境