[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

编程菜汝狗 4962

高通音频驱动调试: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

扣子(coze)案例^第22期:零代码打造小红书竞品监控系统+AI自动生成运营策略建议

本文详细介绍了如何利用扣子(coze)平台零代码搭建小红书竞品监控系统。该系统通过自动化工作流抓取竞品笔记数据,并存入飞书多维表格,结合AI能力自动生成包含可视化分析报告在内的运营策略建议,帮助运营者高效进行数据驱动的市场分析。

weixin_29313239的博客 1005

Qcom audio kernel driver

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

qq_48709036的博客 1065

Infiniband互连网络概述

一、Infiniband是什么? InfiniBand(简称IB)是一种工业标准规范,它定义了一种输入/输出架构,用于计算节点、通信基础设施设备、存储和嵌入式系统的互连。操作系统可以是Linux、Windows或ESXI。 IB网络一共是五层,从第一天起,IB就被设计为提供一个端到端的解决方案,改善和加速从物理层到上层的所有协议层。 IB协议于2000年由IBTA(InfiniBand Trade Association)提出,其规定了一...

weixin_41687819的博客 5229

转录组PCA分析3大常见误区:数据标准化、离群样本与批次效应处理

本文深入探讨转录组PCA分析中的三大常见误区:数据标准化、离群样本识别与批次效应处理。通过实战案例和R代码演示,揭示如何优化PCA结果以提升生物学解释力,特别关注数据标准化策略的选择和批次校正方法的应用,帮助研究者避免常见陷阱并获得可靠的转录组分析结果。

weixin_28362173的博客 372

[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

基于STM32L4XX、HAL库的BQ25713RSNR充电芯片驱动程序设计

define BQ25713_I2C_ADDR (0x6B << 1) // 7位地址为 0x6B,HAL库需要左移一位。// 示例:配置 CHARGE_OPTION_0 寄存器:使能充电,使能 ICO(输入电流优化)reg_data |= (EN_CHG_MASK | EN_ICO_MASK);

zhusl6688的博客 406

[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

unity从3D升级到urp管线,打包ab包后,材质全部变紫色

确保材质中的被转换为 URP 兼容的着色器。在打包 AssetBundle 时,确保所需的着色器被正确打包。确保运行 AB 包的目标项目中正确配置了 URP 渲染管线。如果加载后材质丢失,检查 AB 包的加载逻辑,确保材质正确应用了着色器。通过这些步骤,你应该能够解决从标准渲染管线切换到 URP 渲染管线后,材质在 AB 包中变紫色的问题。如果问题仍然存在,请根据具体错误日志进一步排查。希望如上措施及解决方案能够帮到有需要的你。

**My Coding Family** 1962

【SpringBoot 4.x 第29节】Spring Security 7 入门:先理解认证和授权!

🏆 本文收录于 《滚雪球学 Spring Boot 4.x》 专栏。本专栏面向 有一定 Java 基础,但尚未系统学习 Spring Boot 的读者,采用“滚雪球式学习法”:先跑通、再理解、再重构、再上线,带你从第一个 Hello API 开始,逐步完成一个可部署、可监控、可扩展的后端项目。

**My Coding Family** 553

Android Audio序列2(分析 )

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

ListQ的博客 357

eye-in-hand手眼标定系统

上一个博文说了一种手眼标定系统的特殊情况,就是相机随着机械手一起移动的情况。虽然前面简单介绍了一种办法,就是内次拍照时让相机回到之前标定的位置,但是这样处理机器人的工作效率就会大大降低,产生很多重复动作,所以这篇博文就来讲一种更简单的标定方案。 下面是halcon官方给的手眼标定系统的案例代码。 这个例子主要应用于相机固定在机械手末端的手眼系统中,而且标定板相对于机器人也是静止的。 在这...

二毛的博客 1万+

QCOM平台Audio调试

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

houyizi337825770的专栏 2736

博途PLC模糊PID控制(附SCL完整源代码)

操作人员根据对象的当前状态和以往的控制经验,用手动控制的方法给出适当的控制量,对被控对象进行控制。用电脑模拟操作人员手动控制的经验,对被控对象进行控制。用模糊数学的知识模仿人脑的思维方式,对模糊现象进行识别和判决,给出精确的控制量,对被控对象进行控制。与经典控制理论和现代控制理论相比,模糊控制的特点是不需要建立对象的精确模型。根据操作人员手动控制的经验,总结的完整控制规则,在根据系统当前的运行状态,经过模糊推理,模糊判决等运算,求出控制量,实现对被控对象的控制。......

RXXW_Dor的博客 8967

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: 傅里叶变换和傅里叶级数有啥关系?
下一篇: [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、付费专栏及课程。

余额充值