预备知识 :
1 :RAM
随机存取存储器(random access memory,RAM)又称作“随机存储器”,
是与CPU直接交换数据的内部存储器,也叫主存(内存)。
它可以随时读写,而且速度很快,通常作为操作系统 或 其他正在运行中的程序的临时数据存储媒介
2 :ROM
(只读内存(Read-Only Memory)简称
3 :区别
1和2的区别 :
当电源关闭时RAM不能保留数据。如果需要保存数据,就必须把它们写入
一个长期的存储设备中(例如硬盘)。RAM和ROM相比,两者的最大区别是RAM在断电以后保存在上面的数据会自动消失,而ROM不会自动消失,可以长时间断电保存
4: Zygote作用?
执行Android的应用程序,即apk。
5 :那么,在Linux中创建并运行一个进程,与在Android中通过Zygote来创建并运行一个进程,有何不同?
6 : 内核,是一个操作系统的核心。是基于硬件的第一层软件扩充,提供操作系统的最基本的功能,是操作系统工作的基础,它负责管理系统的进程、内存、
设备驱动程序、文件和网络系统,决定着系统的性能和稳定性
-------------------------------------------------------------------------------------------------
https://blog.csdn.net/h655370/article/details/77727554 总讲,
https://blog.csdn.net/hovan/article/details/10023565 分支,
Android的启动过程可以分为<两个阶段>,,
第一阶段是 第二阶段才是
<Linux的启动> <Android的启动>
阶段 一 : 1 : Boot Rom 引导硬盘
2 :BootLoader 引导加载程序
3 : Kernel 内核
阶段 二 : 4 : init
启动 app_process 通过,JNI_createJavaJvm()
Dalvik VM 再调用方法ZygoteInit.main()
Zygote进程创建完毕
详解 :
Step 1. Boot Rom
当按开机键的时候,引导芯片开始从固化在ROM的预设代码开始执行,然后加载引导程序到RAM。
Step 2. Bootloader
BootLoader,又称为引导程序。它是在操作系统运行之前运行的一段程序,是运行的第一个程序。主要有检查RAM,初始化硬件参数等功能,当然它的最终目的是把操作系统给拉起来。
简单的说,Bootloader负责初始化软件运行所需要的最小硬件环境,最后加载内核到内存。
Step 3. 初始化Kernel
入口的函数是start_kernel函数-----start_kernel 函数完成了内核的大部分初始化工作
start_kernel函数执行到最后调用了reset_init函数进行后续的初始化 ---- reset_init函数最主要的任务就是启动内核线程kernel_init
kernel_init函数将完成设备驱动程序的初始化 ------ 并调用init_post函数启动用户空间的init进程
到init_post函数为止,内核的初始化已经基本完成。
(开始内核,重置初始化,内核初始化,初始化post ------ 内核初始化完成。)
Step 4. init进程 (fork 分叉)
当初始化内核之后,就会启动一个相当重要的祖先进程,也就是init进程。
init进程负责创建系统中最关键的几个核心daemon(守护)进程
init进程负责创建 --- 尤其是zygote和servicemanager
zygote : android启动的第一个dalvik 虚拟机 ,它将负责启动Java世界的进程
1 :RAM
随机存取存储器(random access memory,RAM)又称作“随机存储器”,
是与CPU直接交换数据的内部存储器,也叫主存(内存)。
它可以随时读写,而且速度很快,通常作为操作系统 或 其他正在运行中的程序的临时数据存储媒介
2 :ROM
(只读内存(Read-Only Memory)简称
3 :区别
1和2的区别 :
当电源关闭时RAM不能保留数据。如果需要保存数据,就必须把它们写入
一个长期的存储设备中(例如硬盘)。RAM和ROM相比,两者的最大区别是RAM在断电以后保存在上面的数据会自动消失,而ROM不会自动消失,可以长时间断电保存
4: Zygote作用?
执行Android的应用程序,即apk。
5 :那么,在Linux中创建并运行一个进程,与在Android中通过Zygote来创建并运行一个进程,有何不同?
6 : 内核,是一个操作系统的核心。是基于硬件的第一层软件扩充,提供操作系统的最基本的功能,是操作系统工作的基础,它负责管理系统的进程、内存、
设备驱动程序、文件和网络系统,决定着系统的性能和稳定性
-------------------------------------------------------------------------------------------------
https://blog.csdn.net/h655370/article/details/77727554 总讲,
https://blog.csdn.net/hovan/article/details/10023565 分支,
Android的启动过程可以分为<两个阶段>,,
第一阶段是 第二阶段才是
<Linux的启动> <Android的启动>
阶段 一 : 1 : Boot Rom 引导硬盘
2 :BootLoader 引导加载程序
3 : Kernel 内核
阶段 二 : 4 : init
启动 app_process 通过,JNI_createJavaJvm()
Dalvik VM 再调用方法ZygoteInit.main()
Zygote进程创建完毕
详解 :
Step 1. Boot Rom
当按开机键的时候,引导芯片开始从固化在ROM的预设代码开始执行,然后加载引导程序到RAM。
Step 2. Bootloader
BootLoader,又称为引导程序。它是在操作系统运行之前运行的一段程序,是运行的第一个程序。主要有检查RAM,初始化硬件参数等功能,当然它的最终目的是把操作系统给拉起来。
简单的说,Bootloader负责初始化软件运行所需要的最小硬件环境,最后加载内核到内存。
Step 3. 初始化Kernel
入口的函数是start_kernel函数-----start_kernel 函数完成了内核的大部分初始化工作
start_kernel函数执行到最后调用了reset_init函数进行后续的初始化 ---- reset_init函数最主要的任务就是启动内核线程kernel_init
kernel_init函数将完成设备驱动程序的初始化 ------ 并调用init_post函数启动用户空间的init进程
到init_post函数为止,内核的初始化已经基本完成。
(开始内核,重置初始化,内核初始化,初始化post ------ 内核初始化完成。)
Step 4. init进程 (fork 分叉)
当初始化内核之后,就会启动一个相当重要的祖先进程,也就是init进程。
init进程负责创建系统中最关键的几个核心daemon(守护)进程
init进程负责创建 --- 尤其是zygote和servicemanager
zygote : android启动的第一个dalvik 虚拟机 ,它将负责启动Java世界的进程
servicemanager : 是BInder通信的基础
Step 5. Zygote进程
zygote虚拟机启动子进程 system_server
Step 6. SystemServer进程
这个进程在整个的Android中非常重要,它和Zygote进程一样,是Android Framework层的两大重要进程
例如AMS(ActivityManagerService), WindowsManager, PackageManagerService等等都是由这个SystemServer fork出来的
Step 7. Home Activity
上面ActivityManagerService 开启之后,会调用finishBooting() ,完成引导过程,同时发送 《 开机广播。 》
之后就会启动Home程序,完成系统界面的加载与显示。