做高通平台开发的同学一定遇到过这样的场景手头板子插上电源按了开机键屏幕死活没有反应串口一片寂静像是哲学三问一样它是谁它从哪儿来要到哪儿去这个问题的答案就藏在高通平台的启动流程里。从硬件复位到Boot ROM再到各级引导程序最后把控制权交到Linux内核和Android系统手里这条链路决定了你每次开机的前几秒到底发生了什么。这篇文章我打算把高通平台的启动流程从头到尾捋一遍从复位管脚的状态变化开始讲到PBL、SBL/XBL、ABL再到内核启动和系统分区挂载。无论你是做手机方案、车机、边缘计算盒子还是自己折腾高通开发板和小主机搞懂这条链都能少走很多弯路。尤其最近在接触SM8550Kalama平台的新显示IC驱动开发时不时需要从bootloader阶段就把屏点亮对这条链路的理解就变得格外关键。1. 启动流程全景一条从晶圆到桌面的信任接力1.1 一句话讲清楚高通冷启动链条拿一台正常的Android手机举例冷启动链路大致可以分成四棒。第一棒是硬件复位PMIC上的复位逻辑、CPU内部的复位控制器、时钟生成器配合一轮后CPU从Boot ROM的固定地址开始取指执行。第二棒是PBL全称Primary Boot Loader它是固化在芯片内部ROM上的原始引导程序没有写权限、也改不了它的任务是初始化最基础的环境、读取硬件熔丝状态、校验下一级引导程序的签名。第三棒是SBL或XBL也就是Secondary Boot Loader或eXternal Boot Loader它接管之后做真正的硬件初始化DDR内存训练、存储控制器、时钟电源等都在这一级完成。第四棒是ABL和应用操作系统ABL读取boot分区并验证内核镜像最后跳转Linux内核内核再挂载根文件系统启动init进程整个系统才算活过来。如果你接触过STM32或者其它单片机会发现思路很像上电后先跑一段固化在芯片里的启动代码然后跳到用户程序。只不过高通的链路更长、验证更多、分工更细而且每一步都有运行时视角下的“主宰者”哪一步出了问题表现都不一样。1.2 为什么这四棒一环都不能断很多初学者容易忽略一点高通引导过程并不只是“加载代码”那么简单它是一条信任链。每一级引导程序都要先验证下一级的数字签名验证通过才允许继续执行。比如PBL会用硬件校验SBL/XBL的签名SBL/XBL又校验ABLABL校验内核镜像的签名。这个机制背后是防回滚和安全的考量如果中间任意一环被替换成未签名或已被篡改的镜像设备就会拒绝启动或者直接进入紧急下载模式EDL。理解这一点对平时调试帮助极大。有次我遇到设备无限重启反复查硬件都没问题最后发现是某一次测试时分区里残留了一个回滚计数器超限的旧版本镜像导致启动链验证失败后陷入复位循环。这类问题不看启动流程根本无从下手你会一直误判成电源、晶体、或PMIC的硬件问题。所以说启动流程不光是系统工程师的知识储备也是做驱动、做FAE、做方案集成的人必须常备的基础功。1.3 先说一个容易混淆的概念SBL与XBL高通旧平台如MSM8916、MSM8953上PBL之后通常叫SBL1再往后还有一个小众的SBL2/SBL3阶段。到了骁龙845以后的平台高通把引导架构整合到了UEFI体系下外壳统一叫XBL内部是一个eMMC/UFS上的EFI固件。XBL负责设备初始化然后跳到ABLABL本质上也是UEFI应用负责fastboot策略和内核加载。在SM8550这种较新的平台上你基本不会再看到“SBL1”这个名词出现在日志里取而代之的是XBL、ABL、DXE这些UEFI味很重的词。如果拿过去的经验去套新平台很容易被日志搞晕。我的建议是先把“SBL/XBL是干硬件的ABL是干策略的”这个大框架记住细节差别只要按平台资料走就行。2. 第一棒复位与PBL先搞清楚机器为什么“醒过来”2.1 复位的种类与控制路径很多人说起启动流程上来就讲Boot ROM反而把复位这个源头忽略了。其实机械按键按下去那一下背后是一连串复位信号的级联。高通方案上常见的复位触发方式至少有这几种上电复位POR、看门狗复位WDOG、按键强制复位、PMIC的PON复位、以及软件主动触发的复位。它们最终都会汇聚到CPU的复位控制器但走到这一步之前的路径完全不同。比如电源键产生的PON事件会先由PMIC记录再拉高某个电源轨然后给CPU释放一个稳定的复位解除信号而看门狗复位则完全由系统内部触发往往说明前面的软件已经跑飞。调试中我会特别强调一点如果设备反复重启先别急着抓log先确认是哪种复位导致的重启。代码层能做的事是读复位原因寄存器硬件层则可以用示波器同时抓PMIC输出电压和复位脚波形二者结合通常能快速缩小范围。2.2 复位原因怎么查在Android系统起来之后可以借助高通提供的寄存器接口查看上一次复位原因。比较常用的路径是读PMIC的PON寄存器以及CPU的复位状态寄存器。每个平台映射地址不同SM8550这类新平台还可能走一套独立的寄存器组但思路一致找“RESET_STATUS”或“PON_CNTL”一类的字段解析出上次是软件复位、看门狗复位还是键盘长按复位。内核起来后也可以用现成命令快速看比如cat /sys/kernel/debug/qcom-pon/power-key-release cat /sys/kernel/debug/qcom-pon/power-key-status cat /sys/kernel/debug/qcom-pon/pmon-status这些debugfs节点在多数高通方案上都存在不同内核版本字段名有差异。做量产项目时我会把这些信息收集进启动阶段的诊断脚本里一旦用户反馈“设备无故重启”抓回的log里能直接看到复位原因省去远程反复沟通的成本。2.3 为什么“异步复位同步释放”值得反复说热词里有两个来自FPGA设计的说法异步复位、同步释放。很有意思这两点在芯片设计和高通启动流程里同样适用。异步复位的意思是复位信号只要有效系统立刻进入复位状态不用等时钟但解除复位的时刻如果和时钟沿太接近就可能出现亚稳态导致内部触发器状态不确定。所以工程上会做同步释放让复位信号在释放时经过两级触发器打拍保证复位解除时刻相对时钟是稳定的。放到高通平台上看PMIC给AP的复位信号并不是简单的一根线拉到CPU就结束而是要经过电源时序控制、时钟稳定判断、复位释放逻辑之后CPU才开始跑Boot ROM。很多硬件问题之所以时好时坏往往就是复位信号释放不在时钟稳定之后或者某个电源轨还没稳定就被CPU当成了有效运行条件。这一点在做主板调试时值得反复确认特别是用第三方PMIC或者自研电源方案的场景最容易在这里翻车。2.4 PBL最底层的那段“上帝代码”PBL运行在Boot ROM里由高通出厂固化正常手段完全改不了。它的主要动作包括锁定CPU和DDR的初始状态、初始化少量内部SRAM、从设备识别信息MSM_ID、OEM_ID等读取芯片身份、读取熔丝状态然后根据引导配置决定下一级代码从哪加载。如果PBL阶段出了岔子串口上往往只能看到很少的输出甚至什么都没有。因为这时候DDR还没有初始化PBL基本不依赖外部内存跑复杂逻辑它能做的事极其有限。这也是为什么PBL阶段的调试手段主要是硬件仿真器、JTAG/SWD接口以及一部分通过USB进入EDL模式的通道。而EDL模式能成为“救砖”最后的希望就是因为PBL里固化了最原始的USB下载逻辑不需要DDR、不需要eMMC、不需要系统只要USB物理链路和时钟正常就能和PC侧的QPST/QFIL通信。3. 第二棒SBL/XBL真正的“体力活”从这里开始3.1 DDR训练是怎么一回事SBL/XBL最重要的一项任务就是初始化DDR内存。DDR颗粒不是上电就能直接用的它需要经历供电、时钟校准、ZQ校准、读写眼图训练等一系列步骤才能保证内存总线在高频率下稳定工作。这个过程业内叫DDR Training如果配置不对、时序不对板子轻则无法通过POST重则在系统高负载运行时随机崩溃。印象很深的一次经历一块国产主板上换了另一家品牌的LPDDR4X颗粒跑系统跑个十几分钟就随机重启抓ramdump也看不出明显结论。后来把串口log从PBL开始完整打开发现DDR training阶段一个关键参数打印出来数值异常再翻硬件原理图发现是DQ/DQS映射和默认配置不一致。高通原厂默认配置是按自家参考设计来的换料后必须按实际连接关系修改DDR配置表否则训练出来的参数只能在特定温度下可用整个板子就是“薛定谔的稳定”。3.2 从SBL到XBL的架构演进早期平台的SBL1是个相对轻量级的代码集合跑完DDR训练之后会去加载TZTrustZone和ABL。后来平台功能越来越多安全要求也越来越高高通逐渐把引导过程往UEFI上迁移。XBL里能看到PEI、DXE、BDS这些UEFI概念也会加载一系列platform驱动比如eMMC/UFS驱动、USB驱动、显示驱动、按键驱动等。这种演进对开发者的影响是启动过程中的模块化更强了日志也可以按UEFI阶段来区分。你可以把SBL/XBL理解成一个迷你操作系统它有事件循环、驱动模型、内存管理不过目标只有一个——为下一阶段准备好环境。调试时看到类似“EDK2”或者“UEFI”字样的log不要慌它不是系统跑飞了只是引导环境换了马甲。3.3 TZ、QHEE与安全世界在SBL/XBL阶段高通还会加载TZTrustZone固件有的平台上叫QHEE。TZ属于ARM TrustZone的安全世界负责提供安全启动、密钥管理、硬件加密等能力。它是和普通世界隔离的所以即使Android系统被人拿下了root很多安全密钥依然拿不到。启动流程里TZ出现的位置通常很关键DDR初始化完成后TZ就要被加载进来并接管内存隔离。一旦TZ加载失败后面的启动基本没戏。如果你看到log里明确报TZ相关的错误先确认TZ镜像和平台匹配性再确认回滚计数器是否一致。很多时候“设备变砖”并不是硬件坏了而是系统里某个安全镜像版本比设备当前允许的最旧版本还要旧于是校验卡住了。3.4 显示驱动为什么会在bootloader阶段就出现很多人问为什么做显示IC驱动开发还要了解bootloader因为在启动过程中手机需要在bootloader阶段就点亮屏幕显示品牌Logo、充电图标、fastboot菜单等。也就是说一块新屏幕要做完整适配不仅要让内核里Android能点亮它还得让XBL/ABL阶段就能正常点屏。这就要说到屏的初始化时序了。无论是传统的MIPI DSI接口还是新平台上的DisplayPort over Type-C都要求在bootloader阶段发送初始化命令序列选择正确的显示IC驱动设置好分辨率、刷新率、DSI时钟等参数。如果只在内核里适配你会发现系统起来后屏幕正常但开机Logo阶段就是黑屏或者电量低充电时看不到充电图标。SM8550这类新平台对显示流水线的抽象更深分层更多做新显示IC驱动时尤其要在bootloader和内核两套环境里都验证一遍。4. 第三棒ABL与内核把控制权交出去的那一刻4.1 ABL策略执行的“总管家”XBL完成硬件初始化后会跳转到ABL。ABL名字里带Application意思就是它是个应用层面的引导程序负责具体引导策略。它会读取分区表找到boot、vendor_boot、dtbo、init_boot等分区把内核镜像和DTB/DTBO加载到内存校验签名然后跳转到内核入口。ABL同时还是fastboot协议的实际执行者。你在fastboot模式下执行的fastboot flash、fastboot boot、fastboot erase等命令都由ABL里的fastboot loopbacl服务响应。这也是为什么大部分改机型、刷内核、临时启动测试镜像的场景都绕不开ABL的原因。4.2 boot.img、vendor_boot、dtbo的分工到了Android 10以后的版本内核镜像的存放不再是一个简单的boot.img里塞完而是拆成了多个分区。boot.img主要放kernel、ramdiskvendor_boot放vendor ramdiskdtbo放设备树覆盖init_boot放generic ramdisk。这种拆分让SoC厂商、OEM厂商、器件驱动可以各自独立更新不用每次升级都重刷完整的boot。对启动流程的理解要跟上这个变化如果一个设备卡在开机logo或者内核起来但没有显示别只想着是不是boot.img的问题优先确认dtbo是否正确加载、vendor_boot里的ramdisk有没有解出来对应的驱动。有次我调试一块屏幕只有背光亮但无图像改了半天内核配置最后发现是dtbo里默认选择的DSI panel节点和实际硬件不匹配ABL把DTS覆盖成了另一块屏。这份排查经验就是从理解ABL如何加载dtbo开始的。4.3 从ABL跳进内核的关键参数ABL跳转内核时并不是简单地“跳到某个地址”而是一整套参数交接过程。它会通过bootimg头、DTB、以及UEFI运行时的数据通道把以下几个关键信息传给内核内核入口地址和DTB物理地址ramdisk的物理地址和大小平台ID、面板ID等硬件识别信息cmdline里的console、androidboot相关参数显示接口的当前状态避免内核启动时屏幕闪烁这些参数如果传递不对内核可能从一开始就跑飞也可能出现启动到一半才崩溃。排查这种问题时多留意ABL日志里“Load Image”相关打印以及内核dmesg最先输出的几条“Machine model”和“Kernel command line”上下对照基本能定位。4.4 Linux内核起来之后在做什么内核拿到控制权后第一件事是解压自身建立页表初始化中断和时钟然后开始探测总线、注册驱动、挂载根文件系统。高通平台上常见的内核驱动初始化顺序大体是GIC中断控制器、定时器、SMMU、DMA、IOMMU然后才是显示、GPU、USB、存储等外设。如果这一步卡住最常见的外部表现就是串口log停在某个驱动的probe函数里或者完全停在内核初始化早期。这时可以重点看两个层级第一是否在earlycon阶段就停了如果连早期log都没有大概率是内存参数或DTB传给内核时出了问题第二是否停在某个驱动的probe里如果停在这里问题往往是个别驱动对硬件状态的预期不一致比如某个外设没上电、中断没配置好导致等待超时或死锁。5. 排查三板斧日志、工具与常见问题速查5.1 用串口日志判断卡死阶段启动流程排查最快的方法永远是看串口log。高通平台在bootloader阶段一般允许开启UART打印不同平台的开启方法略有差异。手机量产机上串口不一定引出来但开发板和参考板上基本都会有测试点。拿到log后按照我前面讲的阶段划分去定位如果log停在PBL之前几乎没有任何输出优先查电源、复位、主时钟如果log里能看见PBL的芯片ID识别但后续加载镜像失败查熔丝、信任链和引导配置如果log里已经出现了UEFI字样却停在DDR训练阶段查内存配置和电源时序如果log已经跳出bootloader并进入了内核那就按内核启动顺序继续往下找。我自己习惯在开发阶段把串口波特率固定下来一边跑一边录log这样每次异常重启都能留下时间线。没有串口的设备也可以尝试开启内核的pstore/ramoops内核crash的现场会保存在内存保留区里下次冷启动时还能从dump目录读出来这对查找内核阶段死机很管用。5.2 EDL模式与Firehose的恢复思路当系统完全起不来bootloader又因为校验失败无法进入fastboot时EDL模式就成了最后的入口。EDL是高通紧急下载模式的缩写由PBL里的固件直接驱动USB控制器实现所以即使引导链已经坏了只要芯片还能上电、USB物理链路正常就能被PC识别成9008端口。进入EDL的方式各平台略有不同有的是短接测试点有的是在fastboot下执行fastboot reboot edl有的是按特定组合键。识别到9008后用QFIL加载配套的Firehose工程就可以对分区镜像做全量烧写。需要注意的是Firehose XML文件必须和平台匹配乱刷会刷出更大的问题。此外在带上锁的安全平台上EDL刷机还会检查镜像签名和防回滚状态不是随便拿个第三方包就能刷的。我做量产支援时有一个习惯每台新项目样机第一时间就导出分区表、备份原始bootloader和关键分区镜像再另外准备一台“随便折腾”的工程机专门用来验证EDL能不能回救。这样即使后续开发中把机器刷成砖也能在几分钟内恢复现场不至于耽误项目节奏。5.3 常见问题速查表现象大概率原因排查建议串口完全无输出设备无反应电源、复位、主时钟异常示波器抓电源轨和复位信号查PMIC状态有PBL输出但卡在镜像加载引导镜像签名、熔丝状态、回滚版本异常检查刷入镜像与平台是否匹配确认防回滚配置卡在UEFI阶段反复重启DDR配置或电源时序问题重点看DDR training日志核对颗粒和布线映射卡在ABL或fastboot阶段boot分区损坏、ABL策略配置异常用fastboot重刷boot.img检查分区表内核起来但屏幕不亮显示IC驱动或dtbo配置不匹配同时在bootloader和内核两个阶段验证点屏系统跑起来后随机死机重启内存训练不稳定或温度相关长时间压力测试抓ramdump分析异常地址5.4 开发环境下工具链脚本跑不通这算一个比较隐蔽的坑。高通的很多工具和脚本比如QFIL里内嵌的批处理、烧写脚本、以及部分辅助开发脚本是在命令行环境下直接运行的。Windows系统如果开启了PowerShell执行策略限制脚本可能一执行就报错看起来像工具本身坏了实际上只是系统默认禁止了脚本运行。处理方法很简单在管理员PowerShell里执行Set-ExecutionPolicy RemoteSigned允许本地脚本运行然后再重试工具脚本。或者直接把要运行的脚本改为cmd调用绕开PowerShell策略。这个现象在Windows平台上特别容易出现在新装机或者企业统一管理的电脑上我见过不少同事在这个点浪费了半天时间其实和数据、硬件、驱动都没关系。6. 一些实操里的心得备忘顺手把这两年调启动流程时攒下来的几条经验整理在这里算是一份“不需要背但需要懂”的清单。第一永远保留一台可以进EDL的样机。启动链调试的实验性质很强很多时候你以为刷不坏的东西一次手滑就会让设备进入反复重启。有保底设备开发效率会高很多。第二改平台配置前先备份原始包。SM8550这类新平台的分区数量多、镜像文件密改错一个配置可能不会立刻暴露而是到了产线批量测试时才随机崩溃。把每个阶段的原始镜像、哈希值、烧写记录都留存好出问题后可以快速比对差异。第三把屏幕点亮问题当成启动链路的一部分来看。屏幕驱动不是在Android内核里写完就完事的bootloader阶段能不能亮、充电模式下能不能亮、快速开机动画会不会闪都是量产品控关注点。尤其是做新显示IC驱动时启动流程的验证清单至少要覆盖冷启动点亮、内核切换不闪屏、快速启动回显正常、低电充电图标正常。第四多看原厂的启动日志参考文档。高通的启动log里包含的信息量很大阶段标识、寄存器值、镜像版本都有迹可循。遇到看不懂的打印不要靠猜去高通文档里搜关键字或者直接比对正常机器和问题机器的完整log diff效率远高于盲改代码。最后再说一个小技巧调启动流程时我会把串口log同时输出到文件和屏幕并且保证电脑磁盘有足够空间。因为有些crash发生在持续跑机几个小时后如果只开屏幕滚动前面几百行关键信息早就被冲掉了。留一份完整文件再配合时间戳定位很多神出鬼没的随机重启问题都能找到突破口。启动流程这东西搞懂了不只是为了“会开机”它更像一张地图告诉你系统出问题时该往哪个方向找。
企业数字化 ERP 产品动态
相关推荐
中小企业网站建设流程全解析:6步避坑指南含技术选型对比评测 中小企业网站建设流程全解析:6步避坑指南含技术选型对比评测 找建站公司最怕什么?怕花大价钱买个残次品,更怕被忽悠加一堆用不上的功能。很多老板在 中小企业网站建设流程 里踩坑,根源在于没搞懂背后的技术逻辑。别急着付钱,先看懂这份 对比评测… · 2026/9/28 1:22:11
基于CNN的LSB隐写图像检测:PyTorch实现低嵌入率可靠识别方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/28 1:22:05
TI IWR6843毫米波雷达开发板评测:从开箱到Demo运行全指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/28 1:22:05
Spingboot启动预热的实现 启动预热的适用场景启动预热适合以下情况:数据主要来自第三方接口,无法直接从本地数据库读取。第三方接口响应较慢,首次访问容易超时。一个页面需要调用多个第三方接口或逐项查询。数据读取频繁,但变化不频繁。希望服务启动后&… · 2026/9/28 3:40:12
学Java别走弯路,这5个方向最吃香 学Java的人很多,但学明白的人不多。有人学了半年还在写控制台程序,有人一年就能独当一面。差别不在天赋,而在方向。Java生态太庞大了,什么都学等于什么都没学。选对方向,事半功倍。今天盘点当前最吃香的5个Java方向&am… · 2026/9/28 3:32:15
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01
制作网页比较方便的软件怎么选?一文搞懂避坑指南 制作网页比较方便的软件怎么选?一文搞懂避坑指南 很多老板一上来就问:做个网站多少钱?但我反问他:你的域名买了吗?服务器租了吗?他一脸懵。这就是典型的“域名服务器搞不懂”。别急,今天咱们不聊虚的,直接 一文搞懂 那些让你头秃的技术名词。… · 2026/9/28 0:00:06
婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量 婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量 找婚恋网站建站公司,最怕的就是被坑高价。很多同行跟我吐槽,报价单上写得模棱两可,功能栏里全是“高级定制”、“专属UI”,结果落地全是套壳。今天不聊虚的,直接甩几个我经手的 实战案例… · 2026/9/28 0:00:19
济南做网站多少钱:3个案例拆解,防黑源码下载全攻略 济南做网站多少钱:3个案例拆解,防黑源码下载全攻略 上周济南一个做建材的老板找我,脸都绿了。他的官网首页弹出了赌博广告,后台被植入了挖矿脚本。他慌得问我:“网站被黑挂马不知道怎么办?能不能直接找之前的外包公司要源码下载,看看哪里被动了手脚?… · 2026/9/28 0:00:25