Android系统的启动过程

Android系统启动(一)— init 进程启动过程 Android和Android系统服务。严格来说,Android系统实际是运行在Linux内核之上的一系列“服务进程”,而这些服务进程的“老祖宗”就是init进程。initAndroidPID1Androidinit.rcAndroidinit.rcinitmkdirmountinit.rcZygoteinitLinuxinit.rcinitAndroid 10对init进程的入口函数进行了调整,不再是之前的的main函数,**而是换成了的main。 阅读详情

当我们拿到一台Android的智能手机,从打开开关,到我们可以使用其中的app时,这个启动过程到底是怎么样的?


系统上电

当给Android系统上电,CPU复位之后,程序指针会指向启动地址,从该地址读取启动程序的可执行代码直接运行,或者将可执行代码与数据载入CPU内置的RAM中再运行。

CPU复位,其实就是在电源接通的瞬间,CPU内的寄存器和各引脚均会被置为初始状态,并将程序指针指向引导程序的位置。

这一段代码,放在PC中,叫做BIOS,而在Android等嵌入式系统中就叫做Bootloader。

Bootloader引导程序

通过Bootloader引导程序,可以初始化硬件设备,建立内存空间映射图,为操作系统内核准备好环境,完成整个系统的加载启动任务。    

    

Bootloader是支持交互式操作的,一般刷机中会用到的Fastboot模式,就是在Bootloader启动之后,根据用户输入的指令(在手机上用音量键,Home健等操作),停留在当前状态。

而正常情况下,Bootloader程序执行完成之后,就会开始加载Android操作系统。

加载内核

我们知道Android操作系统的内核其实就是Linux内核。当Bootlader引导程序启动之后,就会进入Linux的内核引导阶段。

引导阶段会初始化内核和设备驱动,接着启动内核,挂载文件系统,最后启动用户空间进程。

Init程序

Init程序是用户空间的第一个进程。它负责解析一个叫做init.rc的配置文件,启动Android系统底层运行的一些服务进程。

init.rc文件定义了不同的Action和Service,其格式如下:

Action

on boot
     ...
     class_start core
     class_start main

Action是以关键字on来定义的,紧接着的boot是一个触发条件,如上面的action表明当Android启动(boot)的时候,要做些什么事情。

Service

service servicemanager /system/bin/servicemanager #声明一个service,而servicemanager则是其名字
     class core                          #optioin, 该service属于core类
     user system                         $option,该service属于System用户
     group System

Service是以关键字servie来定义的,紧跟着的是其名字和其启动的文件,如上面,会执行/system/bin/serviemanager文件,并将其命名为 servicemanager。

如上,Action boot之后的class_start core等,是Init程序在开机时会启动的服务。

这些服务包括ueventd, servicemanager, void, zygote, installd, ril-daemon等,我们一般称它们为守护进程。

Init程序同时也会开启属性服务,存放一些关于Android系统的全局系统设置信息。

最后,当所有的Action和Service都启动完成之后,Init程序就会进入一个无限的循环,监听系统中发生的事件,对一些事件进行处理,比如重启某些服务等。

ServiceManager

ServiceManager是Init程序启动的守护进程之一,它是Android中Binder通信的基础。

ServiceManager提供了注册,检索服务的功能。在zygote子进程system_server(在下面)启动的每一项服务都会将其注册到ServiceManager中,由ServiceManager来统一进行管理。值得注意的是,ServiceManager本身也是一个Service,所以它也会将自己注册到自身上面。

而ServiceManager启动的过程做了三件事:

1)打开Binder设备,把Binder设备映射到内核空间中,由于内核空间是所有进程共享的区域,所以借助这块区域,可以实现不同进程间资源的共享,从而达到进程间通信。

2)ServiceManager本身会变成一个ContextManager,即上面所说的注册到自己身上,负责各种Service的上下文管理。

3)最终ServiceManager也是会进入一个无限循环。

Zygote

Zygote也是由Init程序启动的其中一个服务,但它却是Android世界中的第一个Dalvik虚拟机。在之后,所有的Dalvik虚拟机都是由Zygote孵化出来的,这是因为Android中每一个应用都有着自己的进程,而每一个进程中都着一个Dalvik虚拟机,如果每起一个应用就创建一个虚拟机,效率太低,而通过复制Zygote,不仅可以提高创建的速度,还能够共享系统和框架的资源,可以大幅度提高应用程序启动的速度。

Zygote启动之后

1)首先会创建一个socket,等待某个客户端的请求。

2)接着创建其第一个子进程,叫做system_server。system_server会开启Android系统的Native Service和Java Service。

其中Native Service就是那些利用JNI实现的共享库,而Java Service则是通过Java语言实现的ActivitManagerService等,都是在这个阶段由system_server启动并注册到一个叫ServiceManager的服务进程中。

ActivityManagerService启动之后,会进入到一个叫System Ready的状态,而在其达到System Ready的状态之前呢,就会启动一个叫做Launcher的应用,而这个Launcher就是Android系统启动成功之后见到的Home桌面了。

而在SystemReady的状态,其会跟Zygote启动之初的Socket进行通信,告诉zygote,一切已经就绪。

3)Zygote知道已经启动成功,就开始进入一个无限的循环,在Socket上等待请求的到来。

至此,从手机上电的那一刻起,到加载内核,到最后显示Home桌面的整个过程就结束了,而这篇文章想介绍的也差不多了。

Android系统启动流程(三)解析SyetemServer进程启动过程 上一篇我们学习了Zygote进程,并且知道Zygote进程启动了SyetemServer进程,那么这一篇我们就来学习Android7.0版本的SyetemServer进程。 阅读详情

相关推荐

量子阱技术解析:从基础原理到前沿应用

本文深入解析量子阱技术,从微观“能量游泳池”的基础原理出发,阐释了其通过限制电子实现能级量子化,从而精确调控发光波长的核心机制。文章详细探讨了量子阱在半导体激光器和LED中的革命性应用,如实现低阈值电流与高亮度显示,并展望了其在能带工程及量子级联激光器等前沿领域的发展与挑战。

weixin_29267307的博客 282

Android 启动文件

不能通过adb shell修改的原因:  init.rc 是 rootfs 中的文件,Android 将 rootfs(initramfs) link 到 linux kernel image 中,生成正常启动的boot.img, recovery 模式的 recovery.img.  Android 每次 reboot 的时候 bootloader 都要将 boot.img 加载到ram 中

kks100000的专栏 752

某教育平台线上用户流失分析

本项目基于某教育平台的用户登录信息、用户个人信息以及用户课程学习记录三信息表,挖掘了平台流量以及用户流失等信息。使用python对数据进行预处理,使用tableau进行数据可视化分析。该教育平台正值窗口期,平台流量没有良好的留存水平,但有良好的发展趋势,需要深入分析用户留存率低,做好招新促活营销。该教育平台的基本盘在广东、湖北、河南、贵州等省份,线上教育的潜在用户可能更多分布在线下教育资源不充足、受疫情影响更为严重的地区。

fhy12的博客 1300

android 文件夹架构

一、Android系统文件夹结构 一个完整的ROM根目录会有以下几个文件夹及文件: data META-IN system boot.img 系统目录说明 1. 应用程序安装目录 1) 系统应用程序所在目录 /system/app/*.apk 2)用户安装应用程序所在目录 /data/app/*.apk 3) 注意: a)在模拟器中,每...

weixin_33805743的博客 327

CANoe: Panel的上位机控制方法

本文介绍了不同于IG的报文控制方法,实现了Panel面板的控制模式。

Jonsnow3zz的博客 1407

Unity UGUI深度优化

Unity UGUI优化相关

不定时分享所学所得,包括游戏开发和其他收获! 2717

Android 启动过程 - 从上电到init进程的建立

这里需要注意的是,上述调动过程中,pid是在kernel_thread(kernel_init...)时创建的,do_execve使用新进程覆盖当前进程,pid不变。LoadBootScripts中依次解析多个rc文件,其中,/system/etc/init/hw/init.rc是主文件。在/system/etc/init/hw/init.rc中,启动一系列核心进程和服务,包括重要的zygote进程。/system/etc/init/hw/init.rc被执行后,其他rc文件会被执行。

temp7695的博客 1639

基于YOLOv5s的RK3588多线程部署16FPS暴涨到120FPS 轻量化深度学习部署实战教程(包括性能优化与加速)37

本文介绍了如何在RK3588平台上利用线程池优化YOLOv5模型的推理性能。RK3588内置3个NPU核心,支持多核并行处理。作者设计了一个线程池架构:1个线程负责数据读取,10个线程处理NPU运算,1个线程输出结果。该架构包含任务队列、线程管理和工作线程三个核心组件,通过合理设置线程数、任务队列大小等参数确保性能稳定。文章提供了详细的C++实现代码,包括线程池初始化、任务提交、结果获取等功能模块,并讨论了多线程同步和内存管理的关键技术要点。该方案可显著提升深度学习模型在嵌入式设备上的部署效率。

FJN110的博客 9228

Android系统启动流程

Android系统启动过程及APP的启动过程

Java和Android架构 7290

如何在 DevOps 管道中实现 AI?

AI与DevOps的融合(AIOps)正在重塑软件开发生命周期。本文系统阐述了AI在DevOps中的五大应用场景:智能监控、自动化测试、安全防护、CI/CD优化和事件管理,并提出了六步实施框架:痛点识别、工具选型、流程集成、智能监控、MLOps和治理合规。通过Netflix、Google等企业的实践案例,验证了AI在提升部署效率(降低40%故障率)、缩短问题解决时间(MTTR减少60%)方面的显著价值,同时指出数据质量、模型偏差等实施挑战。研究表明,战略性地

介绍AWS Azure GCP devops Terraform 等技术 497

从登录到应用可见:在 SAP S/4HANA Cloud Private Edition 中创建用户与打通 SAP Fiori 权限的完整思路

在SAP S/4HANA系统中,用户创建远非简单的账号开通,而是涉及认证、授权、数据访问等多维度的复杂过程。用户主数据记录(User Master Record)是系统访问的起点,包含登录方式、角色分配等关键信息。认证解决"你是谁"的问题,授权则决定"你能做什么"。SAP Fiori访问链路涉及Launchpad内容分配、应用启动映射、OData服务权限等多层校验。角色(Role)通过PFCG维护,包含业务目录(Catalog)和空间(Space)等元素,共同构成完整

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 148

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

点云处理实操(四) -PCL中的点云三角化

点云处理实操(四) -PCL中的点云三角化

cangqiongxiaoye的博客 939

【安卓系统笔记】基于android7.1分析android启动过程

开机按Power,正常启动系统,加载boot.img,boot.img包含内核,基本文件系统,用于正常启动手机。 1.引导启动bootloader 开机按组合键可进入相应的模式,fastboot/recovery模式 按开机则正常启动流程。 Bootloader做的事情主要有:初始化CPU时钟,内存,串口等;设置linux启动参数;加载Linux各种各样的内核镜像到SDRAM中。 2.linux内...

Paul的博客 817

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Android系统的启动过程以及APP的启动过程分析

当我们们按下手机的开机按钮,眼睛看到的是绚丽的启动画面,然后是等待着一个我们可以点击的桌面出现。外行看热闹,内行看门道,我们是内行,从开机到显示桌面发生了什么?当点击桌面上的一个图标启动某个app,这里又发生了什么?本文将会按照如下安排来分析Android系统的启动过程以及APP的启动过程。同样,本文并不打算通过分析浩如烟海的源码,那样只会徒增篇幅,而对于Android应用开发工程师而言理解了本文...

藏六七 716

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Android系统启动(四) — Launcher 启动过程

系统启动的最后一步是启动一个应用程序来显示系统中已经安装的应用程序,这个应用程序就叫做Launcher。Launcher在启动过程中会请求返回系统中已经安装的应用程序信息,并将这些信息封装成一个快捷图标列表显示在系统屏幕上,这样用户就可以通过点击这些快捷图标来启动相应的应用程序。通俗的讲,Launcher就是Android系统的桌面,作为Android系统的启动器,用于启动应用程序;作为Android系统的桌面,用于显示和管理应用程序的快捷图标或者其他桌面组件;

xingyu19911016的博客 1万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

描述Android系统的启动过程,Android系统完整的启动过程

Android系统完整的启动过程,从系统层次角度可分为Linux系统层、Android系统服务层、Zygote进程模型三个阶段;从开机到启动 Home Launcher完成具体的任务细节可分为七个步骤,下面就从具体的细节来解读Android系统完整的初始化过程。一、启动BootLoaderAndroid 系统是基于Linux操作系统的,所以它最初的启动过程和Linux一样。当设备通电后首先执行Bo...

weixin_33911375的博客 190

Android开发——Android系统启动以及App启动过程

0.前言从Android手机打开开关,到我们可以使用其中的app时,这个启动过程到底是怎么样的?1.系统上电当给Android系统上电,在电源接通的瞬间,CPU内的寄存器和各引脚均会被置为初始状态,CPU复位之后,程序指针会指向启动地址,从该地址读取并直接运行启动程序的可执行代码,或者将可执行代码与数据载入CPU内置的RAM中再运行。这一段代码,放在PC中,叫做BIOS,而在Andro...

关于Android开发的一些技术点总结 ╮( ̄▽ ̄”)╭ 6038

Android系统的启动过程(三):Launcher启动过程

前两篇文章中我们已经将系统启动的过程推进到了系统服务启动完毕之后,本篇文章就来介绍Android系统启动的最后一步:启动Launcher。这个Launcher我们可以通俗地理解为桌面,系统启动的最后一步就是启动一个应用程序来显示系统中已经安装完成的应用程序,这个应用程序就叫做Launcher。在 Android 系统启动的最后一步,是启动系统的默认桌面(Launcher)。桌面是用户与 Android 设备交互的主要界面,它提供了应用程序图标、小部件、壁纸等元素,使用户可以访问和启动应用程序。Launche

Tai_Monster的博客 6345

Android系统启动过程-uBoot+Kernel+Android

本文是参考大量网上资源在结合自己查看源代码总结出来的,让自己同时也让大家加深对Android系统启动过程有一个更加深入的了解!再次强调,本文的大多数功劳应归功于那些原创者们,同时一些必要的参考链接我会一一附上。注:由于本人采用Exynos4412开发板学习,所以本文大部分资料都是基于此处理器的简介:对于整个Android系统的启动总的来说分为三个阶段:BootLoader引导即uBoot.binlinux内核启动即zImageAndroid系统启动即ramdisk.img与system.img。

domen_pan的博客 3078

描述Android系统的启动过程,Android系统启动过程

Android启动linux内核过程:init 进程启动 -> Native服务启动 -> System Server/Android 服务启动 -> Home 启动init进程启动:源文件目录:system/core/init/init.cint main(int argc, char **argv){int fd_count = 0;struct pollfd ufds[4...

weixin_39742065的博客 94

安卓和linux系统启动过程

liushengdi110的专栏 411

Android 面试必备 - 系统、App、Activity 启动过程(1),一次违反常规的安卓大厂面试经历

实模式和保护模式的概念再次不做过多解释,读者可以自行查阅资料。三、启动Init进程当系统内核加载完成之后,会首先启动Init守护进程,它是内核启动的第一个用户级进程,它的进程号总是1。Init进程启动完成之后,还负责启动其他的一些重要守护进程,包括:Usbd进程(USB Daemon):USB连接后台进程,负责管理USB连接。adbd 进程(Android Debug Bridge Daemon):ADB连接后台进程,负责管理ADB连接。

m0_60607245的博客 920

安卓系统启动过程

韩梦飞沙 yue31313 韩亚飞 han_meng_fei_sha 313134555@qq.com   android启动图示 ==== 当你按下电源开关后Android设备执行了以下步骤。 此处图片中step2中的一个单词拼写错了,Boot Loaeder应该为Boot Loader ==== 第一步:启动电源以及系统启动 当电源按

韩梦飞沙_韩亚飞 507

Android 系统的启动过程

Framework层的启动流程在Android系统中涉及多个关键组件和交互。这些组件共同协作,确保系统的正常运行和应用程序的启动。需要注意的是,Framework层的启动流程是一个复杂且高度交互的过程,涉及多个组件和服务。上述只是其中一些主要的组件和交互,实际上还有许多其他细节和子组件参与其中。在Android系统中是一个复杂且关键的过程,涉及多个组件和服务的启动、初始化以及相互交互。

a546036242的博客 1461

Android系统启动过程

和和。Android 系统启动过程现在我们来梳理下 Android 系统的启动过程。Android 启动过程还是比较重要的,因为在这个过

夜游神 1752
上一篇: 由Git的SSH公钥到非对称加密
下一篇: Android学习小Demo(21)ListView的联动选择
linmiansheng
博客等级 码龄20年 507粉丝 111原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值