《Android的设计与实现:卷I》——第3章 Android启动过程的底层实现

第3章 Android启动过程的底层实现

Android支持多种启动模式,主要有正常模式(normal mode)、安全模式(safe mode)、恢复模式(recovery mode)、工厂模式(factory mode)、快速启动模式(fastboot mode)等。除正常模式外,都是刷机或者测试模式,本书只讲解正常模式下Android的启动过程。如果读者对其他启动模式感兴趣,可以自行查阅相关资料。

3.1 Android正常模式启动流程

Android的正常模式启动流程大体如下:
步骤1 系统加电,执行bootloader。bootloader负责初始化软件运行所需的最小硬件环境,最后加载内核到内存中。

步骤2 内核加载进内存后,将首先进入内核引导阶段,在引导阶段最后,调用start_kernel进入内核启动阶段。start_kernel最终启动用户空间的init程序。

步骤3 init程序负责解析init.rc配置文件,开启系统守护进程。两个最重要的守护进程是zygote和ServiceManager。前者是Android启动的第一个Dalvik虚拟机,它将负责启动Java世界的进程;后者是Binder通信的基础。

步骤4 zygote虚拟机启动子进程system_server,在system_server中开启了Android核心系统服务并将核心系统服务添加到ServiceManager,然后系统进入systemReady状态。

步骤5 在systemReady状态下,ActivityManagerService与zygote中的Socket通信,通过zygote启动Home应用,进入系统桌面。

步骤1中的bootloader依赖于硬件体系结构,需要读者熟悉特定硬件体系结构及其对应的汇编语言。每个厂商都有自己独特的bootloader程序,所以本书不介绍这部分内容。步骤2和步骤3主要与Linux相关,但是对理解框架层至关重要,将在本章讲解。步骤4和步骤5与Android关系更紧密,将在第4章讲解。

时间: 2024-08-21 06:00:12

《Android的设计与实现:卷I》——第3章 Android启动过程的底层实现的相关文章

《Android App开发入门:使用Android Studio 2.X开发环境》——第 3章 Android App界面设计 3-1 View 与 ViewGroup(Layout):组件与布局

第 3章 Android App界面设计 3-1 View与 ViewGroup(Layout):组件与布局 3-2 使用 LinearLayout建立界面布局 3-3 使用 weight属性控制组件的宽 /高 3-4 通过属性美化外观 3-5 用程序设置组件的外观属性 3-6 使用 ConstraintLayout 提升设计与执行的性能 3-7 使用 Gmail 将程序寄 3-1 View 与 ViewGroup(Layout):组件与布局

Android系统进程间通信(IPC)机制Binder中的Server启动过程源代码分析_Android

        在前面一篇文章Android系统进程间通信(IPC)机制Binder中的Server和Client获得Service Manager接口之路中,介绍了在Android系统中Binder进程间通信机制中的Server角色是如何获得Service Manager远程接口的,即defaultServiceManager函数的实现.Server获得了Service Manager远程接口之后,就要把自己的Service添加到Service Manager中去,然后把自己启动起来,等待Cl

《Android App开发入门:使用Android Studio 2.X开发环境》——第 2章 Android 程序设计基础讲座

第 2章 Android 程序设计基础讲座 2-1 Android App 的主角:Activity2-2 Android 程序的设计流程2-3 认识 Activity 的基本程序逻辑2-4 组件的布局与属性设置2-5 开始动手编写程序2-6 输入字段 EditText 组件2-7 使用 USB 线将程序部署到手机上执行2-8 修改项目的程序包名称和应用程序 ID 本章开始会使用面向对象的 Java 程序设计语言,对Java 不熟悉的读者可适当参考附录 A. 本章将说明如何在项目中加入各种组件(

《Android的设计与实现:卷I》——第3章 3.6init循环监听处理事件

3.6 init循环监听处理事件 init触发所有Action后,便进入一个无限循环,在这个无限循环里首先执行两条指令: execute_one_command()和restart_processes(). 其中execute_one_command()已经分析过,用来启动Action和Service:restart_processes()也容易理解,就是重启这些Action和Service.此后便在init中调用了系统函数poll等待一些事件发生,代码如下: nr = poll(ufds, f

《Android的设计与实现:卷I》——第1章 1.2Android体系结构

1.2 Android体系结构 要深入学习Android,必须理解Android的体系结构,本节将分别从静态和动态两种视角对Android的体系结构进行介绍. 1.2.1 静态视角的体系结构 Android采用了分层的体系结构,各层的结构和功能非常清晰.从上往下看,Android分为四层,分别是:1)应用层,2)应用框架层,3)Android运行环境和系统运行库层,4)Linux内核层,如图1-1所示. 1.应用层 应用层位于Android体系结构的最上层.Google在Android中内置了一

《Android的设计与实现:卷I》——第1章 1.5Android源码开发工具的配置和使用

1.5 Android源码开发工具的配置和使用 Android源码开发需要安装配置Android SDK.Eclipse +ADT插件以及Source Insight工具,Android SDK中提供了大量的命令行工具供开发者操作设备和调试源代码:Eclipse+ADT插件用于开发和调试应用层以及应用框架层Java部分代码:Source Insight是阅读Android全部源代码的必备工具,但不具备调试功能.本节将分别介绍这三种工具的安装和使用. 1.5.1 配置Android SDK 步骤1

《Android的设计与实现:卷I》——第1章 1.3Android源码下载和编译

1.3 Android源码下载和编译 Android源码的开发需要Linux环境,读者可以安装Ubuntu 10.04及其后续版本,推荐安装Ubuntu的10.04或者12.04这两个LTS(长期技术支持)版本.本书基于Jelly Bean(Android 4.1)分析源代码,该部分源代码的编译需要64位操作系统环境.本节将介绍如何在Ubuntu 12.04(LTS)-64bit上搭建Android源码开发所需环境,这是保障后续步骤能够顺利进行的前提条件,必须准确无误.Android源码分成上层

《Android的设计与实现:卷I》——第1章 1.4Android源码结构

1.4 Android源码结构 在深入学习Android源码前,有必要先熟悉源码结构.只有熟悉了源码结构,分析源码的时候才能有的放矢,迅速定位到所需源码.要查看源码结构,只需要在Android源码根目录下执行以下命令: allong@android:~/android/jellybean$ tree -L 1 执行完毕后,终端中显示出源码的树形结构.表1-6中列出了源码中各目录的主要内容. 应用层源码位于packages目录下,主要包含核心应用程序.内容提供器(provider).输入法等:应用

《Android的设计与实现:卷I》——第3章 3.2Kernel启动过程

3.2 Kernel启动过程 Android Kernel启动过程与标准Linux Kernel的启动过程基本一致,都是对start_kernel函数的调用和执行.本节将分析Android正常启动流程的第二步:Kernel启动过程. 本节涉及的源码文件如下: kernel/arch/arm/kernel/head.Skernel /arch/arm/kernel/head-common.Skernel/init/main.cKernel启动过程分为两个阶段: 1)内核引导阶段.通常使用汇编语言编