前言
来了解一下Android 固件和内核启动过程是怎么样的
固件启动过程
手机中的固件,就相当于 PC 机里的 BIOS(或者现在的 EFI),其主要部件是一个由硬件制造厂商提供的 boot ROM。
顾名思义,boot ROM 是记录在只读 (read-only-memory)部件中的所以它一般都很小,只记录了一小段在手机刚一加电到加载 sbl之前必须要先执行的启动代码。它的作用是初始化其他的硬件部件,使它们处于至少是可以使用的状态。然后,boot ROM 就会加载sbl(secondary boot loader,次级启动加载器)并把系统控制权交给 sbl。sbl是个软件,所以它不受硬件 ROM 容量的限制,可以记录更多的数据,所以也能去执行更复杂的初始化任务(比如,显示一个启动画面)。
手机里的处理器和 PC 机里的还不一样,它并不是一个单独的CPU(比如说一块Intel或者ARM 处理器),而是一个完整的芯片组 (SoC,System-on-Chip)。事实上,这也就意味着有好几个处理器在同时工作,而应用处理器 (application processor)只是其中之一。比如说,高通的“骁龙”处理器中就至少含有4 个子处理器:RPM(资源/电源管理)、Krait(应用处理器)、Adreno(图形处理器–GPU’)、和Hexagon (数字签名处理器–DSP,Digital Signal Processor)。
所以MSM芯片组的启动也是一个特别冗长的过程,先执行 boot ROM中的PBL(初级启动加载器primary boot loader),然后再加载执行 sbl(次级启动加载器)。
而这个sbl本身又可以分为三个阶段(sbl1-sbl2-sbl3),各个 sl 阶段加载和验证下一阶段代码的过程又是一段令人眼花缭乱的复杂操作,其中还涉及了 rpm和 tz (ARM 可信区域)中的代码。之后应用处理器才能启动其他的组件,执行 aboot 中的代码,一直要到到这儿,Android 的 Boot Loader 才算是正式登场。