android启动流程

合集下载

Android的本地启动流程1

Android的本地启动流程1

本地部分启动流程
在 Android 系统运行的通常情况下,根文件系统 只是一个较小的部分,例如包括 init 、 init.rc 和少数 的几个目录。其他的文件系统通常需要由 init 根据 init.rc 脚本的中内容进行挂接。 默认的文件系统挂接方法:
mount mount mount mount yaffs2 yaffs2 yaffs2 yaffs2 mtd@system /system mtd@system /system ro remount mtd@userdata /data nosuid nodev mtd@cache /cache nosuid nodev
Android 的本地启动流程
韩 超 @ Android 技术
本地部分启动流程
Android 系统的启动流程为: BootLoader 启动(标准) Linux 内核启动(标准) 内核加载根文件系统 init 进程启动 运行 init.rc 脚本 加载 system 和 data 文件系统 启动各种可执行程序
谢谢!
本地部分启动流程
Linux 内核在加载完成根文件系统后,将运行根文 件系统中的一个名称为 init 的可执行程序,作为用户 空间的第一个进程。 在 Android 中,这个 init 就是根目录中的 init 可执 行程序,它被内核启动后,作为系统的用户空间的第 一个进程来运行。 init 可执行程序运行后,系统的用 户空间部分进入了 Android 系统特定环境。 init 程序运行后,程序将会在根目录中找到名称为 init.rc 的文件作为启动脚本。在不同的平台中, init.rc 脚本中的内容可能有自定义的部分。
# cat /proc/cmdline qemu=1 console=ttyS0 android.checkjni=1 android.qemud=ttyS1 ndns=-1

Android系统完整的启动过程

Android系统完整的启动过程

Android系统完整的启动过程,从系统层次角度可分为Linux系统层、Android系统服务层、Zygote进程模型三个阶段;从开机到启动Home Launcher完成具体的任务细节可分为七个步骤,下面就从具体的细节来解读Android系统完整的初始化过程。

一、启动BootLoaderAndroid 系统是基于Linux操作系统的,所以它最初的启动过程和Linux一样。

当设备通电后首先执行BootLoader引导装载器,BootLoader是在操作系统内核运行之前运行的一段小程序。

通过这段小程序初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境引导进入合适的状态,以便为最终调用操作系统内核准备好正确的运行环境。

而Linux系统启动时:1)首先要加载BIOS的硬件信息,并获取第一个启动设备的代号2)读取第一个启动设备的MBR的引导加载程序(lilo、grub等)的启动信息。

3)加载核心操作系统的核心信息,核心开始解压缩,并且尝试驱动所有的硬件设备。

…………在嵌入式系统中,通常不会有像BIOS那样的固件程序,因此整个系统的加载任务都是通过BootLoader完成的。

二、加载系统内核Linux内核映像通常包括两部分代码,分别为实模式代码和保护模式代码。

当BootLoader装载内核映像到代码段内存时,分别放置实模式代码和保护模式代码到不同的位置,然后进入实模式代码执行,实模式代码执行完成后转入保护模式代码。

实模式和保护模式的概念再次不做过多解释,读者可以自行查阅资料。

三、启动Init进程当系统内核加载完成之后,会首先启动Init守护进程,它是内核启动的第一个用户级进程,它的进程号总是1。

Init进程启动完成之后,还负责启动其他的一些重要守护进程,包括:Usbd进程(USB Daemon):USB连接后台进程,负责管理USB连接。

adbd 进程(Android Debug Bridge Daemon):ADB连接后台进程,负责管理ADB连接。

Android 开机启动流程

Android 开机启动流程

Android的开机流程1. 系统引导bootloader1) 源码:bootable/bootloader/*2) 说明:加电后,CPU将先执行bootloader程序,此处有三种选择a) 开机按Camera+Power启动到fastboot,即命令或SD卡烧写模式,不加载内核及文件系统,此处可以进行工厂模式的烧写b) 开机按Home+Power启动到recovery模式,加载recovery.img,recovery.i mg包含内核,基本的文件系统,用于工程模式的烧写c) 开机按Power,正常启动系统,加载boot.img,boot.img包含内核,基本文件系统,用于正常启动手机(以下只分析正常启动的情况)2. 内核kernel1) 源码:kernel/*2) 说明:kernel由bootloader加载3. 文件系统及应用init1) 源码:system/core/init/*2) 配置文件:system/rootdir/init.rc,3) 说明:init是一个由内核启动的用户级进程,它按照init.rc中的设置执行:启动服务(这里的服务指linux底层服务,如adbd提供adb支持,vold提供SD卡挂载等),执行命令和按其中的配置语句执行相应功能4. 重要的后台程序zygote1)源码:frameworks/base/cmds/app_main.cpp等2) 说明:zygote是一个在init.rc中被指定启动的服务,该服务对应的命令是/system/bin/app_processa)建立Java Runtime,建立虚拟机b) 建立Socket接收ActivityManangerService的请求,用于Fork应用程序c) 启动System Server5. 系统服务system server1)源码:frameworks/base/services/java/com/android/server/SystemServer.jav a2) 说明:被zygote启动,通过SystemManager管理android的服务(这里的服务指frameworks/base/services下的服务,如卫星定位服务,剪切板服务等)6. 桌面launcher1)源码:ActivityManagerService.java为入口,packages/apps/launcher*实现2) 说明:系统启动成功后SystemServer使用xxx.systemReady()通知各个服务,系统已经就绪,桌面程序Home就是在ActivityManagerService.systemReady()通知的过程中建立的,最终调用()启launcher7. 解锁1) 源码:frameworks/policies/base/phone/com/android/internal/policy/impl/*lock* 2) 说明:系统启动成功后SystemServer调用wm.systemReady()通知WindowManagerService,进而调用PhoneWindowManager,最终通过LockPatternKeyguardView显示解锁界面,跟踪代码可以看到解锁界面并不是一个Activity,这是只是向特定层上绘图,其代码了存放在特殊的位置8. 开机自启动的第三方应用程序1) 源码:ﻫframeworks/base/services/java/com/android/server/am/ActivityManagerService.java2) 说明:系统启动成功后SystemServer调用ActivityManagerNative.getDefa ult().systemReady()通知ActivityManager启动成功,ActivityManager会通过置变量mBooting,通知它的另一线程,该线程会发送广播android.intent.action.BOOT_COMPLETED以告知已注册的第三方程序在开机时自动启动。

安卓启动流程

安卓启动流程

安卓启动流程Android启动流程是指当我们按下手机开机键之后,系统如何进行初始化和加载应用程序等相关操作,最终完成系统的正常启动并进入主界面的过程。

下面将详细介绍Android启动流程的主要步骤。

1. 加电与引导当我们按下手机的开机键时,电源管理芯片开始提供电力供应并接通整个电路。

同时,电源管理芯片会发送信号给处理器引导启动系统。

2. 启动引导加载程序处理器接收到启动信号后,会加载引导加载程序(Bootloader)。

引导加载程序主要负责初始化硬件设备、加载系统内核等操作。

引导加载程序是嵌入式系统中运行的一段代码,它的作用是为系统加载内核和其他软件。

3. 加载内核引导加载程序会根据设备启动模式(Fastboot、Recovery或正常启动)来选择加载相应的内核。

内核是操作系统的核心,它负责管理和控制系统的硬件资源,提供各种功能的驱动程序,同时也会启动各种系统服务。

4. 初始化设备驱动在内核加载完成后,系统会初始化设备驱动程序。

设备驱动程序负责与硬件设备进行通信和控制,让硬件设备可以正确地与系统交互。

5. 启动init进程在设备驱动程序加载完毕后,系统会启动init进程。

init进程是Android系统中的第一个用户级进程,它的PID(Process ID)为1。

init进程负责启动和管理其他用户级进程,它通过读取init.rc配置文件来确定要启动的进程和服务。

6. 启动系统服务init进程会根据init.rc配置文件的指令,启动各种系统服务,例如Binder服务、Activity Manager服务、Window Manager服务等。

这些系统服务是Android系统的核心组件,负责管理应用程序的生命周期、绘制界面等功能。

7. Zygote进程与应用程序加载在系统服务启动完成后,init进程会启动Zygote进程。

Zygote进程是Android系统中的特殊进程,其作用是为应用程序提供应用程序运行环境(即Dalvik或ART虚拟机环境)。

Android 开机启动流程

Android 开机启动流程

Android的开机流程1. 系统引导bootloader1) 源码:bootable/bootloader/*2) 说明:加电后,CPU将先执行bootloader程序,此处有三种选择a) 开机按Camera+Power启动到fastboot,即命令或SD卡烧写模式,不加载内核及文件系统,此处可以进行工厂模式的烧写b) 开机按Home+Power启动到recovery模式,加载recovery.img,recovery.img包含内核,基本的文件系统,用于工程模式的烧写c) 开机按Power,正常启动系统,加载boot.img,boot.img包含内核,基本文件系统,用于正常启动手机(以下只分析正常启动的情况)2. 内核kernel1) 源码:kernel/*2) 说明:kernel由bootloader加载3. 文件系统及应用init1) 源码:system/core/init/*2) 配置文件:system/rootdir/init.rc,3) 说明:init是一个由内核启动的用户级进程,它按照init.rc中的设置执行:启动服务(这里的服务指linux底层服务,如adbd提供adb支持,vold提供SD卡挂载等),执行命令和按其中的配置语句执行相应功能4. 重要的后台程序zygote1) 源码:frameworks/base/cmds/app_main.cpp等2) 说明:zygote是一个在init.rc中被指定启动的服务,该服务对应的命令是/system/bin/app_processa) 建立Java Runtime,建立虚拟机b) 建立Socket接收ActivityManangerService的请求,用于Fork应用程序c) 启动System Server5. 系统服务system server1) 源码:frameworks/base/services/java/com/android/server/SystemServer.java2) 说明:被zygote启动,通过System Manager管理android的服务(这里的服务指frameworks/base/services下的服务,如卫星定位服务,剪切板服务等)6. 桌面launcher1) 源码:ActivityManagerService.java为入口,packages/apps/launcher*实现2) 说明:系统启动成功后SystemServer使用xxx.systemReady()通知各个服务,系统已经就绪,桌面程序Home就是在ActivityManagerService.systemReady()通知的过程中建立的,最终调用()启launcher7. 解锁1) 源码:frameworks/policies/base/phone/com/android/internal/policy/impl/*lock*2) 说明:系统启动成功后SystemServer调用wm.systemReady()通知WindowManagerService,进而调用PhoneWindowManager,最终通过LockPatternKeyguardView显示解锁界面,跟踪代码可以看到解锁界面并不是一个Activity,这是只是向特定层上绘图,其代码了存放在特殊的位置8. 开机自启动的第三方应用程序1) 源码:frameworks/base/services/java/com/android/server/am/ActivityManagerService.java2) 说明:系统启动成功后SystemServer调用ActivityManagerNative.getDefault().systemReady()通知ActivityManager启动成功,ActivityManager会通过置变量mBooting,通知它的另一线程,该线程会发送广播android.intent.action.BOOT_COMPLETED以告知已注册的第三方程序在开机时自动启动。

android开机过程

android开机过程

一、Android开机启动流程简介1、OS-level:由bootloader载入linux kernel后kernel开始初始化, 并载入built-in 的驱动程序。

Kernel完成开机后,载入init process,切换至user-space。

Init进程是第一个在user-space启动的进程。

2、Android-level:由init process读取init.rc,Native 服务启动,并启动重要的外部程序,例如:servicemanager、Zygote以及System Server等。

由 init process 根据硬件类型读取init.xxx.rc。

由init.xxx.rc加载init.xxx.sh。

由 init.xxx.sh 加载特定的硬件驱动。

如hi_tuner.ko、hi_demux.ko等。

3、Zygote-Mode:Zygote 启动完SystemServer 后,进入Zygote Mode,在Socket 等候命令。

随后,使用者将看到一个桌面环境(Home Screen)。

桌面环境由一个名为[Launcher]的应用程序负责提供。

本文档重点研究Android-level中的启动流程。

启动流程如下图所示:二、init process流程分析init进程简介init进程是第一个在user-space启动的进程。

由内核启动参数[init]传递给内核,如果该项没有设置,内核会按/etc/init,/bin/init,/sbin/init,/bin/sh的顺序进行尝试,如果都有的都没找到,内核会抛出 kernel panic:的错误。

init进程包含在跟文件系统中,跟文件系统被直接编译到了内核。

对init 进程的修改,需要重新编译烧写内核。

编译命令:#cd kernel#make uImagCONFIG_INITRAMFS_SOURCE=../out/target/product/Hi3716C/root/ -j 8#cp kernel/arch/arm/boot/uImage out/target/product/Hi3716C/kernel -afv 源代码路径:froyo\system\core\init编译的文件:builtins.cinit.cdevices.cproperty_service.cutil.cparser.clogo.c编译命令:make init生成的文件:/out/target/product/Hi3716C/root/initinit进程启动流程1.安装SIGCHLD信号。

Android启动流程(一)

Android启动流程(一)

Android启动流程(⼀)Android 的启动流程话不多说上图内核⾥⾯第⼀个进程 idle 进程⼜叫做Swapper进程 PID = 0Kthread 进程相当于内核的⿐祖init 进程启动⽤户空间的⿐祖zygote java 进程⿐祖SystemServer zygote 的⼤⼉⼦SystemServer ⼜会启动很多服务, 90多个,我们很多服务都在SystemServer进程中SystemServer通过AMS 在zygote 出app进程进程启动⽅式 fork线程启动 new Thread在内核中没有进程和线程之分init 进程的启动kernel/common/init/main.c -> kernel_initinit的⼊⼝函数 -》 main.cppinit.rc脚本⽂件按照init.rc 的内容去执⾏first_state_main主要做⼀些挂载/ 创建⼀些⽂件重定向输⼊输出 error初始化内核的⽇志打印启动 selinux_setupSelinuxSetupSetupSelunx linux这块的安全策略 --- Android ---- 权限最⼩权限原则second_stage_mainPropertyInit(); --- 初始化属性域处理⼦进程终⽌信号 --- 僵⼫进程InstallSignalFdHandler(&epoll);InstallInitNotifier(&epoll);StartPropertyService(&property_fd);GetBultinFunctionmap () 匹配命令和函数之间的关系LoadBootScripts() 解析init.rc--> CreateParser : parserparser.AddSectionParser("server" , xxxx);parser.AddSectionParser("on" , xxxx);parser.AddSectionParser("import" , xxxx);parser.ParseConfig("/system/etc/init/hw/init.rc"); // 解析 init.rcparserConfigDir();parseConfigFile();ParseData() 解析init ⽂件进⼊while 循环 ---- 等待auto pending_function = epoll.Wait(epoll_timeout);⼩结:init处理的重要事情:1. 挂载⽂件2. 设置 seLinux -- 安全策略3. 开始属性服务注册到 epoll中4. 解析 init.rc5. 循环处理脚本⽂件 -- 启动 zygote6. 循环等待输⼊输出stdio --Linux ⼀切皆⽂件system.out.println(); 把这句话写到⽂件夹中(dev/nulll 管道⽂件夹)zygote 进程启动孵化器最重要的作⽤有⼀部分在nitive ⼀部分在javazygote 第⼀个进⼊Java的。

安卓系统启动流程

安卓系统启动流程

安卓系统启动流程第一步:启动电源以及系统启用当电源按下,引导芯片代码从指定位置(固化在ROM中)开始执行,加载引导程序到RAM,然后执行。

第二步:引导程序引导程序是在安卓操作系统开始运行前的一个小程序,它是针对针对特定芯片与主板的,设备制造商要么使用很受欢迎的引导程序,比如redboot、uboot、qi bootloader或者自己开发的引导程序。

它不是安卓操作系统的一部分。

引导程序是OEM厂商和设备制造商限制和加锁的地方。

引导程序分两个阶段运行。

第一阶段,检测外部的RAM以及加载对第二阶段的有用的程序;第二阶段,引导程序设置网络、内存等等。

这些对于运行内核是有必要的,为了达到特殊的目标,引导程序可以根据配置参数和输入数据设置内核。

传统的加载器包含两个文件1. init.s初始化堆栈,清零BBS段,调用main.c的_main()函数2. mian.c初始化硬件(主板、键盘、控制台),创建Linux标签第三步:内核内核启动时,设置缓存、被保护存储器、计划列表、加载驱动。

当内核完成系统设置,他首先在系统文件中寻找init文件,然后启动boot进程或者系统的第一个进程第四步:init进程init是第一个进程,可以说它是root进程或者所有进程的父进程。

init进程有两个责任:1.一是挂载目录,比如/sys、/dev、/proc,二是运行init.rc脚本init进程在/system/core/init找到init.rc在/system/core/rootdir/init.rc找到readme.txt在/system/core/init/readme.txt找到对于init.rc文件,安卓中有特定的格式和规则,在安卓中,我们叫做安卓初始化语言。

安卓初始化语言由四大类型的声明组成,即Action(动作)、Commands(命令)、Services(服务)、Options(选项)。

Action(动作):动作是以命令流程命名的,有一个触发器决定动作是否发生。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

android启动流程
Android启动流程:
Android是一款广泛使用的移动操作系统,其启动流程是一个
相对复杂的过程,涉及到多个模块的加载和启动。

下面将详细介绍Android的启动流程。

1、开机自检(Boot)
当手机开机时,首先进行开机自检。

在这个阶段,系统会检测硬件设备的状态,包括电池是否齐全、屏幕是否正常等。

如果硬件设备通过了自检,系统将会开始启动。

2、引导加载程序(Bootloader)
开机自检完成后,系统会加载引导加载程序(Bootloader)。

引导加载程序是硬件平台的一部分,其主要作用是启动操作系统。

在加载引导加载程序的过程中,系统会自动检测手机的存储器设备,确定存储设备中是否有可用的引导文件。

3、Linux内核加载
一旦引导加载程序找到可用的引导文件,系统将会加载Linux
内核。

Linux内核是Android系统的核心组件,负责管理内存、文件系统、驱动程序等。

4、文件系统加载
一旦Linux内核加载完成,系统将会加载文件系统。

Android
系统使用的是基于Linux的文件系统,在这个过程中,系统会
加载并初始化各个文件系统,包括根文件系统、系统文件系统、
数据文件系统等。

5、初始化进程(Init)
一旦文件系统加载完成,系统将会启动初始化进程(Init)。

初始化进程是Android系统的第一个进程,其作用是启动系统的各个进程和服务。

6、启动用户空间(System Server)
在初始化进程启动后,系统会启动用户空间,加载系统的用户界面等组件。

7、启动应用程序
一旦用户空间加载完成,系统将会启动应用程序。

应用程序是Android系统的核心功能,包括系统应用程序和用户安装的应用程序。

系统应用程序包括电话、短信、浏览器等,而用户安装的应用程序则是用户根据自己的需求下载和安装的。

8、应用程序启动完成
一旦应用程序启动完成,系统将进入正常运行状态,用户可以通过界面操作手机。

总结:
Android系统的启动流程是一个复杂而严密的过程,经过开机自检、引导加载程序、Linux内核加载、文件系统加载、初始化进程、启动用户空间、启动应用程序等多个步骤,最终实现用户界面的显示和应用程序的运行。

每个步骤都有其特定的目
的和作用,而整个启动流程的设计和优化,可以有效提高系统的启动速度和用户的体验。

相关文档
最新文档