事先声明本文为作者本人记录学习使用
其中部分文字或者技术观点摘自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

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

被折叠的 条评论
为什么被折叠?



