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://source.android.com/security/verifiedboot/boot-flow Android.com - Boot Flow]
- [https://source.android.com/devices/automotive/power/boot_time Managing Boot Time]
- [https://osg.wiki/books/all-about-deados/page/qualcomm-bootloaders Qualcomm Bootloaders]
- [https://lineageos.org/engineering/Qualcomm-Firmware/ Qualcomm's Chain of Trust]
- [https://www.qualcomm.com/media/documents/files/secure-boot-and-image-authentication-technical-overview-v2-0.pdf Secure Boot and Image Authentication]
- [https://www.timesys.com/security/secure-boot-snapdragon-410/ Secure boot on Snapdragon 410]
- [https://blog.quarkslab.com/analysis-of-qualcomm-secure-boot-chains.html Analysis of Qualcomm Secure Boot Chains]
- [https://github.com/msm8916-mainline/qhypstub msm8916-mainline/qhypstub]
- [https://dev.to/larsonzhong/android-system-init-process-startup-and-init-rc-full-analysis-22hi Android system init process startup and init.rc full analysis]
*[https://android.googlesource.com/platform/system/core/+/master/init/README.md Android Init Language]
评论 (0)