Android 音频源码分析——audioserver启动_奋斗的菜鸟ing-CSDN博客_android audioserver 启动
Android系统启动:加载引导程序-》引导程序-》Linux内核启动-》启动init进程-》zygote进程-》SystemServer-》Launcher。
init进程对应main函数
system/core/init/init.cpp
int main(int argc, char** argv) {
//......
LoadBootScripts(am, sm);
//......
}
接着看LoadBootScripts
static void LoadBootScripts(ActionManager& action_manager, ServiceList& service_list) {
Parser parser = CreateParser(action_manager, service_list);
std::string bootscript = GetProperty("ro.boot.init_rc", "");
if (bootscript.empty()) {
parser.ParseConfig("/init.rc");
if (!parser.ParseConfig("/system/etc/init")) {
late_import_paths.emplace_back("/system/etc/init");
}
if (!parser.ParseConfig("/product/etc/init")) {
late_import_paths.emplace_back("/product/etc/init");
}
if (!parser.ParseConfig("/odm/etc/init")) {
late_import_paths.emplace_back("/odm/etc/init");
}
if (!parser.ParseConfig("/vendor/etc/init")) {
late_import_paths.emplace_back("/vendor/etc/init");
}
} else {
parser.ParseConfig(bootscript);
}
}
LoadBootScrips,会首先加载init.rc文件,然后会加载/system/etc/init/、/product/etc/init/、/odm/etc/init/、/vendor/etc/init目录下的rc文件。而audioserver.rc位于/system/etc/init 目录下
加载init.rc时
2.1.5 init 启动Zygote
讲完了解析Service ,接下来该讲in it 是如何启动Service 的,在这里主要讲解启动Zygote
这个Serv i ce 。在Zygote 的启动脚本中,我们可知Zygote 的classname 为main 。在init.rc
中有如下配置代码:
system/core/rootd ir/init. re
on nonencrypted
exec_start update_verifier_nonencrypted
start netd/ /1
start zygote
start zygote_secondary
这里会启动zygote
之后,解析/system/etc/init路径下的rc文件,其中包含audioserver.rc
看一下audioserver.rc文件,init进程中加载audioserver.rc文件,并启动audioserver进程。
frameworks/av/media/audioserver/audioserver.rc