赞
踩
第一章:Android源码解析之Android系统启动整体流程分析
第二章:Android源码解析之Android init进程分析
计算机的硬件包括:CPU,内存,硬盘,显卡,显示器,键盘鼠标等输入输出设备。
计算机中所有的软件都是存放在硬盘中,程序执行时,需要将程序从硬盘上读取到内存中,然后加载到CPU中来运行。
当按下开机键时,内存中什么都没有,因此需要借助某种方式,将操作系统加载到内存中,而完成这项任务的就是BIOS。
BIOS是英文"Basic Input Output System"的缩略语,直译过来后中文名称就是"基本输入输出系统"。
它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序。 其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。
Android是基于Linux系统的。
但是 它没有BIOS程序,取而代之的是BootLoader(系统启动加载器)。
类似于BIOS,在系统加载前,用于初始化硬件设备,最终调用系统内核准备好环境。
在Android中没有硬盘,而是ROM,类似于硬盘存放操作系统,用户程序等。
ROM跟硬盘一样也会划分为不同的区域,用于放置不同的程序,在Android中主要划分为以下几个区域:
路径 | 说明 |
---|---|
/boot | 存放引导程序,包括内核和内存操作程序 |
/system | 相当于电脑C盘,存放Android系统和系统应用 |
/recover | 回复分区。可以进入该分区进行系统回复 |
/data | 用户数据区,包含了用户的数据:联系人、短信、设置、用户安装的程序 |
/cache | 安卓系统缓存区,保存系统经常访问的数据和应用程序 |
/misc | 杂项内容 |
/sdcard | 用户自己的存储区域。存放照片视频等 |
系统启动主要流程:
Android系统启动跟PC相似。
当电源按下时,引导芯片代码从预定义的地方(固化在ROM中)开始执行。加载引导程序BootLoader到RAM,然后执行。
bootloader程序分两个阶段执行。
第一个阶段,检测外部的RAM以及加载对第二阶段有用的程序;
第二阶段,设置网络、内存等等。这些对于运行内核是必要的,为了达到特殊的目标,bootloader可以根据配置参数或者输入数据设置内核。
Linux内核启动时,设置缓存、被保护存储器、计划列表、加载驱动。
当内核完成系统设置时,启动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进程是从C++进入JAVA的关键地方.
其中创建Java虚拟机并为Java虚拟机注册JNI方法,创建服务器端Socket,启动SystemServer进程。
Zygote进程在Init进程中以service的方式启动的,启动部分写在init.rc中.
Zygote进程会启动SystemServer进程.
启动Binder线程池和SystemServiceManager,并且启动各种系统服务。
源代码传送门: /frameworks/base/services/java/com/android/server/SystemServer.java
SystemServer进程启动的AMS会启动Launcher,Launcher启动后会将已安装应用的快捷图标显示到界面上。
源代码传送门:/packages/apps/Launcher3/src/com/android/launcher3/Launcher.java
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。