android8.1系统启动过程(四) 解析init.rc

本文详细介绍了Android系统从.init.rc文件解析服务、动作和导入的流程,包括ServiceParser、ActionParser和ImportParser的作用。解析完成后,系统通过EventTrigger和BuiltinAction来安排执行必要的Action和服务。在无限循环中,系统不断检查并执行符合条件的Action,同时处理服务的启动和重启。解析和执行过程涉及系统启动的关键步骤。

事先声明本文为作者本人记录学习使用

其中部分文字或者技术观点摘自https://blog.csdn.net/marshal_zsx/article/details/80600622  这里推荐此作者文章


main(int argc, char** argv)  AOSP/system/core/init/init.cpp

 这三句代码都是new一个Parser(解析器),然后将它们放到一个map里存起来  ServiceParser、ActionParser、ImportParser分别对应service action import的解析

parser.AddSectionParser("service", std::make_unique<ServiceParser>(&sm));
parser.AddSectionParser("on", std::make_unique<ActionParser>(&am));
parser.AddSectionParser("import", std::make_unique<ImportParser>(&parser));
...
parser.ParseConfig("/init.rc");

ParseConfig()  AOSP/system/core/init/init_parser.cpp

判断是文件还是Dir或者是File  文件调用ParseConfigFile


ParseConfigFile()  AOSP/system/core/init/init_parser.cpp  

取出数据调用  ParseData(path, data);


ParseData(path, data)  AOSP/platform/system/core/init/init_parser.cpp

取出对应的parser  解析对应的Section

section_parser = section_parsers_[args[0]].get();
std::string ret_err;
if (!section_parser->ParseSection(std::move(args), filename, state.line, &ret_err)) {
  LOG(ERROR) << filename << ": " << state.line << ": " << ret_err;
  section_parser = nullp
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值