iOS 启动链详解~

Step 1、按下电源

额,这个就不谈了。

Step 2、Boot ROM

所有iOS设备在处理器内都集成有一段名为Boot Room的代码,此代码被烧制到处理器内的一块存储上,并且只读,所以它的完整性的得到保障的。但这也同样会有问题,万一Boot Room本身存在安全漏洞,那么就无法通过更新进行修复。

而Boot Room的功能主要是负责初始化设备,并且引导加载底层引导加载器LLB(Low Level Bootloader)。在这一过程中,Boot Room会使用Apple Root CA Public证书对LLB进行验证,如果验证成功则加载iBoot,不成功则启动失败。

Boot Room在启动的过程中的地位至关重要,由于Boot Room只读特性,保证了iPhone上不能安装Android系统。同理,在除了iPhone其他的设备上没有Boot Room,也就无法安装iOS系统。

Step 3、Low Level Bootloader

LLB(Low Level Bootloader)不同于Boot ROM,它不是被内嵌在设备上的,而是在iOS系统中,同其他文件一样,是一种被加密的IMG3格式文件,会随着iOS系统更新而更新。

LLB负责启动更高层次的Bootloader,同样这一步也需要进行验证。验证不成启动失败,成功则继续。

Step 4、iBoot

iBoot 才是引导过程中的主加载器,它负责加载操作系统内核。同样这一步也需要进行验证。验证不成启动失败,成功则继续。

iBoot在内存中被加载至地址0x5FF00000处。它有一个内建的HFS+驱动,可以直接访问iOS的文件系统,并支持多线程。iBoot通常会派生出两个线程:

一个main线程,负责显示启动时的苹果logo,并根据auto-boot和boot-command环境变量的设置(正常引导模式下boot-command被设为fsboot)进行系统引导,引导过程可以根据bootdelay环境变量延迟进行;

一个是uart reader线程,苹果可能将这个线程用于调试,其基本处于闲置状态。正常引导模式中,iBoot调用fsboot()函数挂载iOS系统分区,定位内核,准备设备数并引导系统,如果引导失败,则进入恢复模式引导。

以上三个步骤只要其中任何一个步骤验证失败,则启动失败。

Step 5、launchd && 守护程序和代理程序 && SpringBoard

之前最主要的几部完成之后就剩下启动相关程序了,先启动第一个程序launchd,再由由launchd启动守护程序和代理程序,之后是桌面应用SpringBoard,系统启动完成。

你可能感兴趣的:(iOS 启动链详解~)