[Linux Audio Driver] ACDB文件加载流程(一)

【Audio Driver】ACDB文件加载 ADCB文件分析 文件目录 加载流程 文件信息存放在哪 文件名 解析后的数据 解析acdb文件函数 ACDB Loader acdb文件如何修改 补充 wsa状态判断 acdb文件分析路径分析 hwdep_send_cal函数处理 如何获取acdb文件 1 acdb介绍 参考文章:qcom 音频相关的dsp driver笔记(基于msm8996平台) 这个文章介绍的特别详细。 acdb,全称:au... 阅读详情
AI摘要

本文深入探讨了Qualcomm平台下Android7系统中声卡信息的获取过程,特别是snd_card_name变量的赋值机制。通过跟踪platform_init函数及mixer_get_name函数,详细解析了声卡名称从结构体中提取的流程。

声卡信息是acdb加载中最重要的信息,本文追踪代码,解释声卡名如何被取出来使用的;

环境: Qualcomm平台,android7 , 内核版本:msm-3.18

1. platform_init函数

代码路径:
hardware/qcom/audio/hal/msm8916/platform.c

void *platform_init(struct audio_device *adev)

   ->snd_card_name = mixer_get_name(adev->mixer);

今天就只聊这句代码:

snd_card_name = mixer_get_name(adev->mixer);

2. 说正事前,扯点别的(凑点字数。。。。)

在这里插入图片描述

首先这个函数的定义就很有意思: void *platform_init(struct audio_device *adev) ,void *的意思是返回任意类型的指针;

其次,platform_init函数里面有很有意思几句代码:

property_get(“persist.audio.fluence.voicerec”,value,"");
if (!strncmp(“true”, value, sizeof(“true”))) {
my_data->fluence_in_voice_rec = true;
}

指针my_data是指向 platform_data 结构体;

struct platform_data *my_data = NULL;

struct platform_data {
    struct audio_device *adev;
    bool fluence_in_spkr_mode;
    bool fluence_in_voice_call;
    bool fluence_in_voice_rec;
    bool fluence_in_audio_rec;
    bool external_spk_1;
    bool external_spk_2;
    bool external_mic;
    int  fluence_type;
    int  fluence_mode;
   ...
}

结构里面的这些布尔变量,与平台对应的.mk对应,编译后会生成build.prop文件;

persist.audio.fluence.voicerec等各种系统属性的true 、false值,对应相应XML文件里面不同的单、双麦配置;

同时也对应相应的acdb(音频数据库),不同voice、audio应用场景下的 acdb id (不同的单、双麦算法),这个会影响负责tuning的同事;

3. mixer_get_name函数

snd_card_name = mixer_get_name(adev->mixer); //  此函数获取声卡名

我发现这个mixer_get_name这个函数很嚣张,我特么找了半天没找到函数原型定义在哪里,

在这里插入图片描述

后来发现是定义在external目录下面 ,编译成静态库被使用的。(static library)

在这里插入图片描述

const char *mixer_get_name(struct mixer *mixer)
{
    return (const char *)mixer->card_info.name;
}

返回 const char *的指针,

4. 下面就是获取声卡,各个结构体的调用框架:

4.1 结构体调用总结:

struct audio_device *adev
          ->struct mixer *mixer;
               ->struct snd_ctl_card_info card_info
                     -> unsigned char name[32];    

4.2 各个结构体以及代码路径

代码路径: hardware/qcom/audio/hal/audio_hw.h

struct audio_device {
    struct audio_hw_device device;
    pthread_mutex_t lock; /* see note below on mutex acquisition order */
    struct mixer *mixer;
    ......
};

./external/tinyalsa/mixer.c

struct mixer {
    int fd;
    struct snd_ctl_card_info card_info;
    struct snd_ctl_elem_info *elem_info;
    struct mixer_ctl *ctl;
    unsigned int count;
};

./external/kernel-headers/original/uapi/sound/asound.h

  struct snd_ctl_card_info {
     int card;           /* card number */
      int pad;            /* reserved for future (was type) */
      unsigned char id[16];       /* ID of card (user selectable) */
      unsigned char driver[16];   /* Driver name */
      unsigned char name[32];     /* Short name of soundcard */
      unsigned char longname[80]; /* name + info text about soundcard */
      unsigned char reserved_[16];    /* reserved for future (was ID of mixer) */
      unsigned char mixername[80];    /* visual mixer identification */
      unsigned char components[128];  
  };

OK,我们可以看到声卡名是从这个结构体里面拿出来的;至于声卡信息怎么存进去的,那又是一个愉(bei)快( shang)的故事了。

5. 作者注

/******
@article{Linux Audio Driver,
Author = { 1byte ≠ 8bit},
Year = { 2020},
}
******/

有时间继续分析,下篇再见…

高通名词解释 TBOX:是汽车⽹络通讯的重要部件,⼀个带通讯功能的盒⼦,内含⼀张SIM卡,配套硬件还有GPS天线、4G天线等,可以提供位置定位、移动⽹络服务。简单理解它就是⼀个内置SIM卡的⽆线WIFI,不同之处是在于它还⽀持拨打电话,⼀般只能拨打常规号码,如:道路救援电话、⼚商客服电话、110等紧急电话。系统级芯片,低端的SOC就是在MCU的基础上加了一些定制化的功能,比如蓝牙协议,Zigbee协议,或者解码功能,和MCU功能上没什么大区别,其他的在差别就是在跑操作系统上。 阅读详情

相关推荐

高通ACDB文件避坑指南:如何快速定位Android音频校准问题?

本文深入解析高通ACDB文件在Android音频校准中的常见问题,提供三大高频问题的解决方案,包括文件路径配置、平台类型误判和声卡匹配失败。通过实用命令和调试技巧,帮助音频工程师快速定位和解决ACDB文件加载问题,提升音频系统调试效率。

weixin_29268385的博客 258

[Linux Audio Driver] ACDB文件加载流程(完结篇)

0 背景 之前两篇文章提到,拿到声卡名字以及在platform.c里面通过dlsym的方式,加载acdb_loader_init_v2函数, 今天继续分析; 代码路径: LA.UM.5.6\vendor\qcom\proprietary\mm-audio\audio-acdb-util\acdb-loader\src\family-b\acdb-loader.c int acdb_loader_...

编程菜汝狗 8714

[Linux Audio Driver] ACDB文件加载路径解析与多硬件兼容实战

本文深入解析了Linux音频驱动中ACDB文件的加载路径与多硬件兼容实战技巧。ACDB文件作为音频校准数据库,对硬件兼容性至关重要。文章详细介绍了加载路径的优先级机制、多硬件适配的关键代码及调试技巧,并探讨了新一代AudioReach架构的变化,帮助开发者解决音频驱动兼容性问题。

weixin_30036289的博客 813

qcom 音频相关的dsp driver笔记(基于msm8996平台)

https://blog.youkuaiyun.com/whshiyun/article/details/81534494

audio usb 541

Linux Audio Driver 排错:acdb id 10 导致喇叭无声的 2 种定位与修复

本文深入解析Linux音频驱动中acdb id 10导致喇叭无声的问题,提供两种有效解决方案:修正DTS硬件检测配置和强制覆盖acdb ID。通过详细的技术分析和实战案例,帮助开发者快速定位和修复音频路由问题,适用于高通平台的嵌入式Linux系统开发。

weixin_29173777的博客 237

[Linux Audio Driver] QACT音频拓扑与模块图定制实战

本文详细介绍了如何使用QACT工具定制Linux音频驱动的音频拓扑与模块图,包括设备识别、拓扑替换、关键模块参数解析及驱动层联调技巧。通过实战案例和参数配置示例,帮助开发者解决音效处理中的常见问题,提升音频驱动调试效率。

weixin_29188997的博客 383

[Linux Audio Driver] ACDB文件加载流程(二)

1.概述 上篇文章,我们通过分析snd_card_name = mixer_get_name(adev->mixer);这句代码,我们拿到了声卡名字,详情见以下超链接: ACDB文件加载流程(一) 然后今天接着分析void *platform_init(struct audio_device *adev)函数,探讨acdb是如何被加载的, 其代码路径是: hardware\qcom\audi...

编程菜汝狗 3254

高通开发系列 - 数字和模拟codec驱动

高通开发系列 - 数字和模拟codec驱动

fulinux的博客 2331

[Linux Audio Driver] 高通音频相关汇总(持续更新)

0. 背景 之前写了一些音频的博客,但是比较散乱,就想着汇总下写的博客,也是对自己知识结构的梳理,这个会持续更新。 1. 代码分析&总结 I2S相关介绍 ACDB文件加载流程(一) ACDB文件加载流程(二) ACDB文件加载流程(完结篇) 高通平台内部MIC_BIAS简介 从设备地址理解 Android7 外部PA Speaker代码结构 MSM8953音频部分设备树调用关系 开启音频kernel内核debug功能 声卡与XML匹配流程 SDM660平台内部CODEC tinyalsa命令总结 S

编程菜汝狗 4965

高通音频驱动调试:SLIMbus配置与ACDB加载实战

SLIMbus是高通平台专用的低功耗音频总线,其控制器初始化是音频子系统启动的前提;ACDB(Audio Calibration Database)则承载硬件级声学校准参数,决定codec能否正确初始化。理解SLIMbus主从通信机制、设备树地址映射规则及ACDB的HWID匹配逻辑,是打通Linux内核侧音频通路的关键。该技术广泛应用于车载信息娱乐(IVI)、智能座舱(如SA8155)、AR/VR音频模块等嵌入式场景。本文聚焦SLIMbus设备树使能、ACDB二进制加载验证与machine driver绑定

weixin_42525632的博客 209

高通音频架构入门:QDSP6、Kernel与HAL三层调试指南

高通音频系统并非标准Linux ALSA的简单移植,而是一个深度耦合DSP与SoC的垂直架构。其核心在于QDSP6(Hexagon数字信号处理器)承担实时音频算法处理,Kernel层通过SLIMbus/PCM驱动和mixer_paths.xml控制通路注册与DAPM开关,HAL层则依据audio_policy.conf完成Android音频策略到硬件控制的翻译。这种三明治式分层设计决定了音频bring-up的本质是跨层协同——QDSP6固件加载失败将导致ALSA无声卡,mixer_paths.xml路径名不

weixin_28721917的博客 258

[Linux Audio Driver] 小技巧找到设备里面acdb文件位置

先按照我下面操作一波 C:\Users\Administrator>adb shell RS51NoGMS:/ # ps -A | grep audio ps -A | grep audio root 357 2 0 0 rescuer_thread 0 S [soc:audio_etm0] audioserver 551 1 36972 10744 binder_thread_read e99150a4 S a.

编程菜汝狗 1187

储能逆变器动态无功补偿:从原理到算法实现

本文深入解析了储能逆变器动态无功补偿的核心原理与算法实现。通过四象限运行与解耦控制技术,储能逆变器可在充放电的同时,快速、精准地调节无功功率,有效提升电网电能质量与功率因数。文章详细阐述了从相位调节、容量限制到PI控制算法的完整技术路径,并结合工程实践,探讨了其在光伏/储能系统中的协同控制策略与进阶应用价值。

weixin_29216353的博客 207

Qcom audio kernel driver

本文详细分析了高通SA8155平台上的声卡注册流程和音频框架实现。主要内容包括: 声卡注册的核心流程snd_soc_instantiate_card(),包括初始化DAI链路、绑定组件、创建PCM设备节点等关键步骤。 音频数据流路径构建机制,通过DAPM(动态音频电源管理)框架将前端DAI、后端DAI和路由组件连接起来,形成完整的音频处理链路。 DPCM(数字PCM)工作机制,实现前端DAI和后端DAI的动态连接,支持灵活的音频路由配置。 硬件参数设置流程,包括hw_params的配置规则和约束条件处理,确

qq_48709036的博客 1065

文华指标源码—区间彩带

这就是当年东方财富软件终端里主打经典的指标、主要揭示主力成本区域。

qq2054129753的博客 889

如何下载era5数据?(两种方式)

供水利大数据云计算课程同学参考使用#

Camiel_sweet的博客 1万+

[Linux Audio Driver] QACT音效处理

随便写篇音频tuning的文档,这是前年实习的时候写的,恍如昨日。 1.概述 QACT(Qualcomm Audio Calibration Tool),高通音频处理工具,本文会介绍常见的acdb设备id以及以喇叭和麦克为例,介绍QACT中常见的音效处理模块。 2.常见acdb设备id介绍 2.1新增音频设备 若要新增一个音频设备的话,首先在hardware/qcom/audio/hal/msm8916/platform.h里面的enum里面增加一个枚举常量,然后在hardware/qcom/audio/h

编程菜汝狗 6231

LTE/NR中的相应cause场景【原创】

目录1.背景2.LTE EMM cause2.0 写在最前2.1 特殊处理的cause第一梯队第二梯队2.2 非特殊处理的cause3.NR cause 实网分析终端被拒等问题,经常遇到各类cause,其会对应不同的终端限制行为。查找已有资料后理解没有很深,自行总结本文用于梳理现象,如有错误敬请指正,转载请注明出处。 本文用于记录协议Ts 24.301及Ts 24.501中的cause及其对应行为。 已总结的cause值: 24.301中的cause分

2301_79567300的博客 3498

[Linux Audio Driver] Audio Frequency Unprocessed Test Fail

GMS测试项:Audio Frequency Unprocessed Test,fail重要修改, patch如下: diff --git a/hardware/qcom/audio/configs/msm8953/mixer_paths_qrd_sku3.xml b/hardware/qcom/audio/configs/msm8953/mixer_paths_qrd_sku3.xml index 4336237..de0fc3b 100755 --- a/hardware/qcom/audio/con

编程菜汝狗 1118

Jetson Nano之CSI摄像头操作方法

jetson端csi摄像头的应用方法

ZONGXP的博客 1万+

YOLOv8独家原创改进:SPPF原创自研创新 | SPPF创新结构,重新设计全局平均池化层和全局最大池化层,增强全局视角信息和不同尺度大小的特征

SPPF_improve利用全局平均池化层和全局最大池化层,加入一些全局背景信息和边缘信息,从而获取全局视角信息并减轻不同尺度大小所带来的影响

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 4684

Android Audio序列2(分析 )

Android Audio序列2(分析 )---Audio系统框架

ListQ的博客 357

【知识图谱】neo4j桌面版安装与配置-解决无法启功问题(2025年最新最全教程)

(经历过各种版本NEO4J,相比社区版而言,个人感觉桌面版更适合新手,安装调试更少更方便。如果是社区版改桌面版的,记得删除系统变量里NEO4J_HOME这个变量,否则会报错。

知识靠谱的博客 2万+

QCOM平台Audio调试

第一步:安装高通平台音频调试工具QACT_v7.1.6,注意安装QACT前需要安装高通的QPST工作,因为QACT是通过QPST工具连接的手机调试的Audio。 第二步:确认你的APK对讲使用的音频“RTC CASE”,并修改相应参数。 第三步:把上面修改后的acdb另存为到本地,替换的板子上面的相应文件后,重启机器,重复上面apk运行的场景,验证是否是你修改的音频参数。 ...

houyizi337825770的专栏 2736

阿里云 Docker 镜像加速收费后:这些免费替代方案值得收藏

阿里云Docker镜像加速服务收费后,国内开发者急需免费替代方案。本文推荐2025年仍可用的7个免费镜像源,包括轩辕镜像、DaoCloud、网易云等,并提供多源配置方案以提高稳定性。建议开发者在CI/CD环境中配置多个镜像源,避免构建失败。文章还提供了详细的配置步骤和使用建议,适合个人和团队开发者参考。

sg_knight的专栏 1931

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

上一篇: 傅里叶变换和傅里叶级数有啥关系?
下一篇: [Linux Audio Driver] 高通平台内部MIC_BIAS简介
1byte ≠ 8bit
博客等级 码龄8年 7242粉丝 170原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值