Linux ALSA驱动框架(一)--ALSA架构简介--声卡的创建

本文深入探讨了Linux ALSA驱动框架,详细介绍了从ALSA核心层到硬件驱动的层级结构。重点讲解了声卡设备的创建过程,包括snd_card结构体的创建、控制接口和PCM设备的注册。通过分析内核源码,展示了如何通过alsa-driver和alsa-lib API来控制底层音频硬件,并讨论了设备文件结构和系统调用的实现。
摘要由CSDN通过智能技术生成

Linux ALSA驱动框架(一)--ALSA架构简介--声卡的创建

2018-05-29 06:48:35 技术芯 阅读数 10528更多

分类专栏: linux alsa音频驱动框架

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/sinat_37817094/article/details/80490830

(1)ALSA简介

(1)
Native ALSA Application:tinyplay/tinycap/tinymix,这些用户程序直接调用 alsa 用户库接口来实现放音、录音、控制

ALSA Library API:alsa 用户库接口,常见有 tinyalsa、alsa-lib

ALSA CORE:alsa 核心层,向上提供逻辑设备(PCM/CTL/MIDI/TIMER/…)系统调用,向下驱动硬件设备(Machine/I2S/DMA/CODEC)

ASoC CORE:asoc 是建立在标准 alsa core 基础上,为了更好支持嵌入式系统和应用于移动设备的音频 codec 的一套软件体系

Hardware Driver:音频硬件设备驱动,由三大部分组成,分别是 Machine、Platform、Codec

 

 

 

(2)
alsa驱动框架核心层给我们干的活:创建声卡设备的控制接口和PCM设备

snd_soc_init()--->

platform_driver_register(&soc_driver)--->

soc_probe()--->

snd_soc_register_card(card)--->注册自己的声卡设备

snd_soc_instantiate_card(card)--->

 

static int snd_soc_instantiate_card(struct snd_soc_card *card) 

{

     ret = snd_card_create();创建声卡设备-->snd_ctl_create()-->snd_ctl_dev_register创建声卡设备的控制接口函数-->snd_register_device()-->snd_register_device_for_dev()

     ret = soc_probe_link_dais(card, i, order);  --->soc_new_pcm()创建一个新的PCM设备-->snd_pcm_new()--->_snd_pcm_new()--->snd_pcm_new_stream()

     ret = snd_card_register(card->snd_card);-->snd_pcm_dev_register()创建pcm设备文件-->snd_register_device_for_dev()创建pcm设备节点

}

 

 

(3)
在内核设备驱动层,ALSA提供了alsa-driver,同时在应用层,ALSA为我们提供了alsa-lib,应用程序只要调用alsa-lib提供的API,即可以完成对底层音频硬件的控制。

ls sound

core               该目录包含了ALSA驱动的中间层,它是整个ALSA驱动的核心部分

core/oss        包含模拟旧的OSS架构的PCM和Mixer模块

core/seq        有关音序器相关的代码

include          ALSA驱动的公共头文件目录,该目录的头文件需要导出给用户空间的应用程序使用,通常,驱动模块私有的头文件不应放置在这里

drivers           放置一些与CPU、BUS架构无关的公用代码

i2c                 ALSA自己的I2C控制代码

pci                 pci声卡的顶层目录,子目录包含各种pci声卡的代码

isa                 isa声卡的顶层目录,子目录包含各种isa声卡的代码

soc                针对system-on-chip体系的中间层代码

soc/codecs    针对soc体系的各种codec的代码,与平台无关

 

 

(4)

alsa驱动的设备文件结构: 字符设备

# ls /dev/snd/ -lh

total 0

crw-rw----    1 root     root      116,   0 Aug 21 16:01 controlC0

crw-rw----    1 root     root      116,  24 Aug 21 16:01 pcmC0D0c

crw-rw----    1 root     root      116,  16 Aug 21 16:01 pcmC0D0p

crw-rw----    1 root   

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值