深入浅出 - Android系统移植与平台开发(四)- Android启动流程
作者:唐老师,华清远见嵌入式学院讲师。
一、Android init进程启动
还是从Linux的启动开始吧。Linux被bootloader加载到了内存之后,开始运行,在初始化完 Linux运行环境之后,挂载ramdisk.img根文件系统映像,运行里面的init程序,这也是Linux的第一个用户程序,其pid为1。下面的 文章是作者关于init进程启动的描述。
http://blog.csdn.net/mr_raptor/article/details/7666906
二、Android本地服务的启动
init进程启动完之后,开始初始化并启动Dalvik虚拟机,在Dalvik虚拟机启动之前做了一些工作,请看下面一篇文章。
http://blog.csdn.net/mr_raptor/article/details/7804984
Android启动总结:
init进程在执行过程中可以分为以下几个阶段:
Ø 启动准备:创建文件系统的基本目录、打开标准输入、标准输出、标准错误,初始化log日志功能等
Ø 解析init.rc和init.hardware.rc文件:将rc文件逐行解析成Action或Service。解析出来的Action和 Service分别存放在action_list和service_list链表里,每个Action都对应一个或多个Commands,每个依附于 Action的Commands也由一个链表维护。
Ø 将early-initAction添加到action_queue队列里,等待执行
Ø 将init Action添加到action_queue队列里,等待执行
Ø 添加其它条件的Action到action_queue队列里
Ø 进入死循环
o 从action_queue队列里依次取出每个Action,执行其维护的Commands链表里的命令
o 重新启动service_list中标记为SVC_RESTARTING服务
o 监听系统属性状态变化事件、子进程信号、Keychord组合按键事件
注:在代码里没有明显运行service_list里服务的代码,每个服务都有一个class属性,该属性决定了服务的分类,在init.rc文件的on boot Action最后有两个命令:
[plain] view plaincopy
1. on boot
2. …
3. ...
4. class_start core
5. class_start main
class_start命令是指运行某一类的服务,先启动了class为core的服务,然后再启动了class为main的服务。
init.rc中class为core的服务有:
| Service名 | 对应程序及参数 |
| ueventd | /sbin/ueventd |
| console | /system/bin/sh |
| adbd | /sbin/adbd |
| servicemanager | /system/bin/servicemanager |
| vold | /system/bin/vold |
class为main的服务有:
| Service名 | 对应程序及参数 |
| netd | /system/bin/netd |
| debuggerd | /system/bin/debuggerd |
| ril-daemon | /system/bin/rild |
| surfaceflinger | /system/bin/surfaceflinger |
| zygote | /system/bin/app_process -Xzygote /system/bin --zygote--start-system-server |
| drm | /system/bin/drmserver |
| media | /system/bin/mediaserver |
| bootanim | /system/bin/bootanimation |
| dbus | /system/bin/dbus-daemon --system --nofork |
| bluetoothd | /system/bin/bluetoothd -n |
| installd | /system/bin/installd |
| flash_recovery | /system/etc/install-recovery.sh |
| racoon | /system/bin/racoon |
| mtpd | /system/bin/mtpd |
| keystore | /system/bin/keystore /data/misc/keystore |
| dumpstate | /system/bin/dumpstate -s |
文章来源:华清远见嵌入式学院,原文地址:http://www.embedu.org/Column/Column651.htm
深入浅出 - Android系统移植与平台开发(四)- Android启动流程的更多相关文章
- 深入浅出 - Android系统移植与平台开发(一)
深入浅出 - Android系统移植与平台开发(一) 分类: Android移植2012-09-05 14:16 16173人阅读 评论(12) 收藏 举报 androidgitgooglejdkub ...
- 深入浅出 - Android系统移植与平台开发(五)- 编译Android源码(转)
2.3编译Android源码 Android源码体积非常庞大,由Dalvik虚拟机.Linux内核.编译系统.框架代码.Android定制C库.测试套件.系统应用程序等部分组成,在编译Android源 ...
- 深入浅出 - Android系统移植与平台开发(九)- Android系统system_server及Home启动
3.3 Zygote守护进程与system_server进程 Android的执行环境和Java执行环境有着本质的差别,在Android系统中每一个应用程序都是一独立的进程,当一个进程死掉时,不会影响 ...
- 深入浅出 - Android系统移植与平台开发(十)- Android编译系统与定制Android平台系统(瘋耔修改篇二)
第四章.Android编译系统与定制Android平台系统 4.1Android编译系统 Android的源码由几十万个文件构成,这些文件之间有的相互依赖,有的又相互独立,它们按功能或类型又被放到不同 ...
- 深入浅出 - Android系统移植与平台开发(十一)- Android系统的定制(瘋耔修改篇一)
首先非常感谢原文作者为我们提供的知识库,因为有你们的贡献,我们的开发难度更显简单 原文 : http://blog.csdn.net/mr_raptor/article/details/30113 ...
- 深入浅出-Android系统移植与平台开发(一)- Android4.0系统的下载与编译
作者:唐老师,华清远见嵌入式学院讲师. 一.Android4.0系统的下载与编译 Android系统的下载与编译,Google的官方网站上已经给出了详细的说明,请参照Android的官方网址: htt ...
- 深入浅出 - Android系统移植与平台开发(三)- 编译并运行Android4.0模拟器
作者:唐老师,华清远见嵌入式学院讲师. 1. 编译Android模拟器 在Ubuntu下,我们可以在源码里编译出自己的模拟器及SDK等编译工具,当然这个和在windows里下载的看起来没有什么区别 ...
- 深入浅出 - Android系统移植与平台开发(十二)- Android JNI机制
第五章.JNI机制 4.1 JNI概述 由前面基础知识可知,Android的应用层由Java语言编写,Framework框架层则是由Java代码与C/C++语言实现,之所以由两种不同的语言组合开发框架 ...
- 深入浅出 - Android系统移植与平台开发(十一) - Sensor HAL框架分析之一
作者:唐老师,华清远见嵌入式学院讲师. 1. Sensor的概念 Sensor即传感器,在当前智能手机上大量存在:G-Sensor.LightsSensor. ProximitySensor.Temp ...
- 深入浅出 - Android系统移植与平台开发(二) - 准备Android开发环境
作者:唐老师,华清远见嵌入式学院讲师. 编译Android源码 关于android系统的编译,Android的官方网站上也给出了详细的说明.http://source.android.com/sour ...
随机推荐
- 攻城狮在路上(贰) Spring(一)--- 软件环境、参考书目等一览表
一.软件环境: 二.参考书目: <Spring 3.X 企业应用开发实战> 陈雄华.林开雄著 电子工业出版社出版 三.其他说明: spring 源码地址:https://github.co ...
- 攻城狮在路上(壹) Hibernate(五)--- 映射一对多关联关系
关联是有方向的,包含单向关联和双向关联.分别讨论.本文以客户Customer和订单Order来进行讨论:一个Customer有多个Order,每个Order对应一个Customer. Customer ...
- Vue入门笔记#数据绑定语法
#数据绑定语法# #文本: 数据绑定的基础表型形式,使用“Mustache”语法(双大括号)(特意查了一下Mustache同“moustache”释义为:髭:上唇的胡子,小胡子,最起码我觉得挺形象的) ...
- Codeforces Round #103 (Div. 2) D. Missile Silos(spfa + 枚举边)
题目链接:http://codeforces.com/problemset/problem/144/D 思路:首先spfa求出中心点S到其余每个顶点的距离,统计各顶点到中心点的距离为L的点,然后就是要 ...
- Socket 通讯
#import "ViewController.h" #import <sys/socket.h> #import <netinet/in.h> #impo ...
- SQL..如何用命令删除数据库中所有的表?
要删除所有的用户表: declare @sql varchar(8000) SELECT @sql='drop table ' + name FROM sysobjects WHERE (type = ...
- AJAX案例四:省市联动
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...
- C语言常用知识
跳出for循环主要有以下2中方式: 1.用break语句.如: int i; for(i=0; i<10; i++) { if(i>3) // 如果i>3,跳出for循 ...
- WinForm使用WebBrowser操作HTML页面的Element
前言 在 Window Form 应用程序如果需要浏览网页时可以崁入 WebBrowser 控件,但如果需要操作崁入的 HTML 的网页元素,就需要额外的操作,以下纪录几种操作 HTML 元素的方法以 ...
- 【HTML+CSS】七小时快速入门~~~~~~~
由于网络化的原因,学习很方便,但是也由于太方便了,学习资料很多会给刚想要入门却没有什么自制力的初学者造成困难,我自己来说学html和css先看了一本书,后来又辗转在慕课网.w3cschool等学习网站 ...