0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Android系统启动过程从下往上的一个过程

Dbwd_Imgtec 来源:未知 作者:李倩 2018-04-04 16:12 次阅读

Google官方提供了一张经典的四层架构图,从下往上依次分为:Linux内核、系统库和Android运行时环境、框架层、应用层,其中每一层都包含大量的子模块或子系统。

Android系统启动过程从下往上的一个过程:

Loader - > Kernel - > Native - > Framework - > App

1、Loader

Boot ROM:当手机处于关机状态时,长按Power键开机,引导芯片开始从固化在ROM里的预设出代码开始执行,然后加载引导程序到RAM

Boot Loader:这是启动Android系统之前的引导程序,主要是检查RAM,初始化硬件参数等功能。

2、Kernel

到这里才刚刚开始进入Android系统.

启动Kernel的0号进程:初始化进程管理、内存管理,加载Display,Camera Driver,Binder Driver等相关工作;

启动kthreadd进程(pid=2):是Linux系统的内核进程,会创建内核工作线程kworkder,软中断线程ksoftirqd,thermal等内核守护进程。kthreadd进程是所有内核进程的鼻祖。

Android基于Linux 提供核心系统服务,

例如:安全、内存管理、进程管理、网络堆栈、驱动模型。Linux Kernel也作为硬件和软件之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务。如果你只是做应用开发,就不需要深入了解Linux Kernel层

3、Native

启动init进程(pid=1),是Linux系统的用户进程,init进程是所有用户进程的鼻祖。

init进程启动Media Server(多媒体服务)、servicemanager(binder服务管家)、bootanim(开机动画)等重要服务;

init进程还会孵化出installd(用于App安装)、ueventd、adbd、lmkd(用于内存管理)等用户守护进程;

init进程孵化出Zygote进程,Zygote进程是Android系统的第一个Java进程,Zygote是所有Java进程的父进程,Zygote进程本身是由init进程孵化而来的。

4、Framework

Zygote进程,是由init进程通过解析init.rc文件后fork生成的,Zygote进程主要包含:- 加载ZygoteInit类,注册Zygote Socket服务端套接字;-加载虚拟机;- PreloadClasses;-PreloadResouces。

Zygote进程fork出System Server进程,System Server是Zygote孵化的第一个进程,地位非常重要。

System Server进程:负责启动和管理整个Java framework,包含ActivityManager,PowerManager等服务。

Media Server进程:负责启动和管理整个C++ framework,包含AudioFlinger,Camera Service等服务。

5、App

Zygote进程孵化出的第一个App进程是Launcher,这是用户看到的桌面App;

Zygote进程还会创建Browser,Phone,Email等App进程,每个App至少运行在一个进程上。

所有的App进程都是由Zygote进程fork生成的。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Android
    +关注

    关注

    12

    文章

    3847

    浏览量

    125576
  • RAM
    RAM
    +关注

    关注

    7

    文章

    1314

    浏览量

    113683

原文标题:Android系统架构及启动流程

文章出处:【微信号:Imgtec,微信公众号:Imagination Tech】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    详解STM32启动过程

    本章教程主要跟大家讲STM32H7的启动过程,这里的启动过程是指从CPU上电复位执行第1条指令开始(汇编文件)到进入C程序main()函数入口之间的部分。
    发表于 11-14 11:24 1625次阅读

    Linux和Windows系统启动过程的简单分析

    拷贝到内存的指定位置开始运行,Windows系统启动之后就识别盘符(C,D等盘),再接着的就是启动应用程序,这时就可以看到Windows桌面了。 Linux
    发表于 08-28 11:27

    android--系统启动--init进程启动过程如何

    android--系统启动--init进程启动过程
    发表于 05-29 10:35

    关于Android系统启动的理解

    虽然第2章Android系统启动看得比较晕,但还是想把些总结性的内容做个笔记,加深自己对Android系统启动的理解。1. init进程
    发表于 07-28 07:05

    Android系统启动流程总结

    Android系统是如何启动的?Android系统启动过程是怎样的?
    发表于 10-22 07:14

    FreeRTOS系统启动过程

    FreeRTOS系统启动过程主要分为三部分:汇编部分、main函数初始化部分、开启任务调度部分。对于汇编部分主要是设置些中断向量表、设置堆和栈等些C语言运行需要的条件,当这些部分设置完成时候
    发表于 12-13 07:07

    嵌入式Linux系统的构成和启动过程

    文章目录、嵌入式Linux系统构成二、嵌入式Linux系统启动过程在我们的周围,大量的嵌入式设备都是基于Linux系统来构建的,嵌入式Linux与主机Linux相比有着自己的
    发表于 12-16 06:20

    系统启动过程

    系统启动过程系统启动过程主要由一下几步组成(以硬盘启动为例):1. 开机2. BIOS 加电自检 ( Power On Self Test -- POST ),内存地址为 0ffff:00003. 将硬盘第一个
    发表于 10-11 12:17 2118次阅读

    嵌入式uCLinux内核启动过程分析

    分析uCLinux的启动过程,可以加快系统启动速度、正确建立应用环境。本文要研究的就是uCLinux操作系统内核的启动过程
    发表于 08-15 16:51 730次阅读

    嵌入式系统内核引导启动过程浅析

    嵌入式系统内核引导启动过程浅析
    发表于 10-30 10:26 6次下载
    嵌入式<b class='flag-5'>系统</b>内核引导<b class='flag-5'>启动过程</b>浅析

    走进Linux之systemd启动过程

    Linux系统启动方式有点复杂,而且总是有需要优化的地方。传统的Linux系统启动过程主要由著名的init进程(也被称为SysV init启动系统
    发表于 04-27 19:14 2934次阅读

    MCU和SOC启动过程对比

    :电源->Bootloader(引导操作系统启动)->Linux内核->文件系统(根据功能划分,如div中是硬件,home是工作目录,带访问权限)x86Intel 如winsows OS启动过程:电源 ->BIOS-》windo
    发表于 10-25 19:21 7次下载
    MCU和SOC<b class='flag-5'>启动过程</b>对比

    STM32上电后启动过程

    STM32上电后启动过程
    发表于 11-15 18:21 16次下载
    STM32上电后<b class='flag-5'>启动过程</b>

    stm32启动过程

    一次性搞定stm32启动模式与启动过程一、stm32启动模式二、从flash启动过程2.1 数据在堆栈中存储方式2.2 stm32的正常启动过程
    发表于 12-16 16:57 8次下载
    stm32<b class='flag-5'>启动过程</b>

    logd的启动过程和内容

    logd作为native service,系统启动过程通过读取rc文件来启动,相关的属性定义在如下logd.rc文件中。 2.2.1 logd启动过程 logd启动后会存在三个用来服务
    的头像 发表于 11-23 16:54 343次阅读
    logd的<b class='flag-5'>启动过程</b>和内容