Android启动过程

上述报价是百分之一百合适的。 从表面上看,Android似乎是一个简单的操作系统。 但是,相比之下,大多数智能手机消费者使用的操作系统中添加的过程和功能要复杂得多。

Android启动过程

对于初学者来说,引导过程不过是一堆面向最终用户的精美图像和动画。 这篇文章旨在为那些最终用户分解启动过程。 我保证您需要阅读完整的书才能理解流程。 如果以正确的方式进行解释,没有什么太复杂的。

基本过程的骨架

引导ROM->引导程序->内核->初始化-> Zygote-> Dalvik VM->系统服务器->管理器

以上恰好是Android启动的核心过程。 当然,看起来比简单地按住电源按钮要复杂得多。 接下来,让我们探索每个步骤,包括并行操作(如果有的话)。

引导ROM

按住电源按钮后,立即执行负责“ Boot ROM”部分的代码。 代码的原点恰好是预定义的硬编码位置。 该代码将引导加载程序加载到RAM中并自行执行。

Android启动过程

引导程序

引导加载程序只是Android系统的一个小组成部分。 您可能听说过OEM或制造商设置了某些限制和规则-这正是所有这些“规则”的存储位置。 框架中称为“ bootloader”的过程包括两个阶段:

第一阶段-检测RAM。 引导加载程序将检测RAM并执行启动第二步所需的应用程序。

第二步-设置所有内容。 现在,引导加载程序将继续设置网络,低级内存管理和安全选项。

这一步对于内核的执行至关重要。 位于/启动/引导程序/遗留引导程序/包含两个非常重要的文件,即init.smain.c中

init.s文件基本上初始化堆栈,零和BSS段。 然后,它继续在main.c中初始化call_main() main.c文件在并行创建Linux标签时初始化硬件,特别是时钟,控制台和键盘。

我们将尽量不深入细节。 没有人愿意读一千字的文章来解释“简短”中的技术性内容。 这是删除评论的地方。

内核

Android内核的初始化过程模仿Linux内核的初始化。 在内核执行时,它会设置缓存,设置受保护的内存并计划不同的负载驱动程序。 当完成所有设置和安排驱动程序的过程成功结束时,内核会在系统文件中查找init。

初始化过程

初始化过程被认为是相当重要的一步。 不仅会安装目录或分区(例如/ sys/ dev) ,还会启动init.rc脚本。 init进程位于/ init,而init.rc脚本位于/ rootdir

Android启动过程

Zygote和Dalvik

Zygote是一个VM进程,它在系统启动时启动。 它可以在Dalvik VM之间实现代码共享,从而有助于缩短启动时间。 Zygote还可以确保减少内存占用,从而避免Dalvik VM消耗大量的内存。 而且,它初始化核心库类。

Zygote加载过程的框架看起来完全像我们概述的框架:
加载Zygote初始化类-> registerZygoteSocket()-> preloadClasses()-> preloadResources()->用户的眼睛盯着宏伟的启动动画

系统服务

Zygote现在派生了一个新过程,以启动,处理和执行下面概述的过程。

启动电源管理器->创建活动管理器->启动电话注册表->启动程序包管理器->将活动管理器服务设置为系统进程->启动上下文管理器->启动系统联系人提供程序->启动电池服务->启动警报管理->启动->传感器服务->启动窗口管理器->启动蓝牙服务->启动挂载服务->启动状态栏服务->启动硬件服务->启动NetStat服务->启动连接服务->启动Notification Manager- >启动DeviceStorageMonitor服务->启动位置管理器->启动搜索服务->启动剪贴板服务->启动检查服务->启动墙纸服务->启动音频服务->启动HeadsetObserver->启动AdbSettingsObserver->对谁高五阅读整个事情! 谢谢

Android启动过程

照片由 portalgda Foter.com / CC BY-NC-SA

分析

现在启动已成功结束,并且服务已启动并正在运行,您可能想学习创建日志的技巧

开发人员,不客气

使用adb从引导过程日志目录中获取事件。 按照布局的相应顺序输入以下给出的命令。 在那里几乎输入“ Phoenix”。

adb logcat -d -b事件| grep“启动”

亚行logcat -d | grep preload```

From: https://hackernoon.com/the-android-boot-process-2ce4c498615b