作者:唐老师,华清远见嵌入式学院讲师。

一、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启动流程相关推荐

  1. 深入浅出 - Android系统移植与平台开发(十)- Android编译系统与定制Android平台系统(瘋耔修改篇二)...

    第四章.Android编译系统与定制Android平台系统 4.1Android编译系统 Android的源码由几十万个文件构成,这些文件之间有的相互依赖,有的又相互独立,它们按功能或类型又被放到不同 ...

  2. 深入浅出 - Android系统移植与平台开发(十)- Android编译系统与定制Android平台系统

    第四章.Android编译系统与定制Android平台系统 4.1Android编译系统 Android的源码由几十万个文件构成,这些文件之间有的相互依赖,有的又相互独立,它们按功能或类型又被放到不同 ...

  3. 深入浅出 - Android系统移植与平台开发(一)

    +-------------------------------------------------+ +      本系列为连载,不定期会更新       + +------------------ ...

  4. 深入浅出 - Android系统移植与平台开发(十三)- Android的对象管理

    第六章.Android的对象管理 在Java中,不再使用的对象会通过gc机制来自己主动回收.而Android系统执行时库层代码是由C++编写的,在C++中创建的对象通常使用指针来操作,一旦使用不当.轻 ...

  5. 深入浅出 - Android系统移植与平台开发(六)- 为Android启动加速【转】

    本文转载自:http://blog.csdn.net/mr_raptor/article/details/8006721 Android的启动速度一直以来是他的诟病,虽然现在Android设备的硬件速 ...

  6. 深入浅出 - Android系统移植与平台开发(五)- 定制手机模拟器ROM

    作者:唐老师,华清远见嵌入式学院讲师. 一. 修改化定制Android4.0系统 Android系统启动时,先加载Linux内核,在Linux的framebuffer驱动里可以定制开机界面,Linux ...

  7. 深入浅出 - Android系统移植与平台开发(二) - 准备Android开发环境

    编译Android源码 关于android系统的编译,Android的官方网站上也给出了详细的说明. http://source.android.com/source/building.html Ø  ...

  8. Android系统移植与驱动开发概述

    1.Android系统架构分为四层:linux内核,Android是基于linux内核的. c/c++代码库,包括C/C++编写的代码库,包括dalivk虚拟机的运行时. Android SDK AP ...

  9. Android系统(244)---Zygote进程的启动流程

    Android进程系列第二篇---Zygote进程的启动流程 内容预览.png 概述: 本文(基于Android O源码)主要讲解Zygote进程创建流程,线程容易创建,但进程的相关的东西都被系统很好 ...

  10. Android 系统(246)---SystemServer进程的启动流程

    Android进程系列第四篇---SystemServer进程的启动流程 一.内容预览 内容预览.png 二.概述 前面进程系列已经更新了三篇,本文(基于Android O源码),第三篇中System ...

最新文章

  1. 无处不在的 AWS 云计算
  2. boost::mp11::mp_plus相关用法的测试程序
  3. 201771010125王瑜《面向对象程序设计(Java)》第六周学习总结
  4. 【theano-windows】学习笔记十九——循环神经网络
  5. asp.net core使用serilog将日志推送到腾讯云日志服务
  6. mybatis + spring boot + yml 配置,告别XML
  7. linux MISC 驱动模型分析
  8. orangepi自启动打开一个终端并且运行脚本
  9. MacOs中Docker与宿主机网络互通问题解决
  10. LeetCode_Maximum Subarray | Maximum Product Subarray
  11. 20系列显卡服务器,RTX20系列被严重低估,他不仅是一张游戏显卡
  12. 【数据分析案例】美国2015-2018年牛油果销售数据分析
  13. docker 创建容器时指定容器ip
  14. js处理有序列表、js处理无序列表
  15. 超融合架构 — Hyper Converged Infrastructure 小记
  16. Acrobat Pro DC 教程:了解 Acrobat Pro DC 界面
  17. layuiadmin 模版渲染完成执行 lay-done 写到 controller(js业务模块文件) 首次无法执行的解决方法
  18. 现代通信概论 期末考试题集合
  19. Jenkins:项目持续集成管理
  20. 小偷咋这么快破解了银行卡密码

热门文章

  1. IOS时间格式问题调试与解决
  2. Tautology (logic)介绍
  3. Java学习练习题11:Java习题及代码11
  4. 最新android版本叫什么,Android版本今年将大更新,迈入10.0时代,新特性曝光
  5. 揭秘阿里CDN核心技术(http://wenku.baidu.com/view/ffc63474b4daa58da1114a45.html?re=view)
  6. 2020年,谁还在中国卖手机?
  7. JavaScript正则表达式匹配中英文以及常用标点符号白名单写法
  8. 从零开始学python第八篇
  9. 六、Python函数
  10. apscheduler任务配置信息,实现100%数据库化