iOS BootLoader详解

2024-06-18 22:18
文章标签 详解 ios bootloader

本文主要是介绍iOS BootLoader详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • Pre-Introduction – EFI
  • Pre-Introduction – NVRAM
  • Pre-Introduction – Ramdisk and APFS FileSystem
  • BootLoader Introduction
  • BootLoader Process

正文

1. Pre-Introduction – EFI

EFI(Extensible Firmware Interface,可扩展固件接口),是由Intel公司发起用于替换计算机系统BIOS技术的开放标准。EFI可以看做是一个运行时环境,它规范了一组API(应用程序编程接口),基于EFI的程序可以利用这些API实现访问基本的硬件功能,EFI服务分为两类,引导服务和运行时服务,本文将介绍的BootLoader即属于引导服务。
MacOS/iOS的EFI实现并非标准的EFI,但是具备标准EFI的部分特性,由于Apple没有开放相关文档,我们可以从标准EFI的文档资料了解其中一二。

2. Pre-Introduction – NVRAM
NVRAM 是EFI中一个非常强大的功能,而且这显然是传统BIOS 没有的功能。NVRAM 变量和 shell 变量的语义是一样的,都是环境变量的功能,但是NVRAM 是在系统范围内存在的,它属于EFI运行时服务,所以操作系统和EFI本身都可以访问。
一般来说,NVRAM 变量可以分为以下几个类别:
a) 引导相关的变量:用于指定要引导的内核和根文件系统,还负责向内核传递参数,如“boot-command=fsboot”。
b) 固件内部变量:固件使用的变量,一般被操作系统忽略。
c) 临时变量:根据需要设置或清空,通常在重新引导的时候不会停留。

3. Pre-Introduction – Ramdisk and APFS FileSystem
1)Ramdisk是一个完整的文件系统(它是基于内存的文件系统),可以用来替换根文件系统,并且Flash文件系统也可以挂载到Ramdisk文件系统,可以修改或更新。在iOS恢复模式中会使用到。
2)APFS文件系统是包含标准的iOS镜像的文件系统(它是基于闪存的文件系统,ios专属文件系统),在内核引导加载完毕进入OS模式会加载APFS文件系统。

4. BootLoader Introduction
BootLoader(引导加载器/引导加载程序)。BootLoader process指的是从计算机通电的那一瞬间到CPU开始执行操作系统代码时的整个过程,在这个非常初期的阶段中,CPU执行标准的启动代码,这部分代码需要对硬件设备进行探测,寻找最有可能启动的操作系统并且根据用户定义的参数启动这个操作系统。BootLoader会在任何操作系统运行之前执行。
大部分的操作系统用的都是通用的引导加载器(BootLoader)。iOS使用的主引导加载器则是Apple自研开发的iBoot。

5. BootLoader Process

在这里插入图片描述
如图,iOS的启动引导分为三种模式,分别是正常模式引导、恢复模式引导以及固件更新模式引导。恢复模式引导在引导失败后会进入Recovery,固件更新模式在iOS系统升级降级会使用。

整个引导过程大概是这样的:
1>. 首先加载Boot ROM (只有这一步骤是未加密的,其他的步骤是都是加密的)
BootROM (引导ROM) 负责初始化设备,并加载底层引导加载器(Low Level Bootloader,LLB)。ROM属于设备的一部分,无法更新。
2>. 接着判断是否是DFU模式,是则跳到步骤4,否则跳到步骤3。
3>. 普通引导/恢复模式引导:
1)加载LLB
LLB(Low Level Bootloader, 底层引导加载器)负责定位并加载iBoot。如果查找iBoot失败,LLB将放弃加载并切换到固件更新模式(DFU)引导。LLB是iOS的一部分,不属于设备本身,它和iOS镜像中的其它文件一样,是被加密的im4p格式文件(在Bundle中可以看到”./Firmware/all_flash/LLB.d42.RELEASE.im4p”)。
2)加载iBoot
iBoot是引导过程中的主加载器,它负责定位、准备并加载kernelCache(链接好的内核)。iBoot它有一个内建的APFS驱动,可以直接访问iOS的文件系统,并支持多线程。iBoot通常会派生出两个线程,一个“main”线程,负责显示启动时的苹果logo,并根据auto-boot和boot-command环境变量的设置(正常引导模式下boot-command被设为fsboot)进行系统引导,引导过程可以根据bootdelay环境变量延迟进行;一个是“uart reader”线程,苹果可能将这个线程用于调试,其基本处于闲置状态。
3)在普通引导模式中,iBoot调用fsboot()函数挂载iOS系统分区,定位内核,准备设备树并引导系统,如果引导失败,则进入恢复模式引导。
4>. DFU模式引导:
1)加载iBSS:负责底层初始化以及iBEC的加载。
2)加载iBEC:负责通过USB升级/降级iOS的过程。
DFU模式允许从任何状态恢复所有设备。它本质上是BootROM可以接受iBSS的一种模式。DFU是SecureROM的一部分,它被烧录固化在硬件,只读而不能被移除。在iOS设备上,它生成ApNonce并识别APTickets(APTickets,确保每次发送的SHSH内容都不同),即使在DFU中,它也可以接受APTicket。
5>. SafeBoot Chain:
SafeBoot Chain(安全启动链)。iOS在启动过程每个步骤包含的组件都经 Apple 加密签名以确保其完整性,只有在验证信任链后,每个 步骤才能继续。这些组件包括引导加载程序、内核、内核扩展项和基带固件。
打开 iOS 设备后,处理器会立即执行只读内存(Boot ROM)中的代码。这些不可 更改的代码(称为硬件的信任根)是在制造芯片时设好的,为隐式受信任代码。Boot ROM 代码 包含 Apple 根 CA 公钥,该公钥用于验证底层引导加载程序 (LLB) 是否经过 Apple 签名,以决定 是否允许其加载。这是信任链中的第一步,信任链中的每个步骤都确保下一步骤获得 Apple 的签 名。当 LLB 完成其任务后,它会验证并运行下一阶段的引导加载程序 iBoot,后者又会验证并运 行 iOS 内核。

参考

  1. iPhoneWiki: The iPhone Wiki.
  2. 《深入解析Mac OS X & iOS操作系统》

这篇关于iOS BootLoader详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1073207

相关文章

十四、观察者模式与访问者模式详解

21.观察者模式 21.1.课程目标 1、 掌握观察者模式和访问者模式的应用场景。 2、 掌握观察者模式在具体业务场景中的应用。 3、 了解访问者模式的双分派。 4、 观察者模式和访问者模式的优、缺点。 21.2.内容定位 1、 有 Swing开发经验的人群更容易理解观察者模式。 2、 访问者模式被称为最复杂的设计模式。 21.3.观察者模式 观 察 者 模 式 ( Obser

【操作系统】信号Signal超详解|捕捉函数

🔥博客主页: 我要成为C++领域大神🎥系列专栏:【C++核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞👍收藏⭐评论✍️ 本博客致力于知识分享,与更多的人进行学习交流 ​ 如何触发信号 信号是Linux下的经典技术,一般操作系统利用信号杀死违规进程,典型进程干预手段,信号除了杀死进程外也可以挂起进程 kill -l 查看系统支持的信号

iOS HTTPS证书不受信任解决办法

之前开发App的时候服务端使用的是自签名的证书,导致iOS开发过程中调用HTTPS接口时,证书不被信任 - (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAu

Jitter Injection详解

一、定义与作用 Jitter Injection,即抖动注入,是一种在通信系统中人为地添加抖动的技术。该技术通过在发送端对数据包进行延迟和抖动调整,以实现对整个通信系统的时延和抖动的控制。其主要作用包括: 改善传输质量:通过调整数据包的时延和抖动,可以有效地降低误码率,提高数据传输的可靠性。均衡网络负载:通过对不同的数据流进行不同程度的抖动注入,可以实现网络资源的合理分配,提高整体传输效率。增

Steam邮件推送内容有哪些?配置教程详解!

Steam邮件推送功能是否安全?如何个性化邮件推送内容? Steam作为全球最大的数字游戏分发平台之一,不仅提供了海量的游戏资源,还通过邮件推送为用户提供最新的游戏信息、促销活动和个性化推荐。AokSend将详细介绍Steam邮件推送的主要内容。 Steam邮件推送:促销优惠 每当平台举办大型促销活动,如夏季促销、冬季促销、黑色星期五等,用户都会收到邮件通知。这些邮件详细列出了打折游戏、

探索Elastic Search:强大的开源搜索引擎,详解及使用

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引入 全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选,相信大家多多少少的都听说过它。它可以快速地储存、搜索和分析海量数据。就连维基百科、Stack Overflow、

常用MQ消息中间件Kafka、ZeroMQ和RabbitMQ对比及RabbitMQ详解

1、概述   在现代的分布式系统和实时数据处理领域,消息中间件扮演着关键的角色,用于解决应用程序之间的通信和数据传递的挑战。在众多的消息中间件解决方案中,Kafka、ZeroMQ和RabbitMQ 是备受关注和广泛应用的代表性系统。它们各自具有独特的特点和优势,适用于不同的应用场景和需求。   Kafka 是一个高性能、可扩展的分布式消息队列系统,被设计用于处理大规模的数据流和实时数据传输。它

Linux中拷贝 cp命令中拷贝所有的写法详解

This text from: http://www.jb51.net/article/101641.htm 一、预备  cp就是拷贝,最简单的使用方式就是: cp oldfile newfile 但这样只能拷贝文件,不能拷贝目录,所以通常用: cp -r old/ new/ 那就会把old目录整个拷贝到new目录下。注意,不是把old目录里面的文件拷贝到new目录,

笔记-python之celery使用详解

Celery是一个用于处理异步任务的Python库,它允许你将任务分发到多个worker进行处理。以下是Celery的使用详解: 安装Celery 使用pip安装Celery: pip install celery 创建Celery实例 首先,需要创建一个Celery实例,指定broker(消息中间件)和backend(结果存储)。 from celery import Celeryap

IOS 数组去重的几种方式

本来只知道NSSet和KeyValues的。今天又新学了几种方式 还有就是和同事学的一种方式 外层循环从0开始遍历,内层从最后一个元素开始遍历 for(int i=0;i<index;i++){  for(int j=index-1;j>i;j-- ){ } }