资源预览内容
第1页 / 共16页
第2页 / 共16页
第3页 / 共16页
第4页 / 共16页
第5页 / 共16页
第6页 / 共16页
第7页 / 共16页
第8页 / 共16页
第9页 / 共16页
第10页 / 共16页
亲,该文档总共16页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
1Android开机流程介绍秘密 先来看看Android系统在手机内存中的是怎么放置的:地址最低的地方放Bootloader, 然后放Linux Kernel, 接下来的 三个区域分别放置编译源码生成的三个img文件(ramdisk.img, system.img和data.image),用户在使用过程中产生的文件等都是放 在最后一个Data Image区域里面(即/data/data/),这部分区域大小 不固定,根据手机实际内存来确定。 手机启动的时候从最低的地址开始执行,首先执行 Bootloader,Bootloader会去加载Linux Kernel,初始化硬件,然后 挂载Ram Disk(Init process放在这里面的,另:init process的 PID=1),并启动一个初始化的进程 秘密 2Android系统完整的启动过程,从系统层次角度可分为Linux系统层、Android系统 服务层、Zygote进程模型三个阶段;从开机到启动Home Launcher完成具体的任 务细节可分为七个步骤,下面就从具体的细节来解读Android系统完整的初始化 过程。3秘密 Android 系统是基于Linux操作系统的,所以它最初的启动过程和 Linux一样。当设备通电后首先执行BootLoader引导装载器,BootLoader 是在操作系统内核运行之前运行的一段小程序。通过这段小程序初始化 硬件设备、建立内存空间映射图,从而将系统的软硬件环境引导进入合 适的状态,以便为最终调用操作系统内核准备好正确的运行环境。 Android 系统是基于Linux操作系统的,所以它最初的启动过程和Linux一 样。当设备通电后首先执行BootLoader引导装载器,BootLoader是在操 作系统内核运行之前运行的一段小程序。通过这段小程序初始化硬件设 备、建立内存空间映射图,从而将系统的软硬件环境引导进入合适的状 态,以便为最终调用操作系统内核准备好正确的运行环境。一、启动BootLoader本文中所有信息归斐迅通讯技术有限公司所有,未经允许,不得外传4秘密 而Linux系统启动时:1)首先要加载BIOS的硬件信息,并获取第一个启动设备的代号2)读取第一个启动设备的MBR的引导加载程序(lilo、grub等)的 启动信息。3)加载核心操作系统的核心信息,核心开始解压缩,并且尝试驱 动所有的硬件设备。在嵌入式系统中,通常不会有像BIOS那样的固件程序,因此整个系 统的加载任务都是通过BootLoader完成的。5 5秘密 Linux内核映像通常包括两部分代码,分别为实模式代码和保护模 式代码。当BootLoader装载内核映像到代码段内存时,分别放置实 模式代码和保护模式代码到不同的位置,然后进入实模式代码执行 ,实模式代码执行完成后转入保护模式代码。实模式和保护模式的概念再次不做过多解释,大家可以自行查 阅资料。二、加载系统内核6秘密 三、启动Init进程当系统内核加载完成之后,会首先启动Init守护进程,它是内核启动的第一 个用户级进程,进程号总是1。 Init根据init.rc和init.xxx.rc脚本文件建立很多基本的服务,如ServiceManager 、zygote等等。Init.rc是Android自己规定的初始化脚本,该脚本包含四个类 型的声明: Actions/Commands/Services/Options 例子: service ril-daemon /system/bin/rildclass mainsocket rild stream 660 root radiosocket rild-debug stream 660 radio systemuser rootgroup radio cache inet misc audio sdcard_rw log 关于该脚本的说明,请参看system/core/init/readme.txt。本文中所有信息归斐迅通讯技术有限公司所有,未经允许,不得外传7秘密 作为天字号第一个进程, Init进程启动完成之后,还负责启动其他的一些重要守 护进程,包括:Usbd进程(USB Daemon):USB连接后台进程,负责管理USB连接。adbd 进程(Android Debug Bridge Daemon):ADB连接后台进程,负责 管理ADB连接。debuggerd 进程(Debugger Daemon) :调试器后台进程,负责管理调试请 求及调试过程。rild进程 (Radio Interface Layer Daemon): 无线接口层后台进程,负责管 理无线通信服务。8秘密 四、启动zygote进程Init进程和一些重要的守护进程启动完成之后,系统启动Zygote 进程。Zygote 进程启动后,首先初始化一个Dalvik VM实例,然后为它加载资源与 系统共享库,并开启Socket监听服务,当收到创建Dalvik VM实例请求时, 会通过COW(copy on write)技术最大程度地复用自己,生成一个新的 Dalvik VM实例。Dalvik VM实例的创建方法基于linux系统的fork原理。9秘密 Zygote进程就相当于Linux系统中的fork进程。由它可以在系统运行期间,接 收到创建虚拟机请求时,孵化Dalvik VM实例。Zygote进程孵化Dalvik VM实 例流程如下图所示:Zygote是在Andorid系统中创建Java世界的盘古,它创建了第一个Java虚 拟机,它又是女娲,成功繁殖了framework的核心system_server进程。10秘密 五、启动Runtime进程 在Zygote进程启动完成之后,Init进程会启动Runtime进程。Runtime进程 首先初始化服务管理器(Service Manager),并把它注册为绑定服务( Binder services)的默认上下文管理器,负责绑定服务的注册与查找。然 后Runtime进程会向Zygote进程发送启动系统服务(System Service)的 请求,Zygote进程收到请求后,会“孵化”出一个新的Dalvik VM实例并启动 系统服务进程。Runtime进程的启动流程如下图所示:11秘密 System Service会首先启动两个本地服务(由C或C+编写的native服务), Surface Flinger和Audio Flinger,这两个本地系统服务向服务管理器注册成 为IPC服务对象,以便在需要它们的时候很容易查找到。然后 SystemService 会启动一些 Android 系统管理服务,包括硬件服务和系统框 架核心平台服务,并注册它们成为IPC服务对象。本地服务进程的启动流程 如下图所示:六、启动本地服务12秘密 本地服务向Service Manager注册为IPC服务端13秘密 启动Android的管理服务14秘密 Android的管理服务向本地服务管理注册15秘密 当SystemService加载了所有的系统服务后就意味着系统就准备好了,它会 向所有服务发送一个系统准备完毕(systemready) 广播。SystemService 系统服务进程的启动流程如图1-6所示。当ActivityManagerService 接收到 systemready广播后,会向Zygoute进程发送创建Dalvik 虚拟机实例的请求 ,Zygote进程会负责生成一个新的Dalvik 虚拟机实例,然后 ActivityManagerService在系统中查找具有属性的Activity,并启动它。 ActivityManagerService同时也会使用同样的方法启动Contacts(联系人) 应用程序。七、启动Home Launcher16秘密 Q & AThanks!
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号