Android设备启动过程

Android设备启动过程始于SoC(单片系统)通电,在见到主界面或进入恢复及快速启动等特殊模式时结束。其他供应商包括瑞芯微電子、美滿電子科技、 英伟达及之前的德州仪器。

历史
Android KitKat(Android 4.4)引入了启动验证,启动验证是加载引导程序时的安全措施。

启动阶段
主引导程序
引导过程的第一阶是启动主引导程序(PBL),其存储在引导ROM(Boot ROM)中,由芯片组制造商编写代码。

使用主引导程序来验证下一阶段引导程序的可靠性。

在三星智能手机上,引导ROM使用三星安全启动密钥(SSBK)来验证下一阶段。

在高通的SoC上,可以从主引导程序进入高通紧急下载模式。

如果加载并验证次级引导程序时失败,则会进入EDL。

次级引导程序
由于引导ROM中的储存空间有限,因此使用嵌入式多媒体卡eMMC)或eUFS来加载次级引导程序。 次级引导程序初始化TrustZone(信任区)。

例如高通MSM8960,次级引导程序1加载次级引导程序2。 次级引导程序2会加载TrustZone和次级引导程序3。

次级引导程序现在被高通称为XBL(可扩展引导程序),并使用統一可延伸韌體介面(UEFI)来进行交叉兼容,以便在第二阶段启动除Android以外的操作系统。

高通使用LK(Little Kernel)或XBL(eXtenable Bootloader),联发科使用Das U-Boot。 Little Kernel是一个用于嵌入式设备的微内核,经过高通的修改后可以用作次级引导程序。

Android引导程序
Android Bootloader(Aboot),它实现了fastboot接口(三星设备中没有fastboot)。Aboot用于验证引导程序和恢复分区的可靠性。 通过在手机上按下特定的组合键,设备还可以在恢复模式下启动。接着Aboot将控制权转移到Linux内核。

Android内核和initramfs(初始RAM文件系统 )
initramfs是一个经过Gzip压缩的Cpio档案,其中包含一个小型根文件系统。它包含了被执行的init程序。Android内核是由Linux内核修改后的版本。Init程序挂载了分区。dm-verity用于验证fstab文件中指定分区的完整性。dm-verity是由Google从Android 4.4开始引入的 Linux内核模块。现今实现了基于块的验证,三星已增加对该文件的支持。

Zygote进程
Zygote进程由init进程衍生,负责启动Android应用程序和服务。它将那些经常使用的类加载并初始化到堆中。例如库的dex数据结构。Zygote进程启动后,它会监听套接字上的命令。当要启动新应用程序时,会向Zygote进程发送命令,Zygote进程会执行fork系统调用。[需要引用]

分区布局
Android系统被划分在不同的分区中。

高通平台利用了GUID分区表。此规范是UEFI规范的一部分,但不依赖于UEFI固件。

参见

  • coreboot
  • Linux启动进程

*

注释
参考文献
外部链接

*[https://android.googlesource.com/platform/system/core/+/master/init/README.md Android Init Language]

评论 (0)

  • 还没有评论,来抢沙发吧。