Android源码解析之Android系统启动整体流程分析
目录
第一章:Android源码解析之Android系统启动整体流程分析
第二章:Android源码解析之Android init进程分析
前言
计算机的硬件包括:CPU,内存,硬盘,显卡,显示器,键盘鼠标等输入输出设备。
计算机中所有的软件都是存放在硬盘中,程序执行时,需要将程序从硬盘上读取到内存中,然后加载到CPU中来运行。
当按下开机键时,内存中什么都没有,因此需要借助某种方式,将操作系统加载到内存中,而完成这项任务的就是BIOS。
BIOS
BIOS是英文"Basic Input Output System"的缩略语,直译过来后中文名称就是"基本输入输出系统"。
它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序。 其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。
Android启动流程
Android是基于Linux系统的。
但是 它没有BIOS程序,取而代之的是BootLoader(系统启动加载器)。
类似于BIOS,在系统加载前,用于初始化硬件设备,最终调用系统内核准备好环境。
在Android中没有硬盘,而是ROM,类似于硬盘存放操作系统,用户程序等。
ROM跟硬盘一样也会划分为不同的区域,用于放置不同的程序,在Android中主要划分为以下几个区域:
路径 | 说明 |
---|---|
/boot | 存放引导程序,包括内核和内存操作程序 |
/system | 相当于电脑C盘,存放Android系统和系统应用 |
/recover | 回复分区。可以进入该分区进行系统回复 |
/data | 用户数据区,包含了用户的数据:联系人、短信、设置、用户安装的程序 |
/cache | 安卓系统缓存区,保存系统经常访问的数据和应用程序 |
/misc | 杂项内容 |
/sdcard | 用户自己的存储区域。存放照片视频等 |
主要流程
系统启动主要流程:
- 启动电源以及系统启动
- 引导程序BootLoader
- Linux内核启动
- init进程启动
- Zygote进程启动
- SystemServer进程启动
- Launcher启动
启动电源以及系统启动
Android系统启动跟PC相似。
当电源按下时,引导芯片代码从预定义的地方(固化在ROM中)开始执行。加载引导程序BootLoader到RAM,然后执行。
引导程序BootLoader
bootloader程序分两个阶段执行。
第一个阶段,检测外部的RAM以及加载对第二阶段有用的程序;
第二阶段,设置网络、内存等等。这些对于运行内核是必要的,为了达到特殊的目标,bootloader可以根据配置参数或者输入数据设置内核。
Linux内核启动
Linux内核启动时,设置缓存、被保护存储器、计划列表、加载驱动。
当内核完成系统设置时,启动init进程。
init进程启动
Android系统以及各大Linux的发行版,他们的Linux内核部分启动过程都是差不多的,他们之间最大的区别就在于init程序的不同,因为init程序决定了系统在启动过程中,究竟会启动哪些守护进程和服务,以及呈现出怎样的一个用户UI界面。
因此,init程序是分析Android启动过程中最核心的程序。
代码传送门:/system/core/init/init.cpp
init程序最核心的工作主要有3点:
1. 创建和挂载一些系统目录/设备节点,设置权限,如:/dev, /proc, and /sys
2. 解析 init.rc 和 init..rc,并启动属性服务,以及一系列的服务和进程。
3. 显示boot logo,默认是“Android”字样
Zygote进程启动
Zygote进程是从C++进入JAVA的关键地方.
其中创建Java虚拟机并为Java虚拟机注册JNI方法,创建服务器端Socket,启动SystemServer进程。
Zygote进程在Init进程中以service的方式启动的,启动部分写在init.rc中.
SystemServer进程启动
Zygote进程会启动SystemServer进程.
启动Binder线程池和SystemServiceManager,并且启动各种系统服务。
源代码传送门: /frameworks/base/services/java/com/android/server/SystemServer.java
Launcher启动
SystemServer进程启动的AMS会启动Launcher,Launcher启动后会将已安装应用的快捷图标显示到界面上。
源代码传送门:/packages/apps/Launcher3/src/com/android/launcher3/Launcher.java
Android源码解析之Android系统启动整体流程分析相关推荐
- Android源码解析(一)动画篇-- Animator属性动画系统
Android源码解析-动画篇 Android源码解析(一)动画篇-- Animator属性动画系统 Android源码解析(二)动画篇-- ObjectAnimator Android在3.0版本中 ...
- Android源码解析--AlertDialog及AlertDialog.Builder
昨天晚上弄到很晚,简单的看了下Dialog的源码,说要分析下建造者模式,在dialog里面的应用其实是在AlertDialog中. 按照惯例,先看类说明: [java] view plaincopy ...
- androidstudio调试android 源码 jni,在android studio下配置gradle用ndk-build和ndk-gbd编译调试JNI...
因为要在旧版android在做一些工作.所以做用到了它.目标平台是:android api 10和armv6. 开发环境是:AS 版本2.3.2; SDK版配android 2.3.3(api10); ...
- Android源码 —— 构建下载Android源码的虚拟机环境(Win7+VMware12+Ubuntu16)
Android源码 -- 构建下载Android源码的虚拟机环境(Win7+VMware12+Ubuntu16) 本文将介绍从Win7系统开始一步步构建下载Android源码的虚拟机环境: **1.使 ...
- 4、Eureka 源码解析 之 Eureka Client 启动原理分析
在前面的一篇文章 3.Eureka 源码解析 之 Eureka Server 启动原理分析当中我们分析了一下 Eureka Server 的启动.在集群环境下 Eureka Server 相互之前需要 ...
- Netty 源码解析系列-服务端启动流程解析
netty源码解析系列 Netty 源码解析系列-服务端启动流程解析 Netty 源码解析系列-客户端连接接入及读I/O解析 五分钟就能看懂pipeline模型 -Netty 源码解析 1.服务端启动 ...
- Zabbix 源码解析之监控项数据采集流程
一.概述 监控项数据采集是一个监控工具最基本的功能,监控数据采集的准确.实时.有效是Zabbix其它监控功能正常运转的前提.因此,Zabbix运维人员有必要了解监控项数据采集流程,并有针对性的设计巡检 ...
- Alian解读SpringBoot 2.6.0 源码(八):启动流程分析之刷新应用上下文(中)
目录 一.背景 1.1.刷新的整体调用流程 1.2.本文解读范围 二.调用后处理器 2.1.调用在上下文中注册为beanFactory的后置处理器 2.2.invokeBeanFactoryPostP ...
- Alian解读SpringBoot 2.6.0 源码(七):启动流程分析之准备应用上下文
目录 一.背景 1.1.run方法整体流程 1.2.本文解读范围 二.准备应用上下文 2.1.整体流程 2.2.设置环境 2.3.应用上下文进行后置处理 2.4.应用所有初始化器 2.5.发布应用上下 ...
- Alian解读SpringBoot 2.6.0 源码(六):启动流程分析之创建应用上下文
目录 一.背景 1.1.run方法整体流程 1.2.本文解读范围 二.创建应用上下文 2.1.初始化入口 2.2.初始化AbstractApplicationContext 2.3.初始化Generi ...
最新文章
- 改进C#代码之24:通过定义并实现接口替代继承
- C++ 输入字符串和string 类型总结
- module 'itertools' has no attribute 'izip'
- 极详细的ECC讲解 -OOB与ECC
- javaScript数据类型(包括基本数据类型和非基本数据类型)
- 华为机试——字符串反转
- ICCV2021 Oral-TAUFacebook提出了通用的Attention模型可解释性
- 笔记--Spring in action
- 数据挖掘应用案例:RFM模型分析与客户细分(转)
- centos下设置自启动和配置环境变量的方法
- android自定义viewgroup实现等分格子布局
- 中国大陆身份证号码验证及身份证信息获取,数据来源于国家标准GB/T 2260-2007
- php webshell 过狗
- 2022年场(厂)内专用机动车辆安全管理考试模拟100题模拟考试平台操作
- 页面可视化搭建工具业界的轮子
- 资料员报考建筑八大员报考建筑资料员工程竣工资料整理的举措
- python英译汉库模块_Python 进阶之路-翻译模块
- JAVA笔记(6)面向对象(上)
- List(双向链表)
- http://bbs.sjz7.com/forum.php,国内 3S 论坛集合(最新)
热门文章
- python是个坑_Python 有什么不为人知的坑?
- less 或 scss 覆盖UI组件样式并集选择器使用
- 在Windows中的“运行”对话框中调整历史记录
- 讯飞语音测评SDK的搭建与运用(Android studio)
- BDrate、BDBR、BDPSNR的计算原理和程序
- Android拓展系列(5)--CyanogenMod源码下载和编译(Android ROM定制基础篇)
- OpenGG.Clean.Player{喜歡看視頻用戶強推}
- 智能挪车v4.8.2-多开版
- Ubuntu窗口过大?按钮都点不到怎么办?
- 服务器如果清理垃圾文件,为citrix服务器清理垃圾文件事件