linux audio(alsa) 驱动注册的简明流程.

本文以max98088为参照设备进行。
我自己也在学习audio, 本着多多交流,相互进步的原则写下流程,
欢迎大家来拍砖, 学习中有不正确的地方还请指出来。

大体结构: 
cpu_dai-------指的是I2C通路.
codec_dai-----codec的功能,如录音放音参数。
codec_dev-----解码设备,重点
platform------据我看只是做了pcm的操作函数和分配dma用的

1. 在文件中注册soc-audio设备,以唤醒soc-core中的probe
我们的注册
 

our_audio_device = snd_soc_dai_link("soc-audio", -1);
platform_set_drvdata(our_audio_device, &our_audio_device_data)


our_audio_device_data 中包括card和codec_dev, card中包括snd_soc_dai_link, 
snd_soc_dai_link中包括cpu_dai,和codec_dai, 这些比较简单,不需要赘述了.
 
2. 进入soc-core的probe, 由于我们注册了soc-audio 设备,故会调用soc-core中的probe,
soc_probe->snd_soc_register_card->snd_soc_instantiate_cards->snd_soc_instantiate_card
 
一大堆跳转,我想大家都懂的,不再赘述,切入主题.

3. 在snd_soc_instantiate_card中匹配platform
if (card->platform == platform)
 
接下来匹配cpu_dai
if (card->dai_link[i].cpu_dai == dai)
 
再是codec_dai
if (card->dai_link[i].codec_dai == dai)
 
如果都找到了,就进行card->probe, 一般都没有。
if (card->probe)
 
再进行cpu_dai的初始化,就是i2s接口的初始化。
ret = cpu_dai->probe(pdev, cpu_dai);
 
再进行codec_dev的probe, 就是soc_codec_dev_max98088,此为重点,放后讨论
ret = codec_dev->probe(pdev);
 
这个probe一般也都没有。 
ret = platform->probe(pdev);
 
初始化等待队列
INIT_DELAYED_WORK(&card->delayed_work, close_delayed_work);
 
重头戏来了, codec_dev的probe
1. snd_soc_new_pcms中调用snd_card_create创建1个基于PCM的声卡设备。 
 
snd_card_create创建声卡,进入snd_card_create中,
snd_ctl_create定义声卡device的操作方法,snd_device_new创建出声卡设备并注册到链表中。
 
2. 回到snd_soc_new_pcms中,看soc_new_pcm。
 
将codec与dai建立链接,snd_pcm_new中先创建SNDRV_PCM_STREAM_PLAYBACK和SNDRV_PCM_STREAM_CAPTURE流
然后snd_device_new创建pcm的device.
 
3. 回到soc_new_pcm中为soc_pcm_ops赋值,其实就是将platform中的ops全部指过来。
 
4. 然后调用platform中的new, 创建dma. 
ret = platform->pcm_new(codec->card, codec_dai, pcm);
至此PCM的数据路就注册好了,下面就要注册控制信息了,就是snd_kcontrol_new结构体。
 
max98088藏的比较深啊, 找出来.
进入max98088_add_widgets(codec);
 
这个注册比较简单不再赘述了。
snd_soc_add_controls(codec, max98088_snd_controls,
    ARRAY_SIZE(max98088_snd_controls));
 
最后是snd_soc_init_card, 这个不用讲了,就是一堆,最后就OK了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: alsa-driver-1.2.7.tar.bz2 是一个音频驱动程序的压缩包。Alsa是Advanced Linux Sound Architecture(高级Linux音频架构)的缩写。它是一个开源的音频驱动程序,为Linux操作系统提供音频功能。该驱动程序被设计用来支持各种声音卡、音频控制器和其他音频设备。 alsa-driver-1.2.7.tar.bz2 是Alsa驱动程序的源代码压缩包。通过将其解压缩,可以获取驱动程序的源代码文件。 要安装alsa-driver-1.2.7.tar.bz2,首先需要在Linux系统中安装必要的编译工具和开发库。然后,您可以使用终端进入解压缩后的文件夹,并运行一系列的命令以编译和安装该驱动程序。 安装成功后,您可以配置和管理硬件设备的音频设置,如音量控制、声道配置和输入输出设备的选择。Alsa驱动程序提供了用于控制和操作音频功能的命令行工具和应用程序接口(API),允许开发者和系统管理员对音频设备进行配置和调整。 总之,alsa-driver-1.2.7.tar.bz2 是一个允许在Linux操作系统上实现音频功能的驱动程序源代码。通过安装和配置该驱动程序,您可以享受到高质量的音频体验,并根据需要进行各种音频设置和调整。 ### 回答2: alsa-driver-1.2.7.tar.bz2是一个用于Linux操作系统的音频驱动程序。ALSA代表高级Linux声音体系结构(Advanced Linux Sound Architecture),它是Linux操作系统中最常用的音频架构之一。 该驱动程序文件是.tar.bz2格式的压缩文件。.tar表示该文件是一个压缩的归档文件,而.bz2表示该文件使用bzip2压缩算法进行压缩。 该驱动程序的版本号为1.2.7,表示这是alsa-driver的第1.2.7个稳定版本。每个新版本通常包含修复漏洞、改进性能、增加新功能等更新。 安装alsa-driver-1.2.7.tar.bz2需要进行以下步骤: 1. 解压文件:使用tar命令解压.tar.bz2文件,例如使用命令tar -xjf alsa-driver-1.2.7.tar.bz2。 2. 进入解压后的目录:cd alsa-driver-1.2.7。 3. 配置驱动程序:运行./configure命令,该命令会检查系统环境并配置驱动程序。 4. 编译驱动程序:运行make命令,该命令会编译驱动程序。 5. 安装驱动程序:运行make install命令,该命令会将驱动程序安装到系统中。 6. 配置系统:根据具体需要,可能需要进行一些额外的配置,例如修改配置文件或加载驱动程序。 安装完成后,alsa-driver-1.2.7将提供音频驱动程序,使得Linux系统能够正常支持音频设备。这将使用户能够播放音乐、观看视频、进行语音通话等各种音频相关的操作。 总之,alsa-driver-1.2.7.tar.bz2是一个用于Linux操作系统的音频驱动程序文件,安装它可以使得系统支持音频设备,并提供各种音频功能。 ### 回答3: alsa-driver-1.2.7.tar.bz2是一个压缩文件,其中包含了ALSA(Advanced Linux Sound Architecture)音频驱动的源代码和相关文件。它是用于Linux操作系统的音频驱动程序。 ALSALinux内核中的一种声音处理架构,旨在提供细致、稳定且高质量的音频处理和音频设备驱动alsa-driver-1.2.7.tar.bz2是ALSA音频驱动的一个版本。 该压缩文件中的源代码可以用于编译和安装ALSA音频驱动程序。首先,需要解压缩该文件。然后,通过进入解压缩后的目录,使用特定的命令和选项进行编译和安装。编译和安装成功后,系统将具有新的ALSA音频驱动程序,以支持各种音频设备。 ALSA音频驱动Linux系统中实现音频功能的关键组件之一。它负责与硬件设备进行通信,并提供音频输入和输出的功能。安装最新版本的ALSA驱动可以提升音频系统的性能和稳定性,同时支持更多的音频设备和功能。 总而言之,alsa-driver-1.2.7.tar.bz2是一个压缩文件,其中包含了ALSA音频驱动的源代码和相关文件,可用于编译和安装ALSA音频驱动程序,以提供高质量的音频功能和支持各种音频设备。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值