赞
踩
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。