# 高通Andriod开机流程与镜像说明

Android镜像说明

Android设备刷机时都需要ROM包,ROM包下面有很多的.img和其他的相关镜像文件,其中这里面包含了Android很多的分区,Android镜像文件是通过源码编译生成的,下面是ROM包各个镜像的作用:

镜像文件 说明
boot.img boot分区,包括内核文件和虚拟内存盘Ramdisk,负责设备开机,可在recovery模式进行擦除,重新安装带有boot分区的新系统
system.img system分区,包含Android系统的用户界面以及设置上的一些预装系统应用
recovery.img recovery分区,替代启动分区,执行恢复和维护系统的一些操作
userdata.img data分区,用于保存用户的数据,例如联系人,短信,设置偏好和应用程序存放的地方
cache.img cache分区,用于放置系统频繁访问的数据和应用程序组件的分区
persist.img persist分区包含了设备的传感器和信号部分的驱动程序,例如wifi,蓝牙连接都有关系
splash.img 开机画面文件
NON-HLOS.bin modem image负责处理通讯协议相关的基带镜像
prog_emmc_firehose_8953_ddr.mbn QFIL软件烧录系统的时候,需要用到此文件,应该是关于EMMC、DDR的配置参数相关的
sbl1.mbn 硬件的初始化,并且保存加载其他模块信息的顺序
tz.mbn trustzone是ARM TrustZone 技术是系统范围的安全方法,基于安全需求和引导模式配置XPU,NAND MPU,它和其他模块代码运行在相互隔离的区域,主要实现底层很多安全性特性
emmc_appsboot.mbn bootloader文件,进入fastboot模式相关文件
rpm.mbn 电源管理器,是高通MSM平台另外加的一块芯片,虽然与AP芯片打包在一起,但其是一个独立的ARM Core。负责与SMP,MPM交互进入睡眠或者唤醒整个系统
gpt_backup0.bin 备份gpt头和分区表
gpt_main0.bin GPT头和分区表
patch0.xml 服务端返回的具体磁盘大小打上最后一个分区的补丁、完成分区表头校验的配置文件
sec.dat Secure boot相关熔丝烧录信息
adspso.bin ADSP动态加载程序图像的分区
Cmnlib.mbn Verified boot feature introduced in M needLK to load cmnlib corresponding partitions

开机流程

Android系统是基于linux内核开发的,Android的开机首先就是用bootloader加载并启动linux内核,当内核加载完成后就启动Android系统,内核就会加载Android init进程进入Andriod系统并初始化相关参数和进程,并启动Zygote进程,作为Android其他进程的父进程,Zygote进程做完初始化工作之后,启动SystemServer来启动其他系统服务。下面我们针对每个阶段的执行作介绍。

引导程序和bootloader

当电源按下,引导程序开始从预定义位置(固化在ROM)开始执行PBL (Primary Boot Loader),从启动设备(如eMMC)加载SBL1(Second BootLoader stage) segment1到L2。再加载SBL1 segment2到RPM处理器的RAM中。SBL1 segment1会初始化DDR,然后完成如下加载:

1) 从启动设备加载QSEE/ TrustZone image到DDR

2) 从启动设备加载DEVCFG image到DDR

3) 从启动设备加载Debug Policy(调试相关)到DDR

4) 从启动设备加载bootloader image到DDR

5) 从启动设备加载RPMfirmware image到RPM的RAM中。

SBL1移交运行控制权给QSEE(高通安全执行环境)。QSEE建立安全运行环境,支持fuse。QSEE通知RPM启动RPM 固件的执行。QSEE移交运行控制权给bootloader,bootloader加载、验证kernel。

bootloader是在Android系统运行前的一个小程序,因此引导程序并不是Android系统的一部分。而是与主板芯片有关,是厂商加锁限制的地方。它主要是由固化代码程序和BootLoader程序组成,其中固化程序已经烧入到了生产的芯片中,而BootLoader程序通过它的启动模式去引导系统CPU和部分外设的初始化。

启动内核

BootLoader程序执行完后,标志着CPU和部分外设初始化完成,这时候就开始加载启动内核了。内核的启动和加载是一个很复杂的流程。在此只是简单的说明下,大致可以分为三个阶段:

1)内核自解压引导程序bootloader完成后会跳转运行内核程序,第一步就是检测内核是否解压,并将内核放于指定位置

2)设置CPU的工作模式,使能MMU(虚拟内存),设置一级页表(内存相关)等

3)内核初始化,作是完成剩余与硬件平台相关的初始化工作,在进行一系列与内核相关的初始化之后,调用第一个用户进程init并等待其执行。

简单地说内核的启动,就是初始化各种软硬件环境,加载modemimage和驱动程序,挂载根文件系统,并找到init文件,启动第一个进程任务。

init进程

init是整个系统的第一个进程,init进程的运行标志着正式进入了Android系统。 Init进程主要有三个核心工作:

1)创建和挂载一些系统目录以及设备节点,并且设置权限(system.img是挂载到 / 下的镜像,它包含了全部的系统可执行文件。

userdata.img挂载到 /data 下的镜像,它包含了应用及用户相关的数据。)

2)启动属性服务,和一系列相关的进程和Android服务

3)显示boot logo,默认是“Android”显示在屏幕上

Android服务启动流程

Android启动最重要的就是第二个核心工作:各个系统服务的启动,因为Andriod的所有功能都是依赖这些系统服务完成的,如音乐视频播放,拨打电话,使用wifi等等。这些服务统分为两大类一个是本地服务,另一个是Android服务。下面介绍一下服务流程的启动。

上文提到Android系统的init进程,init进程通过init.rc启动脚本语言的执行,本地服务和Andriod服务,本地服务是指运行在C++层的系统守护进程,如 ueventd、servicemanager、debuggerd、rild、mediaserver等。还有一部分本地服务,是由这些本地服务进一步创建的,如mediaserver服务会启动AudioFlinger, MediaPlayerService, 以及 CameraService 等本地服务。

Android服务是指运行在虚拟机进程中的服务,这些服务的创建过程描述如下:init进程会执行app_process程序,创建Zygote进程,它是Android系统最重要的进程,所有后续的Android应用程序都是由它产生的。Zygote进程会首先分出(fork)"SystemServer"进程,"SystemServer"进程的全部任务就是将所有的Android核心服务启动起来。

核心服务:

  • 启动电源管理器;
  • 创建Activity管理器;
  • 启动电话注册;
  • 启动包管理器;
  • 设置Activity管理服务为系统进程;
  • 启动上下文管理器;
  • 启动系统Context Providers;
  • 启动电池服务;
  • 启动定时管理器;
  • 启动传感服务;
  • 启动窗口管理器;
  • 启动蓝牙服务;
  • 启动挂载服务。

其他服务:

  • 启动状态栏服务;
  • 启动硬件服务;
  • 启动网络状态服务;
  • 启动网络连接服务;
  • 启动通知管理器;
  • 启动设备存储监视服务;
  • 启动定位管理器;
  • 启动搜索服务;
  • 启动剪切板服务;
  • 启动登记服务;
  • 启动壁纸服务;
  • 启动音频服务;
  • 启动耳机监听;
  • 启动AdbSettingsObserver(处理adb命令)

一旦系统服务在内存中跑起来了,Android就完成了引导过程,进入安卓界面。

高通Andriod开机流程与镜像说明的更多相关文章

  1. 高通msm8994启动流程简介

    处理器信息 8994包含如下子系统: 子系统 处理器 含义 APSS 4*Cortex-A53 应用子系统 APSS 4*Cortex-A57 应用子系统 LPASS QDSP6 v5.5A(Hexa ...

  2. 高通msm8994启动流程简单介绍

    处理器信息 8994包括例如以下子系统: 子系统 处理器 含义 APSS 4*Cortex-A53 应用子系统 APSS 4*Cortex-A57 应用子系统 LPASS QDSP6 v5.5A(He ...

  3. 【转】高通平台android 环境配置编译及开发经验总结

    原文网址:http://blog.csdn.net/dongwuming/article/details/12784535 1.高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通 ...

  4. android 6.0 高通平台sensor 工作机制及流程(原创)

    最近工作上有碰到sensor的相关问题,正好分析下其流程作个笔记. 这个笔记分三个部分: sensor硬件和驱动的工作机制 sensor 上层app如何使用 从驱动到上层app这中间的流程是如何 Se ...

  5. 高通平台Bootloader启动流程【转】

    本文转载自:http://blog.csdn.net/fang_first/article/details/49615631 ====================基本知识============= ...

  6. 高通方案的Android设备几种开机模式的进入与退出

    高通方案的Android设备主要有以下几种开机模式,Android.EDL.Fastboot.Recovery和FFBM,其进入及退出的方式如下表. 开机模式 屏幕显示 冷启动 热启动 按键退出 命令 ...

  7. linux驱动由浅入深系列:高通sensor架构实例分析之三(adsp上报数据详解、校准流程详解)【转】

    本文转载自:https://blog.csdn.net/radianceblau/article/details/76180915 本系列导航: linux驱动由浅入深系列:高通sensor架构实例分 ...

  8. 高通 NXP NFC(PN547PN548) 移植流程 android6.0

    一.驱动部分 首先向NXP 的 fae要android 6.0 bring up的代码,如:NFC_NCIHALx_AR0F.4.3.0_M_NoSE 结构目录如下: 1. 添加驱动文件 高通平台需使 ...

  9. 最新内核3.4)Linux 设备树加载I2C client adapter 的流程(内核3.4 高通)【转】

    转自:https://blog.csdn.net/lsn946803746/article/details/52515225 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转 ...

  10. 高通Camera bring up软件流程【转】

    本文转载自:http://blog.csdn.net/liwei16611/article/details/51279658 高通camera bring up分为两种类型:YUV和bayerbrin ...

随机推荐

  1. EXCEL-统计sheet个数、统计指定单元格个数

    Excel的函数,可以直接在里面执行 1.统计sheet个数 =SHEETS() 参考:https://office.tqzw.net.cn/excel/excel/8168.html 2.统计单元格 ...

  2. 一款基于Vue3实现的漂亮且功能强大的在线海报设计器

    大家好,我是 Java陈序员. 我们在工作中经常需要设计各种各样的图片,海报.产品图.文章图片.视频/公众号等. 我们可以选择使用 PS 来设计图片,但是有时候想快速完成任务,有没有一款工具支持快速生 ...

  3. 在鼠标右键菜单中新增新建Markdown文件选项(VSCode)

    引言 正常情况下,我们新建md文件有两种方式:一是通过Markdown编辑器新建,二是新建txt文件再修改后缀. 但是在Windows系统中,我们可以通过修改注册表来新增右键菜单选项.这里我们可以通过 ...

  4. uiautomator2环境搭建+元素定位(安卓)

    一.环境搭建 1.安装uiautomator2 在终端使用pip安装即可 pip install uiautomator2 2.安装adb 可参考:https://www.cnblogs.com/li ...

  5. 九、.net core(.NET 6)添加通用的Redis功能

     .net core 编写通用的Redis功能 在 Package项目里面,添加包:StackExchange.Redis: 在Common工具文件夹下,新建 Wsk.Core.Redis类库项目,并 ...

  6. 倒计时7天!AIRIOT新品发布会,6月6日北京见。

    随着物联网.大数据.AI技术的成熟和演进,智能物联网技术正在加速.深入渗透至各行业应用. AIRIOT物联网平台作为赋能数字经济发展和产业转型的数字基座,由航天科技控股集团股份有限公司(股票代码:00 ...

  7. Vue 3指令与事件处理

    title: Vue 3指令与事件处理 date: 2024/5/25 18:53:37 updated: 2024/5/25 18:53:37 categories: 前端开发 tags: Vue3 ...

  8. Android OpenMAX(六)OMXStore

    在前面两节的学习中我们知道了OMX Core是用来管理(查询/创建/销毁)Android平台上的硬件编解码组件的.这一节我们再向上一层,Android平台除了提供有硬件编解码组件支持,还内置了一些软件 ...

  9. 在mobaxten上使用scala报错

    查看报错信息 [ERROR] Failed to construct terminal; falling back to unsupported java.io.IOException: Cannot ...

  10. MySQL创建表的时候建立联合索引的方法

    1.MySQL创建表建立联合索引的步骤 在MySQL中,联合索引(也称为复合索引或多列索引)是基于表中的多个列创建的索引.这种索引可以提高多列查询的性能,特别是当查询条件涉及这些列时.下面是一个详细的 ...