Android -- Android设备的启动流程概述

android lcd流程,todo高通Android UEFI中的LCD分析(1):启动流程分析 todo高通Android UEFI中的LCD分析(1):启动流程分析# 高通Android UEFI中的LCD分析(1):启动流程背景之前学习的lk阶段点亮LCD的流程算是比较经典,但是高通已经推出了很多种基于UEFI方案的启动架构。所以需要对这块比较新的技术进行学习。同事遇到了一个UEFI阶段LCD显示异常,而kernel正常的问题;但我解决不了。分析在高通UEFI架构中,通过Protocol... 阅读详情

Android -- Android设备的启动流程概述


最近回过头来在看Android系统的启动、及初始化流程,先把一些内容记录下来,以供自己后续回忆、查阅。


Init进程是Linux内核启动后创建的第一个用户进程,地位非常重要。Init进程在初始化过程中会启动很多重要的守护进程。

从系统角度看,Android的启动过程可分为bootloader引导、装载和启动Linux内核、启动Android系统3个大阶段。其中Android系统的启动还可以细分为启动Init进程、启动Zygote进程、启动SystemService、启动SystemServer、启动Home等多个阶段。

(1)BootLoader引导
当按下手机电源键时,最先运行的就是bootloader。bootloader主要的作用就是初始化基本的硬件设备(CPU、内存、Flash等)并且通过建立内存空间映射,为装载Linux内核准备好合适的环境。一旦Linux内核装载完毕,bootloader将会从内存中清除。

如果用户在Bootloader运行期间,按下预定义的组合键,可以进入系统的更新模块。Android的下载更新可以选择进入fastboot模式或者recover模式。
fastboot是Android设计的一套通过USB更新手机分区映像的协议,方便开发人员能快速更新指定的手机分区。recovery模式是Android特有的升级系统。利用recovery模式,手机可以进行恢复出厂设置或者执行OTA、补丁和固件升级。进入Recovery模式实际上是启动了一个文本模式的Linux。

(2)装载和启动Linux内核
Android的boot.img存放的就是Linux内核和一个根文件系统。bootloader会把boot.img映像装载进内存。然后Linux内核会执行整个系统的初始化,完成装载根文件系统,最后启动Init进程

(3)启动Init进程
Linux内核加载完毕后,会首先启动Init进程,Init进程是系统的第一个进程。在Init进程的启动过程中,会解析Linux的配置脚本init.rc文件。根据init.rc文件的内容,Init进程会装载Android的文件系统、创建系统目录、初始化属性系统、启动Android系统重要的守护进程,这些进程包括USB守护进程、adb守护进程、vold守护进程等。Init进程也会启动ServiceMananger,它主要用来管理Binder服务,负责系统中所有Binder服务的注册和查询。
最后Init进程也会作为守护进程来执行属性修改请求,重启崩溃的进程等操作。

(4)启动Zygote进程
Init进程启动完成后,就会启动Zygote进程。Zygote负责fork出Android的应用进程,是所有应用进程的父进程。Zygote进程初始化时会创建虚拟机、预装载系统的资源文件和Java类。所有从Zygote进程fork出的用户进程将继承和共享这些预加载的资源,不浪费时间重新加载,加快了应用程序的启动过程。启动结束后,Zygote进程也会变为守护进程,负责响应启动apk应用程序的请求。

(5)启动SystemServer
SystemServer是Zygote进程fork出的第一个进程,也是Android系统的核心进程。SystemServer会启动大部分Android中重要的Binder服务和所有的Java核心服务。

(6)其他的Native服务
Init进程解析init.rc配置文件时,会启动其他的重要的本地Binder服务,如MediaServer等等。

(7)启动Launcher
SystemServer加载完所有的Java服务后,最后会调用ActivityManagerService的SystemReady()方法。在这个方法的执行中,会发出Intent”android.intent.category.HOME“。凡是响应这个Intent的apk都会运行起来,Launcher应用是Android系统默认的桌面应用,一般只有它会响应这个Intent,因此,系统开机后,第一个运行的应用就是Launcher。

待续......

Android 5.0 Camera系统源码分析(1):CameraService启动流程 本文将分析android系统源码,从frameworks层到hal层,暂不涉及app层和kernel层。由于某些函数比较复杂,在贴出代码时会适当对其进行简化。本文属于自己对源码的总结,仅仅是贯穿代码流程,不会深入分析各个细节。Android的各个子模块的启动都是从它们的Service的启动开始的,所以我们将从CameraService的启动开始分析。CameraService的启动就在MediaServer的main函数中,代码路径在:frameworks/av/media/mediaserver/main 阅读详情

相关推荐

Android Framework学习——安卓系统启动流程(Android 13)

提示:本文仅作个人学习记录,禁止转载无论是安卓应用开发,还是安卓framework开发,在面试中总是会被问到framework相关的知识,系统启动流程已然成为高频提问点之一,以前对系统启动流程的认识停留在其他人口口相传、博客上的简要总结及流程图,接下来我将根据源码主要流程进行梳理,总结安卓系统启动这一过程的主要步骤。因为关注的重点是Java API Framework层的流程(如下图绿色部分),所以在这之前的流程会简略概括。在关机状态长按电源键,引导芯片程序(固化在rom中)开始运行;

qq_31190665的博客 2406

Android---系统启动流程

1. init 根据 init.rc 运行 app_process,并携带“-zygote" 和"-startSystemServer"参数。2. AndroidRuntime.cpp::start() 里将启动 JavaVM,并且注册所有 framework 相关的系统 JNI 接口3. 第一次进入 Java 世界,运行 ZygoteInit.java::main() 函数初始化 Zygote,并创建 Socket 的 Server 端。

qq_44950283的博客 3294

Android开机启动流程

在Android,Binder也是Android里面的进程通信的主要方式。Android开机时很久的两个主要原因一个是启动80多种服务(如ActivityManagerService),另一个原因是去获取手机所有app的信息,并重新安装一遍,这个过程是很耗时。总的来说,首先有一个线程在不断的监听屏幕,一旦有触摸事件,就将事件捕获并通过WMS的InputChannel知道是哪个Windows的,然后分发指定的Windows处理;常见的操作系统有Windows,Android,Linux,MacOS。

yuanqiyuanluo2014的博客 3689

Android系统启动流程

init进程是Android系统中用户空间的第一个进程(pid=1),它是用户进程的鼻祖,负责孵化各种属性服务、守护进程也包括非常重要的Zygote。init进程是由多个源文件共同组成的,这些文件位于源码目录system/core/init。本文将基于Android7.0源码来分析Init进程。二。

Dream It Possible 5958

高通Android12启动流程分析

请注意,这个流程可能会根据不同的硬件平台、Android版本和制造商的定制有所变化。上述步骤提供了一个高通Android设备从上电到操作系统完全启动的一般概述。

hyg55555的博客 2786

Android的启动流程分析

Android的启动流程分析

Android应用开发工程师 2090

安卓开机启动流程

安卓开机启动流程

似霰的博客 4880

emir分析RC corner如何选择

power analysis阶段 RC corner的选择

weixin_61954252的博客 3592

安卓启动流程概述(一)

安卓启动流程概述(一) Android的启动流程为:Boot Rom -> Boot Loader -> Linux Kernel -> Init -> Zygote -> SystemServer -> Launcher BootLoader层 1)Boot Rom是嵌入处理器芯片内的一小块掩模ROM或写保护闪存。它包含处理器在上电或复位时执行的第一个代码。根据某些带式引脚或内部保险丝的配置,它可以决定从哪里加载要执行的代码的下一部分以及如何或是否验证其正确性或有效性

qq_43453926的博客 1537

RV1106G3的AOV下的yolov5调试记录

本文介绍了基于LuckFoxPicoMax开发板的RV1106芯片调试经验,重点包括AOV(Always-On Vision)和Yolov5目标检测的实现。在硬件方面,板载1TOPS NPU、256MB内存,并更换为SPI NOR存储。软件调试涉及MK配置文件修改、设备树调整(按键唤醒和sensor配置)以及程序自启动设置。Yolov5模型优化为320*320尺寸,推理时间约45ms。系统采用VI采图与AI识别通过共享内存通信的方案,实测功耗在20-35mA范围。文章还指出了当前存在的功耗优化、ISP调试等

fzktongyong的博客 1712

基于PTB-XL数据集的深度学习心电信号分类

心电信号的分析与处理是心血管疾病诊断的重要手段。该领域的主要工作领域是分类,它越来越多地得到基于机器学习的算法的支持。在这项工作中,开发了一个深度神经网络来自动分类初级心电信号。这项研究是在PTB-XL数据库中包含的数据上进行的。提出了三种神经网络架构:第一种基于卷积网络,第二种基于SincNet,第三种基于卷积网络,

weixin_55121617的博客 7007

Android启动:Linux启动流程

发现一个介绍Android启动的系列文章,正文如下: ================================================================================================================= 1 Bootloader 对于一般的ARM处理器,CPU上电或复位执行第一条指令所在地址,即第一段程

人生若只如初见 5527

SRv6第二弹:SRv6基本概念

在SRv6网络编程中,不同的转发行为由不同的Function来标识,例如在RFC中定义了公认的End、End.X、End.DX4、End.DX6等。例如:R3使用报文的IPv6目的地址FC03::3查找Local SID表,命中到End SID,随后R3将报文SL减1,同时将SL=1的SID做为报文目标IPv6地址,并查路由表转发出去。SID支持静态配置或者动态分配,end-op、end、end.x、end-dt4、end-dt6、end-dx2推荐静态配置 ,便于网络运维,其他的SID可以动态分配。

wbyyy的博客 4247

Android 启动过程

init is the first process after kernel started. The corresponding source code lies in: device/system/init. It does the following tasks step by step: 1.       Initialize log system. 2.

710

未来计算的革命:探索存算一体芯片的潜力与挑战

未来计算的革命:探索存算一体芯片的潜力与挑战

jtwqwq的博客 1611

最优控制理论 二+、哈密尔顿函数法的补充

本章基于变分法所推出的哈密尔顿函数法,2、讨论了积分方程约束的转化、控制+状态等式约束的一阶必要条件。3、控制分段连续、状态存在内点约束等情况下的角点条件,给出了协态变量和哈密尔顿函数在内点处不连续的表达式。...

MSysの优快云 9394

【安卓逆向系列】安卓的启动流程

【最后步骤很关键,重新启动init的过程也讲加载的权限进一步降低,在整个第一阶段都是以权限极高的kernel执行,转化为init域后权限降低,更为安全,这个就是SELinux安全策略的作用】主要的功能是设置了虚拟机的参数,利用了很多的parseRuntimeOption函数(对于不同的软硬件环境,函数的参数往往需要调整、优化,从而使系统达到最佳性能)所有的app进程都是由zygote进程fork而来的。进程(翻译为受精卵,此进程也称为安卓的应用进程孵化器,是所有应用进程的父进程)对于此孵化进程,他会加载。

xianyu_yuan的博客 1318

VS2019项目使用CGAL6.1配置教程详细步骤

在VS2019项目中使用CGAL详细步骤

插件开发 331

Android N 的开机启动流程概述

前言做android开发已经好些年头,一直对android系统的开机启动流程一知半解。前前后后看了不少文章和源码,在这里把自己的一些总结记录下来,也算是加深自己的理解。

h655370的博客 1万+

这20个网络工程项目经验,帮我跳槽加薪不止一次

嘿,大家好,我是圈圈,一个在网络工程圈子里混了十多年的老鸟。从国企的网管起步,到现在给大厂做顾问,我见过太多简历:有的光鲜亮丽,证书一堆,但一聊项目,就露怯;有的简历朴实,但列出的项目经验让人眼前一亮,直接拿offer。为什么?因为招聘官最看重实战。理论谁都会背,项目经验才是你的“硬通货”。尤其在网络工程这行,项目不光证明你的技能,还展示你解决问题的能力。今天,我就分享20个我亲身经历或见过的网络工程项目经验。每个都值得写进简历,不是吹牛,这些项目帮我跳槽加薪不止一次。

网络技术联盟站 432

基于51单片机光电测转速调速系统设计

本设计由STC89C52单片机电路+液晶LCD1602显示电路+光电测速(槽型光耦)电路+电源电路组成。1、通过光电传感器测速,光电传感器检测轮盘上的孔数进而知道轮盘转了多少周。2、LCD1602液晶实时显示转速。资料内容:程序源码 电路图 任务书 答辩技巧 开题报告 参考论文 系统框图 程序流程图 使用到的芯片资料 器件清单

Android 安卓启动流程

android

u010783226的专栏 3700

本工程是一个基于OpenSSL实现的AES-CBC 128 加密的C++生成DLL的程序源码,适用于在CANoe和CAPL中计算AES

本工程是一个基于OpenSSL实现的AES-CBC 128 加密的C++生成DLL的程序源码,内容有两个工程,一个工程是创建CANoe诊断控制台中可用的seedkey.dll,另一个是创建在CAPL脚本中可用的AES加密DLL,每个工程都分别包含x86和x64平台。

上一篇: Android -- 使用Binder API实现一个简单服务
下一篇: Android -- init.rc配置文件简介
第一序列丶
博客等级 码龄11年 249粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值