Android系统启动之bootloader

image.png

目录

第一篇:Android系统启动之bootloader
第二篇:Android系统启动之Init流程(上)
第三篇:Android系统启动之Init流程(下)
第四篇:Android系统启动之init.rc文件解析过程
第五篇:Android系统启动之zyogte进程
第六篇:Android系统启动之zyogte进程java(上)
第七篇:Android系统启动之zyogte进程java(下)
第八篇:Android系统启动之SystemServer

Android系统启动

image.png

PC机是如何启动的?

引导阶段

读取BIOS

BIOS: Basic Input/Output System(基本输入输出系统),一般是主板芯片上的一个程序,计算机通电后,第一件事就是读取它。

BIOS 程序首先检查计算机硬件能否满足运行的基本条件,这叫做"硬件自检"(Power-On Self-Test),缩写为 POST。 如果硬件出现问题,主板会发出不同含义的蜂鸣,启动中止。 如果没有问题,屏幕就会显示出 CPU,内存,硬盘等信息。

硬件自检完成后,BIOS 把控制权转交给下一阶段的启动程序。

下一阶段的启动程序到底存放在哪一个设备当中。 也就是说 BIOS 需要有一个外部存储设备的排序,排在前面的设备就是优先转交控制权的设备。 这种排序叫做启动排序,也就是我们平时进入 BIOS 界面时能看到的 Boot Sequence。

启动程序

第一存储设备被激活后,计算机读取该设备的第一个扇区,也就是读取最前面的 512 个字节。

如果这 512 个字节的最后两个字节是 0x55 和 0xAA ,表明这个设备可以用于启动;如果不是,表明设备不能用于启动,控制权于是被转交给“启动顺序”中的下一个设备。

这最前面的 512 个字节,就叫做主引导记录(Master boot record,缩写为 MBR)。

主引导记录

主引导记录 MBR 是位于磁盘最前边的一段引导代码。它负责磁盘操作系统对磁盘进行读写时分区合法性的判别、分区引导信息的定位,它由磁盘操作系统在对硬盘进行初始化时产生的。 硬

盘的主引导记录 MBR 是不属于任何一个操作系统的,它先于所有的操作系统而被调入内存,并发挥作用,然后才将控制权交给主分区内的操作系统,并用主分区信息表来管理硬盘。
MBR 只有512个字节,放不了太多东西。 它的主要作用是,告诉计算机到硬盘的哪一个位置去找操作系统。 我们找到可用的 MBR 后,计算机从 MBR 中读取前面 446 字节的机器码之后,不再把控制权转交给某一个分区,而是运行事先安装的"启动管理器"(boot loader),由用户选择启动哪一个操作系统。

加载内核阶段

选择玩完操作系统后,控制权转交给操作系统,操作系统的内核首先被载入内存。

以 Linux 系统为例,先载入 /boot 目录下面的 kernel。 内核加载成功后,第一个运行的程序是 /sbin/init。 它根据配置文件(Debian 系统是 /etc/initab )产生 init 进程。 这是 Linux 启动后的第一个进程,pid 进程编号为 1,其他进程都是它的后代。
然后,init 线程加载系统的各个模块,比如:窗口程序和网络程序,直至执行 /bin/login 程序,跳出登录界面,等待用户输入用户名和密码。

全部启动过程完成。

Android启动流程

关于Boot Loaeder

Android 系统虽然也是基于 Linux 系统的,但是由于 Android 属于嵌入式设备,并没有像 PC 那样的 BIOS 程序。 取而代之的是 Bootloader —— 系统启动加载器。

Bootloader主要是在系统加载前,初始化硬件设备,建立内存空间的映像图,为最终调用系统内核准备好环境。

在 Android运行环境中里没有硬盘,而是 ROM,它类似于硬盘存放操作系统,用户程序等。

ROM 跟硬盘一样也会划分为不同的区域,用于放置不同的程序.

android系统分区:
系统分区 功能
/boot 存放引导程序,包括内核和内存操作程序
/system 相当于电脑c盘,存放Android系统及系统应用
/recovery 恢复分区,可以进入该分区进行系统恢复
/data 用户数据区,包含了用户的数据:联系人、短信、设置、用户安装的程序
/cache 安卓系统缓存区,保存系统最常访问的数据和应用程序
/misc 包含一些杂项内容,如系统设置和系统功能启用禁用设置
/sdcard 用户自己的存储区,可以存放照片,音乐,视频等文件
启动电源以及系统启动

电源按下开始,引导芯片代码开始从预定义的地方(固化在ROM)开始执行。加载引导程序到RAM,然后执行。

bootloader

bootloader程序分两个阶段执行。第一个阶段,检测外部的RAM以及加载对第二阶段有用的程序;第二阶段,设置网络、内存等等。这些对于运行内核是必要的,为了达到特殊的目标,bootloader可以根据配置参数或者输入数据设置内核。

bootloader程序可以在\bootable\bootloader\legacy\usbloader找到。

kernel

kernel开始启动时,设置缓存、被保护存储器、计划列表,加载驱动。

当kernel完成系统设置,它首先在系统文件中寻找”init”文件,然后启动root进程或者系统的第一个进程。

init进程

init是第一个进程,可以说它是root进程或者说有进程的父进程。
init进程有两个责任:

  1. 挂载目录,比如/sys、/dev、/proc
  2. 运行init.rc脚本。
    init进程会启动zygote进程。
zygote

zygote 进程是系统服务,可以说是android系统的关键。

在初始化时会启动虚拟机,并加载一些系统资源。

这样 zygote fork 出子进程后,子进程也继承了能正常工作的虚拟机和各种系统资源,接下来只需装载 apk 文件的字节码就可以运行应用程序了,可以大大缩短应用的启动时间,这就是 zygote 进程的主要作用。

系统服务或服务

创建完java虚拟机后,zygote进程开始创建服务:
核心服务:

启动序号 服务名
1 启动电源管理器;
2 创建Activity管理器;
3 启动电话注册;
4 启动包管理器;
5 设置Activity管理服务为系统进程;
6 启动上下文管理器;
7 启动系统Context Providers;
8 启动电池服务;
9 启动定时管理器;
10 启动传感服务;
11 启动窗口管理器;
12 启动蓝牙服务;
13 启动挂载服务。

其他服务:

启动序号 服务名
1 启动状态栏服务;
2 启动硬件服务;
3 启动网络状态服务;
4 启动网络连接服务;
5 启动通知管理器;
6 启动设备存储监视服务;
7 启动定位管理器;
8 启动搜索服务;
9 启动剪切板服务;
10 启动登记服务;
11 启动壁纸服务;
12 启动音频服务;
13 启动耳机监听;
14 启动AdbSettingsObserver(处理adb命令)。

至此,android系统就完全跑起来了.O(∩_∩)O哈哈~

参考

Android系统启动顺序
一篇文章看明白 Android 系统启动时都干了什么

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

推荐阅读更多精彩内容

  • 前言 本文着重对 Android 系统启动流程做一个简析,旨在从宏观上了解 Android 启动流程,不涉及具体代...
    Whyn阅读 2,213评论 0 2
  • 本次系列的内容如下: Android启动流程——1 序言、bootloader引导与Linux启动Android系...
    隔壁老李头阅读 7,747评论 1 13
  • 我们很多人去干涉孩子的兴趣,去干涉孩子的婚姻,去干涉孩子的职业,但是最后当孩子遇到困境的时候,还是孩子自己去承受这...
    心点灵咨询阅读 221评论 0 3
  • 总以为这些东西有一天会用到,可是总是也用不到,扔掉让生活更轻松。 坏了的玩具玩具,一直舍不得扔。这次果断扔掉。 赠...
    瑞瑞2018阅读 350评论 1 3
  • 自从开始写字,我就对自己关注的公众号挑剔了起来。 虽然时常会被新号推送的宣传吸引并开始关注,但看过两三篇文章就知道...
    Anita的奇妙花园阅读 819评论 4 17