探索Android之路,移动端:智能手机已成为人们日常机不离手的一个状态。今天来略微浅谈一下Android启动过程
启动过程:引导芯片执行rom中预设代码、加载引导程序到RAM、Boot Loader(解bl锁就是指这里)、Linux内核层、HAL(硬件抽象层、Java Framework访问的时候用到,无非是来访问硬件而已,越到上层越抽象)、init进程启动(init.cpp)、Zygote进程启动(所有用户进程的鼻祖)、系统服务进程、启动框架和用户界面、应用程序启动
总体过程:底层Linux Kernel为基础、上层为用户空间:Natvie C/C++系统库、Android运行环境(ART)、Java API Framework,C/C++层与Java层交互采用JNI,这里和Windows系统加载DLL库类似,底层和用户层调用为Syscall。其实到这里和Windows系统分层类似了
摘录gityuan的一张图:
用户态
System Apps
主要是应用层程序了
Java Framework
加载ZygoteInit类,加载虚拟机、预加载preloadClass、预加载资源preloadResources
创建System Server进程
C/C++ Framework(Native)
Native创建进程init,是用户进程的最高进程
init进程会创建uenvetd、logd、installd、adbd等守护进程(Android系统必须用到的服务)、
Zygote进程很重要
init进程会创建Zygote进程,是Android系统的第一个Java进程(虚拟机进程),是所有Java的父进程
内核态
Linux Kernel
Linux内核启动进程
swapper,是第一个进程。用于初始化进程管理、内存管理、加载驱
kthreadd,是Linux的系统的内核进程,创建内核work线程kworkder,等内核守护进程
Boot Loader
引导芯片从固化在ROM的预设代码执行,引导程序到RAM。检查RAM,初始化硬件参数
Android、Linux、IOS、Windows系统都相当类似,Windows系统(设计最繁琐)学的差不多。其余的也差不多少了