首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Android系统启动进程

2012-09-27 
Android系统启动过程Android系统启动过程首先Android框架架构图:(来自网上,我觉得这张图看起来很清晰)Linu

Android系统启动过程

Android系统启动过程

首先Android框架架构图:(来自网上,我觉得这张图看起来很清晰)

Android系统启动进程

Linux内核启动之后就到Android Init进程,进而启动Android相关的服务和应用。

启动的过程如下图所示:(图片来自网上,后面有地址)

?Android系统启动进程


下面将从Android4.0源码中,和网络达人对此的总结中,对此过程加以学习了解和总结,

以下学习过程中代码片段中均有省略不完整,请参照源码。

?

一 Init进程的启动

init进程,它是一个由内核启动的用户级进程。内核自行启动(已经被载入内存,开始运行,

并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。init始终是第一个进程。

启动过程就是代码init.c中main函数执行过程:system\core\init\init.c

在函数中执行了:文件夹建立,挂载,rc文件解析,属性设置,启动服务,执行动作,socket监听……

下面看两个重要的过程:rc文件解析和服务启动。

1 rc文件解析

.rc文件是Android使用的初始化脚本文件 (System/Core/Init/readme.txt中有描述:

four broad classes of statements which are Actions, Commands, Services, and Options.)

其中Command 就是系统支持的一系列命令,如:export,hostname,mkdir,mount,等等,其中一部分是 linux 命令,

还有一些是 android 添加的,如:class_start <serviceclass>: 启动服务,class_stop <serviceclass>:关闭服务,等等。

其中Options是针对 Service 的选项的。

系统初始化要触发的动作和要启动的服务及其各自属性都在rc脚本文件中定义。 具体看一下启动脚本:\system\core\rootdir\init.rc

?????? 在解析rc脚本文件时,将相应的类型放入各自的List中:

\system\core\init\Init_parser.c? :init_parse_config_file( )存入到

action_queue、?? action_list、 service_list中,解析过程可以看一下parse_config函数,类似状态机形式挺有意思。

这其中包含了服务:adbd、servicemanager、vold、ril-daemon、debuggerd、surfaceflinger、zygote、media……

2 服务启动

?????? 文件解析完成之后将service放入到service_list中。system/core/init/init.c中:

); }}class AppRuntime : public AndroidRuntime{};

?

(2) 接着到了AndroidRuntime类中:

frameworks\base\core\jni\AndroidRuntime.cpp

?

参考文档:

? ??http://blog.csdn.net/maxleng/article/details/5508372

??? http://www.cnblogs.com/linucos/archive/2012/05/22/2513760.html#commentform

????http://www.cnblogs.com/idiottiger/archive/2012/05/25/2516295.html

热点排行