博客
关于我
Android内核分析-Android系统启动过程(一)
阅读量:530 次
发布时间:2019-03-09

本文共 1510 字,大约阅读时间需要 5 分钟。

Android系统启动流程解析

在分析过程中,这里的内容借鉴并参考了其他博主的技术文章,具有较高的参考价值和参考文献价值。如有兴趣,可以去看看源文章,它们都写得很不错:


Android系统启动总体流程概述

Android系统的启动过程首先是从Linux内核启动,接着进行驱动加载、文件系统挂载、进程创建等一系列操作。以下从整体上梳理了Android的启动流程,并结合相关技术进行详细阐述。

1. 启动过程的基本阶段划分

Android设备的启动过程可分为四个主要阶段,每个阶段承担着不同的任务。

2. 第一阶段:从 ROM 启动

Android设备上电后的首要任务是从处理器的ROM(只读存储器)中读取启动引导代码。这种代码通常驻留在CPU的专用集成电路上,执行这段引导代码的任务属于芯片厂商的设计责任。这段代码的主要功能是读取和启动 Bootloader。

3. 第二阶段:Bootloader的工作

Bootloader是引导加载程序,它在硬件初始化完成后,负责寻找并加载Linux内核代码到随机存储器(RAM)中。这个过程的实现标准通常由设备厂商负责。

4. 第三阶段:Linux内核的启动与初始化

一旦Linux内核启动,它会执行一系列初始化任务,包括软硬件环境的配置、驱动程序的加载以及根文件系统的挂载。在这个阶段,内核还会创建内核空间和用户空间两个独立的内存区域,确保系统运行的稳定性和安全性。内核空间的主要功能是处理 kernel-level 的操作,而用户空间则为应用程序提供运行环境,这样的划分机制也避免了传统操作系统中应用程序随意访问内核空间的情况。

5. 第四阶段:引发用户空间的进程启动

随着内核空间和用户空间的充分准备,根文件系统中会找到 init 程序,该程序被用来启动系统的初始用户空间进程。与传统的Linux系统不同的是,在Android系统中,init 通过解析 init.rc 脚本来决定系统哪些守护进程和服务会被启动。典型的服务包括 adbd(设备管理daemons)、usbd(USB纠结管理服务)和 zygote(Zygote进程,为 Android 应用程序初始化提供支持)。

6Android启动流程的特殊性

值得注意的是,Android系统相比传统的Linux系统有着显著的不同点,这主要体现在 init 服务的设计上。init 通过全局配置文件来定义系统的服务和守护进程启动顺序,这种设计方式与传统Linux的更偏向于 shell 脚本的启动方式有很大差异。特别是 adbd 服务的启动往往会根据设备类型(手机、平板、嵌入式设备等)有不同的配置要求。

7 如何理解内核空间与用户空间的划分

内核空间和用户空间的划分源于操作系统内核开发的安全性考虑。在早期的操作系统中,普通程序可以直接访问内核空间,这种情况并不少见,从而带来了较高的系统不稳定风险。为了提高系统安全性,现代操作系统通过在硬件层面对CPU 指令权限进行了划分,形成了类似于电影分级的 Ring 级别划分机制。Ring0 级别的进程运行在内核态,可以访问内核空间;Ring3 级别的进程运行在用户态,仅能访问用户空间。

这种架构设计原则不仅保障了操作系统的安全性,也为用户态的应用程序提供了加密的、受保护的内存区域,使得系统运行更加稳定和安全。


以上内容详细解读了 Android 通过其特有的启动流程所完成的各个阶段,并深入分析了关键组件的工作机制。接下来,我们也可以进一步探讨 Android 启动时的技术细节,例如如何利用 init 脚本配置服务启动顺序,或者分析 adbd 服务的具体工作流程等内容。

转载地址:http://wkmiz.baihongyu.com/

你可能感兴趣的文章
Python数据分析(二): Numpy技巧 (2/4)
查看>>
09 . Python3之常用模块
查看>>
Python学习笔记-StatsModels 统计回归(3)模型数据的准备
查看>>
Velocity.js初步
查看>>
yarn出现“There are no scenarios ; must have at least one"
查看>>
nginx上配置phpmyadmin
查看>>
HustOJ二次开发之修改数据库连接池
查看>>
redis集群报错:(error) CLUSTERDOWN Hash slot not served
查看>>
一个JAVA应用启动缓慢问题排查 --来自jdk securerandom 的问候
查看>>
spring-boot-2.0.3之redis缓存实现,不是你想的那样哦!
查看>>
httprunner学习23-加解密
查看>>
有道云笔记 同步到我的博客园
查看>>
阿里云“网红"运维工程师白金:做一个平凡的圆梦人
查看>>
李笑来必读书籍整理
查看>>
vue书籍整理
查看>>
记Java中有关内存的简单认识
查看>>
http头部 Expect
查看>>
Hadoop(十六)之使用Combiner优化MapReduce
查看>>
C#实现outlook自动签名
查看>>
《机器学习Python实现_10_06_集成学习_boosting_gbdt分类实现》
查看>>