首页 > 其他分享 >Android 自启动过程学习

Android 自启动过程学习

时间:2024-03-26 14:00:14浏览次数:28  
标签:启动 学习 进程 init 内核 自启动 Android BootLoader

Android 系统启动流程

Summary

  1. 启动电源以及系统启动
    1. 当设备通电时,引导芯片代码从预定义的地方开始执行。引导程序 BootLoader 到 RAM,然后执行。
  2. 引导程序 BootLoader
    1. 引导程序 BootLoader 时安卓操作系统开始运行前的一个小程序,主要是将系统的 OS 拉起来并运行。
  3. Linux 内核启动
    1. 当内核启动时,设置缓存,被保护寄存器,计划列表,加载驱动。在内核完成系统设置后,它首先在系统文件中寻找 init.rc,并启动 init 进程
  4. init 进程启动
    1. 初始化和启动服务属性,并且启动 Zygote 进程
  5. Zygote 进程启动
    1. 创建 Java 虚拟机并为 Java 虚拟机注册 JNI 方法,创建服务端 Socket,启动 SystemServer 进程
  6. SystemServer 进程启动
    1. 启动 Binder 线程池和 SystemServiceManager,并且启动各种服务。
  7. Lanucher 启动
    1. 被 SystemServer 进程启动的 AMS 会的启动 Launcher,Launcher 启动会将已安装应用的快捷图标显示到界面上。

一、启动 BootLoader

  1. 当用户按下开机键,引导芯片代码开始从预定义的地方(固定在 ROM)开始执行,加载 BootLoader 到内存中执行
  2. BootLoader 是操作系统内核运行之前的一小段程序,通过这段小程序初始化硬件设备,建立内存空间映射区,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做正确的环境准备,最后目标是将系统 OS 拉起并运行。
  3. 整个系统的加载任务都是由 BootLoader 完成的

二、加载系统内核

  1. 当系统内核启动时,设置缓存,被保护寄存器,计划列表,加载驱动。
  2. 在内核完成系统设置后,它首先在系统文件中寻找 init.rc,并启动 init 进程。

三、启动 init 进程

  1. init 进程是 Android 系统启动后,由内核启动的第一个用户级进程,其进程号总是 1
  2. Android 中所有进程都是由 init 进程创建并运行的。

四、启动 Zygote

  • 在 init 进程和一些重要的守护进程启动,系统启动 Zygote。

五、SystemServer 启动

  • 启动Binder线程池和SystemServiceManager,并且启动各种服务。

六、Launcher启动

  • 被SystemServer进程启动的AMS会启动Launcher,Launcher启动后会将已安装应用的快捷图标显示到界面上。

参考链接

标签:启动,学习,进程,init,内核,自启动,Android,BootLoader
From: https://www.cnblogs.com/wanghao-boke/p/18096526

相关文章

  • qt_Opencv (学习笔记) - 隐身术
    我们前面一起学习了Opencv库中的一些函数并且做了一个小练习,想必大家对Opencv库有了一定的了解。接下来让我来带着大家来完成今天的小项目吧!有了前面几个文章的基础,我们接下来来实现“隐身术”就比较简单了。先让我来展示一下隐身术的效果吧!我们想要实习隐身术,首先我们......
  • Android证书校验出现java.io.IOException: Invalid keystore format错误的解决方案
    使用下面命令keytool-list-v-keystore签名.keystore出现错误java.io.IOException:Invalidkeystoreformat一般出现这种错误的情况有2种可能1.密码错误2.JDK版本问题1.如果是JDK8生成的keystore,然后用JDK11(+)执行是没问题的,当前情况不需要解决,因为是成功......
  • JavaWeb学习笔记——第五天
    请求响应概述前端控制器(核心控制器)DispatcherServlet:它实现了Servlet接口,可以被Tomcat程序识别。浏览器发起的请求会先通过DispatcherServlet,由DispatcherServlet将请求转给后方的controller程序进行处理,处理完成后,controller程序再将处理完的结果返回给DispatcherServlet,最后......
  • springboot学习
    SpringBoot1SpringBoot2SpringBoot3SpringBoot4SpringBoot5SpringBoot6SpringBoot7shiro简介:入门:整合shiro导包写Controller报错点击查看代码org.thymeleaf.exceptions.TemplateInputException:Errorresolvingtemplate[index],templatemightnotexistor......
  • 【嵌入式学习笔记】---- 嵌入式系统调试工具
    嵌入式系统调试工具对于开发和调试嵌入式系统非常重要,它们使开发人员能够有效地检查和修改目标设备的硬件和软件状态。以下是几种常见的嵌入式系统调试工具及其使用方法:JTAG(JointTestActionGroup):JTAG是一种通用的硬件调试接口标准,用于测试PCB上的电路、诊断硬件故障和调试......
  • Vue学习笔记60--mapState + mapGetters
    示例一:通过计算属性src/store/index.js //该文件用于创建vuex中最为核心的store//引入VueimportVuefrom'vue'//引入vueximportVuexfrom'vuex'//使用插件Vue.use(Vuex)/*准备actions--用于相应组件中的动作1.context--miniStore2.actions:建议逻辑处理在......
  • 1、融合通信专业术语知识学习VOIP、SIP、350M集群等
    摘自百度:1、VoIP和SIP的概念:VoIP和SIP都是通信领域中的重要概念,它们各自具有独特的功能和应用场景,但也存在一定的联系。VoIP,即VoiceoverInternetProtocol,是一种语音通话技术,它利用互联网协议(IP)进行语音通话与多媒体会议。这种技术将模拟声音信号数字化,并以数据封包的形式在IP......
  • vue难不难?新手学习多久能上手?
    Vue是一款流行的前端框架,对于新手来说,学习Vue并不是一件很难的事情,但需要一定的学习时间和实践。Vue的入门相对容易,它具有简洁的语法和直观的API,使得初学者能够快速上手。如果你已经有了一定的HTML、CSS和JavaScript基础,那么学习Vue将会更加顺利。但是,要想真正掌握......
  • 深入探究App压力测试的关键要点:从零开始学习Monkey
    简介Monkey是Google提供的一个用于稳定性与压力测试的命令行工具可以运行在模拟器或者实际设备中它向系统发送伪随机的用户事件对软件进行稳定性与压力测试为什么要用MonkeyMonkey就是像猴子一样上蹿下跳地乱点为了测试软件的稳定性,健壮性随机点击比顺序点击更容易......
  • 深度学习-卷积神经网络-目标检测YOLO-v5-训练以及推理-57
    目录1.下载代码2.创建虚拟环境安装依赖3.数据集的准备4.配置data.yaml5.修改模型网络的配置文件6.下载一份预训练的模型权重文件放在根目录7.开始训练8.结果9.tensorboard查看训练10.推理1.下载代码https://github.com/ultralytics/yolov5/releases2.创建虚拟......