iOS之系统启动流程

在了解iOS设备系统启动流程之前,我们先来了解一下传统的计算机系统是如何启动的。计算机系统的启动分为前后两个过程,先是底层硬件固件程序的运行以加载操作系统的内核,后是操作系统接管之后的相关进程启动过程。

传统计算机系统启动

大部分PC引导使用BIOS(Basic Input Output System),计算机通电后第一件事即读取运行ROM芯片中的BIOS程序。BIOS做的第一件事是硬件自检,检测计算机硬件是否正常,若有问题,则驱动主板发出蜂鸣,并中止启动。硬件自检没有问题后,BIOS则按照“启动顺序”找到第一个可用于启动的储存设备。判断标准即读取存储设备最前面512个字节,如果其最后两个字节是0x550xAA,即表明设备可用于启动。这512个字节也叫“主引导记录(Master Boot Record,MBR)”,保存了几乎所有分区和引导逻辑。

BIOS将控制权交给MBR后,MBR通过分区表找到操作系统加载器代码,并将控制权交给加载器。紧接着,操作系统的内核被载入,以Linux为例,即载入./boot目录下的内核文件。内核载入成功后,开始运行第一个程序./sbin/init,用于初始化系统环境。由于init是第一个运行程序,它的PID即为1,其它进程都是从它衍生出来的后代。init运行起来后,负责加载运行各种开机启动程序(守护进程),直到执行./bin/login程序,整个系统才算启动完成。

诸如运行Windows和Linux系统的计算机,都使用了传统的BIOS进行引导,然而,BIOS存在很多局限性。比如,BIOS只能访问大约1MB的内存,无法和现在强大的图形设备进行接口操作,无可扩展性,另外,它还和MBR分区方案紧密耦合,只允许磁盘上有4个可引导分区。正因为这些局限性,苹果在OS X上采用了一种更新的32位/64位兼容标准——可扩展固件接口(Extensible Firmware Interface, EFI)。EFI最早由Intel发起,是一个全功能的运行时系统,引导期间提供了更为强大的接口。但苹果也只在OS X上使用了EFI,而i系列设备都不支持EFI,所以在此就不过多了解。

iOS设备系统启动

苹果在iOS上的引导与OS X完全不同,它属于苹果自创的一套引导流程,这也为避免一些恶意黑客越狱者在苹果移动设备上安装其它操作系统(可是理想是美好的,现实很残酷)。尽管iOS的引导也没有使用BIOS,但计算机系统启动本质上的原理差不多,因此了解了一般计算机系统的引导,再来理解iOS的引导也就不难了。

iOS的启动引导分为三种模式,分别是正常模式引导、恢复模式引导以及固件更新模式引导。恢复模式引导在正常模式引导失败后会进入,固件更新模式在iOS系统升级或者越狱时会使用,这里描述一下正常开机启动的正常模式引导。

当按下电源键后,如果没有其它用户交互,iOS设备正常启动将经历以下几个过程:

引导ROM > LLB > iBoot > 加载内核 > 启动launchd > 启动守护程序和代理程序

上述步骤中一直到内核的加载,除了引导ROM,其它步骤都被加密及数字签名。

引导ROM负责初始化设备,并加载底层引导加载器(Low Level Bootloader,LLB)。ROM属于设备的一部分,所以没法更新。这样的好处就是没法逆向,但是一旦ROM中有缺陷也没法以更新的方式来修正。诸如,苹果早期使用A5芯片之前的i系列设备,其引导ROM就存在严重漏洞,黑客利用这个漏洞可绕过苹果签名并上传自定义镜像,实现设备的完美越狱,设备即可被安装上了Android系统。直到A5使用了新的ROM,才对这一缺陷打了补丁。

LLB负责定位并加载iBoot,如果查找iBoot失败,LLB将放弃加载并切换到固件更新模式引导。LLB是iOS的一部分,不属于设备本身,它和iOS镜像中的其它文件一样,是被加密的IMG3格式文件。

iBoot才是引导过程中的主加载器,它负责加载操作系统内核。iBoot在内存中被加载至地址0x5FF00000处。它有一个内建的HFS+驱动,可以直接访问iOS的文件系统,并支持多线程。iBoot通常会派生出两个线程,一个“main”线程,负责显示启动时的苹果logo,并根据auto-boot和boot-command环境变量的设置(正常引导模式下boot-command被设为fsboot)进行系统引导,引导过程可以根据bootdelay环境变量延迟进行;一个是“uart reader”线程,苹果可能将这个线程用于调试,其基本处于闲置状态。正常引导模式中,iBoot调用fsboot()函数挂载iOS系统分区,定位内核,准备设备数并引导系统,如果引导失败,则进入恢复模式引导。

内核载入后,将启动第一个程序launchdlaunchd相当于上述Linux系统的init程序,然后,由launchd启动守护程序和代理程序,直到桌面应用SpringBoard运行,系统算启动完成。主流程上和Linux类似,但细节上有很多不同,关于launchd启动后的详细情况,见后续文章梳理。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容

  • 理论部分 镜像 一、镜像的百科定义 1、维基百科 ISO映像是一种光盘的存档文件(英语:archive file)...
    幻影翔阅读 1,871评论 4 3
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,057评论 25 707
  • 转载声明:本文虽然不是本人100%原创,但也是辛辛苦苦整理的,可以转载,但请注明出处 这篇文章是关于折腾Windo...
    SOMCENT阅读 7,965评论 3 37
  • 我有一个博客,写了十年。刚开博的时候,还是一个正在读研的学生,看到里面记录的都是做东西不顺利,出不来结果还要向导师...
    aimeelala阅读 320评论 0 0
  • 开始学理财已经两年有余,看似学了不少,自己在实践中也有模有样运用了一些。但是今天一件事像巴掌一样打到我脸上。抛给了...
    梅子Mey阅读 497评论 2 3