解析Android init.rc文件:关键点与语法规范详解

3 下载量 198 浏览量 更新于2024-08-31 收藏 66KB PDF 举报
在Android系统中,init.rc文件起着至关重要的作用,它是初始化进程启动脚本,用于配置和管理系统的各种服务和任务。本文将深入剖析init.rc文件的解析过程,重点集中在onaction部分,以及如何理解init.rc的语法规则。 解析init.rc文件主要在system/core/init/init_parser.c中的parse_config()函数内进行。整个解析过程分为以下几个步骤: 1. **扫描与预处理**: - 读取init.rc文件时,会跳过以#号开头的注释行,以及空格、制表符、回车符和换行符等空白字符。 - TEXT类型的令牌被视为有效内容,直至遇到空格、制表符、回车或换行,这些都被视为TEXT的结束标志。 2. **构建参数数组**: - 每个遇到的TEXT令牌都会被添加到args数组中,作为后续处理的基础。 3. **根据关键字切换解析函数**: - 遇到新的一行(换行符)时,根据args[0]的内容(关键字)执行不同的解析函数: - 对于'on'关键字后跟的section(如'onboot', 'onreboot'等),会调用parse_new_section()并设置解析函数为parse_line_action(),用于处理action相关命令。 - 对于'service'关键字后的section,调用parse_service(),设置解析函数为parse_line_service(),处理服务相关的配置。 4. **具体解析函数的应用**: - onsection内的命令行调用parse_line_action(),这可能包括启动、停止、运行等操作。 - servicesection内的命令行调用parse_line_service(),涉及到服务的启动、属性设置等。 文章还提及了关键数据类型和定义,例如Token类型(T_EOF、T_TEXT和T_NEWLINE),以及关键字的定义,如capability、chdir、chroot等,每个关键字都有其对应的命令类型(COMMAND)和执行函数(如do_chdir和do_chroot)。 理解init.rc文件的解析过程对于开发者来说至关重要,因为它直接影响到系统的启动顺序和服务配置。掌握这些细节有助于确保系统按预期运行,并能更高效地管理和维护Android设备的初始化流程。