Android Framework启动流程分析

Android Framework启动流程分析
Android手机系统本质上是一个基于Linux的应用程序,它以Linux系统为内核。系统的启动过程包括Linux内核启动和Android框架启动两个阶段,本文主要介绍Android 框架(Framework)启动阶段。
一、Linux内核启动
1、装载引导程序bootloader
Linux内核启动时首先装载执行bootloader引导程序,装载完成后进入内核程序。
2、加载Linux内核
Linux内核加载主要包括初始化kernel核心(内存初始化,打开中断,初始化进程表等)、初始化驱动、启动内核后台(daemons)线程、安装根(root)文件系统等。
Linux加载的最后阶段启动执行第一个用户级进程init(内核引导参数上一般都会设置“init=/init”,由kernel自动执行,PID为1,是所有进程的父进程)。由此进入Android框架的启动阶段。
二、Android框架启动
Android框架的启动始于init进程,这个阶段也是本文要重点讲解的。启动过程可以分为以下几个主要的阶段:
1、init进程启动
2、init.rc脚本启动
3、zygote服务启动
4、System Server进程启动
5、Home应用启动
下图示出了Android Framework框架的启动流程:

 注:图片来源:![http://yelinsen.iteye.com/blog/1017352](http://yelinsen.iteye.com/blog/1017352)

1、init进程启动

 init进程是Android系统的入口,它会以后台进程(daemon)的形式一直存在。该进程的程序源码在目录system/core/init中,入口函数是init.c:main()。主要有如下功能:

  1)创建/安装设备文件/进程文件/系统文件节点;
  2)解析init.rc和init.hardware.rc;
  3)启动脚本中指定的服务,执行指定的命令或动作;
  4)作为守护进程循环检查是否有action需要执行、是否需要重启某服务等。
详细代码可以参考init.c中入口函数main的实现。
2、init.rc脚本启动

 init.rc文件是Android系统的重要配置文件,位于/system/core/rootdir/目录中。主要功能是定义了系统启动时需要执行的一系列action及service:执行特定动作、设置环境变量和属性和执行特定的service。该脚本在init进程的init.c:main函数中解析并启动。代码如下:

init_parse_config_file("/init.rc");
......
get_hardware_name(hardware, &revision);
snprintf(tmp, sizeof(tmp), "/init.%s.rc", hardware);
init_parse_config_file(tmp);
......
for(;;) {
    int nr, i, timeout = -1;

    execute_one_command();
    restart_processes();

    if (!property_set_fd_init && get_property_set_fd() > 0) {
        ufds[fd_count].fd = get_property_set_fd();
        ufds[fd_count].events = POLLIN;
        ufds[fd_count].revents = 0;
        fd_count++;
        property_set_fd_init = 1;
    }
    if (!signal_fd_init && get_signal_fd() > 0) {
        ufds[fd_count].fd = get_signal_fd();
        ufds[fd_count].events = POLLIN;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值