Android启动过程的分析

简介: 本文讲的是Android启动过程的分析,对于Android操作系统的初学者来说,引导过程,只不过是终端用户的一些花哨的图像和动画。但当你阅读完这篇文章后,你可能会打破原来对引导过程的狭隘思维。
本文讲的是 Android启动过程的分析

Android启动过程的分析

大多数智能手机用户使用的Android操作系统的功能和操作过程都比较复杂。

Android启动过程的分析

对于Android操作系统的初学者来说,引导过程,只不过是终端用户的一些花哨的图像和动画。但当你阅读完这篇文章后,你可能会打破原来对引导过程的狭隘思维。

基本核心过程

引导ROM >引导加载程序 >内核 > init过程> Zygote > Dalvik V M >系统服务器 >管理器

该过程是Android启动的核心过程,下面让我来详细介绍每一步及其并行操作(如果有的话)。

引导ROM

一旦Android操作系统开始运行,就会执行负责“Boot ROM”部分的代码。起始代码恰好是预定义的硬编码位置,代码将引导加载程序加载到RAM中并开始执行。

引导程序

虽然引导程序只是Android系统的一小部分,但却非常重要。你可能已经听说过OEM或制造商放置的某些限制和规则,而引导程序正是存储所有这些“规则”的地方。一开始提到的“引导加载程序”的过程其实包括两个阶段:

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

第二步:设置。引导加载程序现在继续设置网络、低级内存管理和安全选项。

Android启动过程的分析

这一步对于执行内核至关重要。位于/ bootable / bootloader / legacy / usbloader的引导加载程序包含两个非常重要的文件,即init.s和main.c。

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

内核

Android内核的初始化过程模仿的是Linux内核的初始化,当内核执行时,它将高速缓存,受保护的内存设置为不同的加载驱动程序。当完成所有设置和调度驱动程序后,内核会在系统文件中查找init。

初始化过程

init过程是相当重要的一步,这一步,不仅会安装/ sys和/ dev等目录或分区,还会启动init.rc脚本。 init进程位于/ init,而init.rc脚本位于/ rootdir。

Android启动过程的分析

Zygote和Dalvik VM 

Zygote是一个VM进程,会在系统启动时启动。它可以实现Dalvik VM的代码共享,从而有助于把启动时间降至最低。 Zygote还确保更低的内存占用,使Dalvik VM不会消耗大量内存。此外,它还会初始化核心库类。

Zygote加载过程的框架看起来与开头概述的框架完全相同:

加载Zygote init类 > registerZygoteSocket() > preloadClasses() > preloadResources() >用户看到启动的动画

系统服务器

在这一步,Zygote会要求一个新的过程,这样以下的过程才会启动,处理和执行。

启动电源管理器 >创建活动管理器 >启动电话注册表 >启动包管理器 >将活动管理器服务设置为系统进程 >启动上下文管理器 >启动系统联系人 >启动电池服务 >启动警报管理 >启动 >传感器服务 >启动窗口管理器 >启动蓝牙服务 >启动安装服务 >启动状态栏服务 >启动硬件服务 >启动NetStat服务 >启动连接服务 >启动通知管理器 >启动DeviceStorageMonitor服务 >启动位置管理器 >启动搜索服务 >启动剪贴板服务 >启动检查服务 >启动墙纸服务 >启动音频服务 >启动HeadsetObserver >启动AdbSettingsObserver >呈现到用户眼前

分析

现在,启动就已经全部完成,与此同时服务已启动并运行,这时,你可能需要了解创建日志的一些方法。

使用adb logca从启动过程获取日志,你可以按照相应顺序输入以下命令:

adb logcat –d –b events | grep “boot”
adb logcat –d | grep preload```




原文发布时间为:2017年9月4日
本文作者:xiaohui
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。
目录
相关文章
|
24天前
|
搜索推荐 Android开发 iOS开发
安卓与iOS系统的用户界面设计对比分析
本文通过对安卓和iOS两大操作系统的用户界面设计进行对比分析,探讨它们在设计理念、交互方式、视觉风格等方面的差异及各自特点,旨在帮助读者更好地理解和评估不同系统的用户体验。
18 1
|
2月前
|
Android开发 数据安全/隐私保护 iOS开发
安卓与iOS系统的发展趋势与比较分析
【2月更文挑战第6天】 在移动互联网时代,安卓和iOS系统作为两大主流移动操作系统,各自呈现出不同的发展趋势。本文将从技术角度出发,对安卓和iOS系统的发展方向、特点及未来趋势进行比较分析,以期为读者提供更深入的了解和思考。
35 4
|
3月前
|
监控 Android开发 C语言
深度解读Android崩溃日志案例分析2:tombstone日志
深度解读Android崩溃日志案例分析2:tombstone日志
82 0
|
3月前
|
数据安全/隐私保护 Android开发
2023安卓逆向 -- 某合伙apk登录加密分析
2023安卓逆向 -- 某合伙apk登录加密分析
26 0
|
7月前
|
Java Android开发
Android oom pthread_create (1040KB stack)分析及解决
Android oom pthread_create (1040KB stack)分析及解决
85 0
|
2月前
|
网络协议 算法 Android开发
安卓逆向 -- 实战某峰窝APP(动态分析)
安卓逆向 -- 实战某峰窝APP(动态分析)
25 4
|
2月前
|
安全 搜索推荐 Android开发
Android 与 iOS 的比较分析
【2月更文挑战第5天】 Android 和 iOS 是目前市场上两种最流行的移动操作系统,它们都拥有自己的特点和优势。本文将会分别从操作系统设计、应用生态、安全性等方面对这两种操作系统进行比较和分析,希望能够帮助读者更好地选择适合自己的移动设备。
|
3月前
|
安全 算法 JavaScript
安卓逆向 -- 关键代码定位与分析技术
安卓逆向 -- 关键代码定位与分析技术
39 0
|
3月前
|
算法 安全 Android开发
安卓逆向 -- Frida Hook某车_sign算法分析
安卓逆向 -- Frida Hook某车_sign算法分析
76 0
|
3月前
|
安全 Android开发 数据安全/隐私保护
安卓逆向 -- SO文件逆向分析
安卓逆向 -- SO文件逆向分析
19 0