Android启动深度解析:从init到属性系统

需积分: 0 1 下载量 37 浏览量 更新于2024-07-10 收藏 464KB PPT 举报
"属性系统宏观图-Android启动过程分析" Android系统的启动是一个复杂的过程,它始于Linux内核的加载,随后由init进程接手,进行一系列关键进程的创建和初始化。在这一过程中,属性系统扮演了重要的角色,它类似于Windows中的注册表,用于存储和管理系统的关键参数。 首先,Android系统启动时,Linux内核被加载,紧接着引导加载器会启动init进程。init进程是用户空间的第一个进程,其进程号为1,可以通过`ps`命令查看。这个进程的主要任务包括创建系统关键进程,如Zygote进程,以及初始化和管理属性系统。 init进程的入口点位于`system\core\init\init.c`文件的`main`函数中。它的工作流程主要分为四个步骤: 1. 解析配置文件:init进程会解析`init.rc`和设备特定的配置文件(如`init.sp6820a.rc`),这些文件定义了启动时需要执行的各个服务和动作。 2. 执行动作:根据配置文件的内容,init进程会执行预定义的阶段,包括启动Zygote进程。 3. 初始化属性系统:调用`property_init()`函数初始化属性资源,接着通过`property_start_service()`启动属性服务。 4. 监听事件:init进程进入一个无限循环,监听来自socket或属性服务器的事件。 Zygote进程是由init进程通过解析`init.rc`文件内容启动的,使用`service_start`函数并通过`fork`和`execv`创建。Zygote是所有Android应用进程的父进程,它预先加载并缓存系统库,以提高启动新应用的效率。 属性服务(propertyservice)是Android系统中用来管理属性的组件。它提供了一种键值对的存储方式,类似Windows的注册表。开发者可以通过`adb shell getprop`获取属性值,用`adb shell setprop`设置属性值。在源码中,`property_init()`和`start_property_service()`是与属性服务启动相关的函数。 属性系统的工作原理是这样的:属性读取进程(propertyconsumer)将共享内存映射到自己的进程空间,直接读取属性值;而属性设置进程(propertysetter)虽然也能加载共享内存,但不能直接修改。当需要设置或更改属性时,它通过Unix Socket发送属性请求给PropertyService,PropertyService则负责将变更写入共享内存和属性文件。 Android启动过程涉及多个层次的初始化和管理,其中属性系统作为核心组件之一,确保了系统参数的有效管理和通信。通过深入理解这个过程,开发者可以更好地优化系统性能和调试问题。