android启动流程

news/2024/11/23 13:11:35/

BootROM 这个固化在rom里

Bootloader 启动kernel前的准备工作,包括正常启动与recovery,烧写等不同做出判断

启动kernel会传些参数

重点是android启动流程

1. 驱动加载

 比如usb, light, audio, camera, bt, wifi等

2. init  见system/core/init/init.cpp main()

两个阶段

第一个阶段,mkdir, mount分区

第二个阶段, selinux, log, property, start srevice

其中比较重要的有 servicemanager,zygote

/system/core/rootdir/init.zygote64.rc

  重要日志,见

init    : init first stage started!
init    : Loading SELinux policy
init    : init second stage started!
init    : Parsing file /init.rc

Parsing file /init.environ.rc
Parsing file /init.usb.rc
Parsing file /init.m7642.rc

Parsing file /init.zygote32.rc

Parsing file /system/etc/init/audioserver.rc
Parsing file /system/etc/init/bootanim.rc
Parsing file /system/etc/init/cameraserver.rc
Parsing file /system/etc/init/hwservicemanager.rc
Parsing file /system/etc/init/logcatd.rc
Parsing file /system/etc/init/netd.rc
Parsing file /system/etc/init/vold.rc
Parsing file /system/etc/init/wificond.rc
Parsing file /vendor/etc/init/android.hardware.bluetooth@1.0-service.rc
Parsing file /vendor/etc/init/vndservicemanager.rc

starting service 'ueventd'
starting service 'console'
starting service 'servicemanager'
starting service 'hwservicemanager'
starting service 'vndservicemanager'

init    : starting service 'zygote'.

init    : starting service 'audioserver'...
init    : starting service 'surfaceflinger'...
init    : starting service 'thermalservice'...
init    : starting service 'wificond'...

init    : starting service 'bootanim'... 这个是我们看到的启动动画,通常显示公司logo.

3. android Java层七档

zygote会启动systemServer

/frameworks/base/services/java/com/android/server/SystemServer.java

 startBootstrapServices()  //Installer,DeviceIdentifiersPolicyService,ActivityManagerService,PowerManagerService,RecoverySystemService,LightsService,DisplayManagerService,PackageManagerService,UserManagerService,OverlayManagerService

startCoreServices() //BatteryService,UsageStatsService,WebViewUpdateService,BinderCallsStatsService

startOtherServices();

这个过程会有类似日志

----- Boot animation finish -----
wm_boot_animation_done: 24345
SystemServiceManager: Starting phase 1000

PHASE_BOOT_COMPLETED

此时会再次调用init.rc里的类似下面

init    : processing action (sys.boot_completed=1) from (/init.rc:727)
init    : processing action (sys.boot_completed=1) from (/vendor/etc/init/hw/init.m7642.rc:333)

ActivityManager会启动home(launcher)

ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000100 cmp=.....desktop/.MainActivity} from uid 0

下面是一篇比较好的文章

Android系统启动流程_android启动流程-CSDN博客


http://www.ppmy.cn/news/1296457.html

相关文章

URL编码揭秘:为什么要进行URL编码?

URL(Uniform Resource Locator,统一资源定位符)是互联网上资源地址的唯一标识符。在网络请求和数据传输过程中,URL编码起着至关重要的作用。 URL编码解码 | 一个覆盖广泛主题工具的高效在线平台(amd794.com) https://amd794.com…

Educational Codeforces Round 154 (Rated for Div. 2) (VP-8,寒假加训)

VP时间 A. 这个字符串所表示是数字为质数 17,71 wa2发 3.ac B. 看一个数字是什么(是0) 开始遍历找到最后一个0 这块区域肯定可以一样 然后比较后面的 000101 010111 这例子可以说明应该枚举0,1之间然后让模拟一下 如…

CPU算力分配(100用例)C卷 (JavaPythonC语言C++Node.js)

现有两组服务器A和B,每组有多个算力不同的CPU,其中A[i]是A组第i个CPU的运算能力,B[i]是B组第i个CPU的运算能力,一组服务器的总算力是各CPU的算力之和。 为了让两组服务器的算力相等,允许从每组各选出一个CPU进行一次交换,求两组服务器中,用于交换的CPU的算力,并且要求从…

MySQL将多条数据合并成一条的完整示例

数据库中存的是多条数据,展示的时候需要合并成一条 数据表存储形式如下图 以type分组,type相同的算一条,且保留image和link的所有数据,用groupBy只保留一条数据 解决方案:用GROUP_CONCAT 完整语法如下 group_concat…

借名买房合同的效力

此前司法实践对借名买房合同效力的认定较为统一,即借名买房合同无效主要系因行为人恶意串通、通谋虚伪意思表示,或者借名购买的房屋为经济适用房等保障性住房。借名买房鲜少因悖俗而无效。2020年12月26日最高人民法院作出(2020)最…

GO 配置国内镜像代理 Go Module代理仓库服务

用法 Go 1.13 及以上(推荐) 打开你的终端并执行 $ go env -w GO111MODULEon $ go env -w GOPROXYhttps://goproxy.cn,directmacOS 或 Linux 打开你的终端并执行 $ export GO111MODULEon $ export GOPROXYhttps://goproxy.cn或者 $ echo "expo…

Azure Machine Learning - 人脸识别任务概述与技术实战

Azure AI 人脸服务提供了可检测、识别和分析图像中的人脸的 AI 算法。 人脸识别软件在许多不同情形中都十分重要,例如识别、无接触访问控制和实现隐私的人脸模糊。你可以通过客户端库 SDK,或者直接调用 REST API 使用人脸服务。 目录 一、人脸识别服务场…

DSP2335的时钟PLL配置

PLL模块框图 xclkin是直接进来的外部时钟; 而下面的是振荡器(晶振出来)的时钟 PLLSTS 锁相环状态寄存器 PLLCR 锁相环控制寄存器 PLLSTS【oscoff】 决定着外部时钟的输入 PLLSTS【plloff】 锁相器关闭位 0使能PLL 锁相环控制寄存器…