[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

基于Mind+、MOTT实现人工智能

@基于Mind+、MOTT实现人工智能 人工智能实验 一、实验目的及要求 【一】实现人脸识别 【二】实现云数据库应用 【三】实现测温数据mqtt上传至物联网云平台 二、实验原理与内容 基于二哈实现多人人脸学习和识别 基于TinywebDB实现云数据库应用 基于EasyIoT实现mqtt数据上传。 三、实验软硬件环境 硬件:掌控板 软件:Mind+ 四、实验过程(实验步骤、记录、数据、分析) 1.基于二哈实现多人人脸学习和识别 ①在Mind+扩展上的传感器选项选择HUSKYLENS AI 摄像头 ②配置哈士

weixin_44606930的博客 2376

Qcom audio kernel driver

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

qq_48709036的博客 1065

AST实战:解密Akamai混淆JS代码的完整流程

本文详细解析了如何使用AST技术解密Akamai混淆的JS代码,包括定位关键代码、AST解混淆实战步骤及常见问题解决方案。通过实际案例演示了从混淆代码到清晰逻辑的完整处理流程,并提供了工具推荐和法律合规建议,帮助开发者有效应对反爬虫技术。

weixin_33725722的博客 322

SQL Server 2025在Windows 11上的安装避坑指南

SQL Server 是微软主流关系型数据库管理系统,其安装与Windows操作系统深度耦合;Windows 11作为新一代桌面平台,强化了基于虚拟化的安全(HVCI)、驱动签名强制策略(WDAC)及内核隔离机制,导致传统数据库部署流程失效。理解二者底层交互原理,是解决服务启动失败、配置管理器无法打开、远程连接被拒等高频问题的技术前提。本文聚焦SQL Server 2025与Windows 11的兼容性挑战,覆盖系统预配置、安装节点诊断、防火墙与服务权限调优等工程实践环节,适用于高校教学、电赛备赛、中小企业

weixin_28741413的博客 319

[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

编程菜汝狗 6230

LightGBM参数调优实战:从基础到高级技巧

本文深入探讨了LightGBM参数调优的实战技巧。文章从理解其Leaf-wise生长策略的核心逻辑出发,系统性地介绍了分层调参策略:首先调整控制模型结构的参数(如num_leaves),其次优化学习能力参数(如learning_rate),最后通过正则化与随机化参数提升泛化能力。文中还提供了从建立基线到最终微调的完整实战流程与高级避坑指南,帮助读者高效提升模型性能。

i8j9k0l1的博客 262

[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

GDI文字绘制和windows下opengl文字绘制小结

GDI绘制文字,要设置文字的属性,主要就是通过设置DC中的font对象来实现的。 font对象的创建可以由createfont()、createfontIndirect()来实现。 HFONT CreateFont( int nHeight, // height of font int nWidth, // average

T_W_S的专栏 5323

Cesium中实现阴影率分析

看到群里有人在研究这个,所以看了一下。主要是模仿超图的,实现原理超图有做回答:但其实超图的这个实现方式还是过于复杂,原因是:既然是获取太阳的日照阴影,而Cesium中原本就存在太阳,且能投射阴影,因此其实并不需要再次计算太阳位置并计算视锥获取深度图,直接使用Cesium原生的太阳深度图即可。

weixin_43481439的博客 2216

Android Audio序列2(分析 )

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

ListQ的博客 357

Cursor使用教程:用 Cursor 创建第一个 Java 项目

Cursor是一款基于VS Code的AI编程编辑器,专为开发者设计。安装前需确保JDK 8+、Maven 3.8+等环境配置,支持Windows系统。编辑器提供中文界面选项,可通过扩展市场安装语言包。创建Java项目支持手动和AI提示词两种方式:手动需创建目录结构并编写代码;AI方式则通过自然语言描述快速生成项目框架和代码。标准Java项目包含src/main/java主代码目录、src/test/java测试目录及pom.xml等配置文件。Maven项目中,pom.xml是核心配置文件,管理项目依赖与构

博客 3548

QCOM平台Audio调试

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

houyizi337825770的专栏 2736

YOLOv8-COCO指标转换

本文介绍了将YOLO格式数据集转换为COCO格式并评估模型性能的完整流程。首先需将YOLO格式的标注数据转换为COCO格式,通过修改classes、image_path等参数适配不同数据集。然后使用YOLO模型对验证集进行预测并保存结果为JSON格式。最后通过比较预测结果和转换后的COCO标注文件,使用COCO官方评估指标和TIDE工具进行性能分析,生成包含AP、AR等指标的报告及错误分析图表。整个过程实现了从数据准备到模型评估的完整闭环,为计算机视觉任务提供标准化的性能评估方案。

FJN110的博客 403

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

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

余额充值