android 启动过程的分析
来源:互联网 发布:模拟退火算法的改进 编辑:程序博客网 时间:2024/06/05 14:57
android 启动过程的分析
本文翻译自:https://thecyberfibre.com/android-boot-process/,来源于嘶吼: http://www.4hou.com/mobile/7373.html
基本核心过程
引导ROM >引导加载程序 >内核 > init过程> Zygote > Dalvik V M >系统服务器 >管理器
该过程是Android启动的核心过程,下面让我来详细介绍每一步及其并行操作(如果有的话)。
引导ROM
一旦Android操作系统开始运行,就会执行负责“Boot ROM”部分的代码。起始代码恰好是预定义的硬编码位置,代码将引导加载程序加载到RAM中并开始执行。
引导程序
虽然引导程序只是Android系统的一小部分,但却非常重要。你可能已经听说过OEM或制造商放置的某些限制和规则,而引导程序正是存储所有这些“规则”的地方。一开始提到的“引导加载程序”的过程其实包括两个阶段:
第一阶段:检测RAM。引导加载程序检测RAM并执行启动第二步所需的应用程序。
第二步:设置。引导加载程序现在继续设置网络、低级内存管理和安全选项。
这一步对于执行内核至关重要。位于/ 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。
Zygote 和Dalvil 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“`
- android 启动过程的分析
- Android启动过程分析
- Android 启动过程分析
- android启动过程分析
- android 启动过程分析
- Android启动过程分析
- Android启动过程分析
- android 启动过程分析
- android 启动过程分析
- Android启动过程分析
- Android启动过程分析
- Android启动过程分析
- Android系统的启动过程分析
- Android的APP启动过程分析
- Android源码分析-Activity的启动过程
- Android源码分析-Activity的启动过程 .
- Android源码分析-Activity的启动过程
- Android源码分析-Activity的启动过程
- python入门语法
- IPython notebook(Jupyter notebook)Python2和Python3内核(Kernel)共存
- 在阿里云的服务器(windows server 2008 R2 Enterprise)上安装wampserver错误提示我系统缺失MSVCR110.dll
- 话说raw_input与input的区别
- 小程序的模拟实战学习大乐透数据展示
- android 启动过程的分析
- 学习文档1-测试Blog发布
- random
- Jacoco+Eclipse简单操作
- Lock的await/singal 和 Object的wait/notify 的区别
- 对比两个表名不同但列名相同的表的列的类型与长度
- ssd-face
- 配置mysql的环境变量的详细教程
- 初学Python备忘录