《Android的设计与实现:卷I》——第3章 3.3init进程的执行过程

3.3 init进程的执行过程

init进程是用户空间的第一个进程,进程号为1。Android世界中,很多重要的工作都是从它开始的。
init进程相关源码位于/system/core/init目录下,从其编译文件Android.mk中可以看到这部分源代码最终被编译为可执行文件init,代码如下:




注意 pollfd是Linux中定义的结构体,用于存放需要监控事件的文件描述符,其定义如下:
struct pollfd {
int fd; //需要监控的文件描述符
short events; //监控fd上的事件,由调用方设置

short revents;    //fd上发生过的事件,由返回方设置
};

poll的函数原型如下:

int poll(struct pollfd fds[], nfds_t nfds, int timeout);

nfds:用于标记fds[]中结构体元素的总数。

timeout:用于标记poll函数调用的阻塞事件,单位是毫秒。如果timeout=0,则poll不阻塞,直接返回。poll返回fds中revents不为0的fd个数;如果超时没有任何事件发生,返回0;失败时,返回-1。
通过对init.c文件中main函数的分析,可以将init的执行过程分为以下四个阶段:

1)初始化文件系统和日志系统,为之后的执行阶段做准备。这部分主要是Linux标准函数的调用。

2)解析 init.rc和init..rc初始化文件。

3)触发需要执行的Action和Service。

4)init循环监听处理事件。init触发所有Action后,进入一个无限循环,执行在可执行队列中的命令,重启异常退出的Service,并循环处理来自property service(属性服务)、signal和keychord的事件。

第一阶段很容易理解,都是基本的Linux函数调用。接下来,将针对其余三个阶段详细讲解init的运行过程。

时间: 2024-09-20 14:50:28

《Android的设计与实现:卷I》——第3章 3.3init进程的执行过程的相关文章

《Android的设计与实现:卷I》——第3章 3.2Kernel启动过程

3.2 Kernel启动过程 Android Kernel启动过程与标准Linux Kernel的启动过程基本一致,都是对start_kernel函数的调用和执行.本节将分析Android正常启动流程的第二步:Kernel启动过程. 本节涉及的源码文件如下: kernel/arch/arm/kernel/head.Skernel /arch/arm/kernel/head-common.Skernel/init/main.cKernel启动过程分为两个阶段: 1)内核引导阶段.通常使用汇编语言编

《Android的设计与实现:卷I》——第3章 3.5触发并启动Action和Service

3.5 触发并启动Action和Service init解析init.rc后,生成了存放Service和Action的链表.那么init又是如何控制这些Action和Service的呢?本节将详细分析这部分内容. 3.5.1 触发Action init解析完init.rc后,接着执行了action_for_each_trigger和queue_builtin_action.这两个函数做了些什么呢? 首先定位到action_for_each_trigger,其实现代码位于init_parser.c

《Android的设计与实现:卷I》——第1章 1.3Android源码下载和编译

1.3 Android源码下载和编译 Android源码的开发需要Linux环境,读者可以安装Ubuntu 10.04及其后续版本,推荐安装Ubuntu的10.04或者12.04这两个LTS(长期技术支持)版本.本书基于Jelly Bean(Android 4.1)分析源代码,该部分源代码的编译需要64位操作系统环境.本节将介绍如何在Ubuntu 12.04(LTS)-64bit上搭建Android源码开发所需环境,这是保障后续步骤能够顺利进行的前提条件,必须准确无误.Android源码分成上层

《Android的设计与实现:卷I》——第3章 Android启动过程的底层实现

第3章 Android启动过程的底层实现 Android支持多种启动模式,主要有正常模式(normal mode).安全模式(safe mode).恢复模式(recovery mode).工厂模式(factory mode).快速启动模式(fastboot mode)等.除正常模式外,都是刷机或者测试模式,本书只讲解正常模式下Android的启动过程.如果读者对其他启动模式感兴趣,可以自行查阅相关资料. 3.1 Android正常模式启动流程 Android的正常模式启动流程大体如下:步骤1 系

Android UI设计的幻灯片:新的UI设计模式

文章描述:谷歌Android UI设计技巧:新的UI设计模式. 本系列文章原是Android的官方开发者博客的一份Android UI设计的幻灯片,51CTO的译者将这份教程5部分进行翻译整理,希望对Android开发者能有帮助.本文为<谷歌Android UI设计技巧>第四部分:新的UI设计模式. 本文为<谷歌Android UI设计技巧>第四部分:新的UI设计模式. [1] [2]  下一页

Android UI设计的幻灯片:图标与指导说明

文章描述:谷歌Android UI设计技巧:图标与指导说明. 本系列文章原是Android的官方开发者博客的一份Android UI设计的幻灯片,51CTO的译者将这份教程5部分进行翻译整理,希望对Android开发者能有帮助.本文为<谷歌Android UI设计技巧>第五部分也就是最后一部分:图标与指导说明. 本文为<谷歌Android UI设计技巧>第五部分也就是最后一部分:图标与指导说明.

Android应用设计:选项菜单Options Menu

文章描述:Android硬体键交互之"选项菜单". 众所周知Android没有明确的GuideLine,虽说没有严格的规范来限制设计与创新很赞,但这也导致市场上的Android应用设计上的混乱.一个典型例子就是选项菜单Options Menu. 混乱的菜单 Android机器采用的硬体键来呼出菜单,这种方式在表现上隐性的,用户对于何种情况下可以呼出何种菜单没有预见性,甚至是否可以呼出菜单都没有预期.   如何解决 为降低用户的认知成本,建议设计中遵循以下方式. Question 1:何

谷歌Android UI设计技巧:新的UI设计模式

本系列文章原是Android的官方开发者博客的一份Android UI设计的幻灯片,51CTO的译者将这份教程5部分进行翻译整理,希望对Android开发者能有帮助.本文为<谷歌Android UI设计技巧>第四部分:新的UI设计模式. 本文为<谷歌Android UI设计技巧>第四部分:新的UI设计模式.

谷歌Android UI设计技巧:框架特性

本系列文章原是Android的官方开发者博客的一份Android UI设计的幻灯片,51CTO的译者将这份教程5部分进行翻译整理,希望对Android开发者能有帮助.本文为<谷歌Android UI设计技巧>第三部分:框架特性. 本文为<谷歌Android UI设计技巧>第三部分:框架特性. 注:相对布局和线性布局是Android里面常用的两种布局,线性布局比较简单,而相对布局可以做出比较复杂的布局管理,所以仅仅了解线性布局,很多时候是不够的.不过以作者之前Qt的经验来看,Andr