Android 启动流程代码分析

前言

做过接近两年的android,特整理文档。第一篇,先了解android系统的启动流程。主要讲的是从init进程开始。主要讲的是基于Android M的开机启动流程介绍,当然也会分析下Android N版本的启动流程。

Android 系统的平台架构

Android 系统的底层是建立在Linux系统之上,该平台是由应用层(System apps),应用框架层(framework),系统运行库层(C/C++程序库和Android运行时库ART),硬件抽象层(HAL),Linux 内核层构成。

做应用开发的同学,手上肯定有一本书叫做 《android疯狂讲义》,在这本书的一开始就贴出了这张android系统的体系架构图。每一歌部分的功能不再做介绍,有兴趣的同学可以自行查询。

而android的启动流程大体分为三个阶段,1 bootloader引导 2 启动Kernel 3 启动Android 细分如下图所示

第一步:启动电源以及系统启动

    当电源按下,引导芯片代码开始从预定义的地方(固化在ROM)开始执行。加载引导程序到RAM,然后执行。

第二步:系统引导

    相关代码在(bootable\bootloader)

    加电后,CPU先执行bootloader程序,正常启动系统,加载boot.img,boot.img中包含内核。

第三步 :内核kernel

    由bootloader加载kernel,kernel经自解压、初始化、载入built-in 驱动程序完成启动。Kernel启动后会创建若干内核线程(kernel thread),之后装入并执行程序/sbin/init/,载入init process,切换至user-space。
     内核启动时,设置缓存、被保护存储器、计划列表,加载驱动。当内核完成系统设置,它首先在系统文件中寻找”init”文件,然后启动root进程或者系统的第一个进程。

第四步 :Init 进程启动

Android 从linux 系统启动有4个步骤: 1.Init  进程启动 2. Zygote服务启动 3. System server.android服务启动 4. HOME启动

Init进程,是第一个由内核启动的用户级进程。用户自行启动(已经被载入内存,开始运行,并已初始化所有设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。Init始终是第一个进程。我们可以说它是root进程或者说有进程的父进程。init进程有两个责任,一是挂载目录,比如/sys、/dev、/proc,二是运行init.rc脚本。
Init 进程启动后,根据Init.rc和init.xxx.rc的脚本文件建立基本服务。

猜你喜欢

转载自blog.csdn.net/weixin_31607113/article/details/81631744