Android 音频源码分析——audioserver启动

本文详细分析了Android系统中audioserver的启动流程,从加载audioserver.rc开始,到启动audioserver进程,重点探讨了AudioFlinger和AudioPolicyService的初始化过程,包括注册到ServiceManager、创建线程及加载音频配置文件等关键步骤。
摘要由CSDN通过智能技术生成

Android 音频源码分析——AndroidRecord录音(一)
Android 音频源码分析——AndroidRecord录音(二)
Android 音频源码分析——AndroidRecord音频数据传输流程
Android 音频源码分析——audioserver启动

该源码分析基于android9.0

 Android音频系统中,有两大service:AudioFlinger和AudioPolicy,这两个服务都运行在audioservr进程中。这里来整理以下audioserver启动流程。

一、 加载audioserver.rc

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 目录下。

二、 启动audioserver进程

看一下audioserver.rc文件,init进程中加载audioserver.rc文件,并启动audioserver进程。

frameworks/av/media/audioserver/audioserver.rc

service audioserver /system/bin/audioserver
    class core
    user audioserver  #设置所有者
    # media gid needed for /dev/fm (radio) and for /data/misc/media (tee)
    group audio camera drmrpc inet media mediadrm net_bt net_bt_admin net_bw_acct  #设置所属组
    ioprio rt 4  #io优先级
    writepid /dev/cpuset/foreground/tasks /dev/stune/foreground/tasks
    onrestart restart vendor.audio-hal-2-0
    # Keep the original service name for backward compatibility when upgrading
    # O-MR1 devices with framework-only.
    onrestart restart audio-hal-2-0   #重启该进程时,执行restart audio-hal-2-0命令

on property:vts.native_server.on=1
    stop audioserver
on property:vts.native_server.on=0
    start audioserver
   

三、 audioserver main

frameworks/av/media/audioserver/main_audioserver.cpp

int main(int argc __unused, 
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值