目录

第一章: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系统启动整体流程分析相关推荐

  1. Android源码解析(一)动画篇-- Animator属性动画系统

    Android源码解析-动画篇 Android源码解析(一)动画篇-- Animator属性动画系统 Android源码解析(二)动画篇-- ObjectAnimator Android在3.0版本中 ...

  2. Android源码解析--AlertDialog及AlertDialog.Builder

    昨天晚上弄到很晚,简单的看了下Dialog的源码,说要分析下建造者模式,在dialog里面的应用其实是在AlertDialog中. 按照惯例,先看类说明: [java] view plaincopy ...

  3. 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); ...

  4. Android源码 —— 构建下载Android源码的虚拟机环境(Win7+VMware12+Ubuntu16)

    Android源码 -- 构建下载Android源码的虚拟机环境(Win7+VMware12+Ubuntu16) 本文将介绍从Win7系统开始一步步构建下载Android源码的虚拟机环境: **1.使 ...

  5. 4、Eureka 源码解析 之 Eureka Client 启动原理分析

    在前面的一篇文章 3.Eureka 源码解析 之 Eureka Server 启动原理分析当中我们分析了一下 Eureka Server 的启动.在集群环境下 Eureka Server 相互之前需要 ...

  6. Netty 源码解析系列-服务端启动流程解析

    netty源码解析系列 Netty 源码解析系列-服务端启动流程解析 Netty 源码解析系列-客户端连接接入及读I/O解析 五分钟就能看懂pipeline模型 -Netty 源码解析 1.服务端启动 ...

  7. Zabbix 源码解析之监控项数据采集流程

    一.概述 监控项数据采集是一个监控工具最基本的功能,监控数据采集的准确.实时.有效是Zabbix其它监控功能正常运转的前提.因此,Zabbix运维人员有必要了解监控项数据采集流程,并有针对性的设计巡检 ...

  8. Alian解读SpringBoot 2.6.0 源码(八):启动流程分析之刷新应用上下文(中)

    目录 一.背景 1.1.刷新的整体调用流程 1.2.本文解读范围 二.调用后处理器 2.1.调用在上下文中注册为beanFactory的后置处理器 2.2.invokeBeanFactoryPostP ...

  9. Alian解读SpringBoot 2.6.0 源码(七):启动流程分析之准备应用上下文

    目录 一.背景 1.1.run方法整体流程 1.2.本文解读范围 二.准备应用上下文 2.1.整体流程 2.2.设置环境 2.3.应用上下文进行后置处理 2.4.应用所有初始化器 2.5.发布应用上下 ...

  10. Alian解读SpringBoot 2.6.0 源码(六):启动流程分析之创建应用上下文

    目录 一.背景 1.1.run方法整体流程 1.2.本文解读范围 二.创建应用上下文 2.1.初始化入口 2.2.初始化AbstractApplicationContext 2.3.初始化Generi ...

最新文章

  1. 改进C#代码之24:通过定义并实现接口替代继承
  2. C++ 输入字符串和string 类型总结
  3. module 'itertools' has no attribute 'izip'
  4. 极详细的ECC讲解 -OOB与ECC
  5. javaScript数据类型(包括基本数据类型和非基本数据类型)
  6. 华为机试——字符串反转
  7. ICCV2021 Oral-TAUFacebook提出了通用的Attention模型可解释性
  8. 笔记--Spring in action
  9. 数据挖掘应用案例:RFM模型分析与客户细分(转)
  10. centos下设置自启动和配置环境变量的方法
  11. android自定义viewgroup实现等分格子布局
  12. 中国大陆身份证号码验证及身份证信息获取,数据来源于国家标准GB/T 2260-2007
  13. php webshell 过狗
  14. 2022年场(厂)内专用机动车辆安全管理考试模拟100题模拟考试平台操作
  15. 页面可视化搭建工具业界的轮子
  16. 资料员报考建筑八大员报考建筑资料员工程竣工资料整理的举措
  17. python英译汉库模块_Python 进阶之路-翻译模块
  18. JAVA笔记(6)面向对象(上)
  19. List(双向链表)
  20. http://bbs.sjz7.com/forum.php,国内 3S 论坛集合(最新)

热门文章

  1. python是个坑_Python 有什么不为人知的坑?
  2. less 或 scss 覆盖UI组件样式并集选择器使用
  3. 在Windows中的“运行”对话框中调整历史记录
  4. 讯飞语音测评SDK的搭建与运用(Android studio)
  5. BDrate、BDBR、BDPSNR的计算原理和程序
  6. Android拓展系列(5)--CyanogenMod源码下载和编译(Android ROM定制基础篇)
  7. OpenGG.Clean.Player{喜歡看視頻用戶強推}
  8. 智能挪车v4.8.2-多开版
  9. Ubuntu窗口过大?按钮都点不到怎么办?
  10. 服务器如果清理垃圾文件,为citrix服务器清理垃圾文件事件