天嵌科技 ARM开发社区

 找回密码
 注册

【原创】tq6410 alsa声卡驱动框架分析第一章《基础准备》

已有 3051 次阅读2012-8-30 22:33 | linux, alsa声卡驱动, 文章, 嵌入式

一.基础准备

说明:本文只是针对6410的声卡运行过程做讨论,我下一篇文章将对本文涉及到的一些框架、原理和规范的讨论

1.

我下载一个sleep.wav的声音文件,电脑上正常播放,我烧写到板子上,linux系统下,运行
cat sleep.wav > /dev/dsp
怎么没有声音呢,是不是声卡有问题,还是驱动问题?,我3月份买的板子,pda没有测试声音这个功能软件,没有方法测试声音,只能用这个指令测试了,但是没有声音,不知道出错在哪里,驱动问题还是硬件问题?还是我找的设备节点有问题,我现在懒,不知道其他的人用有没有问题,如果别人有声音可能是我硬件问题,如果都没有,我就要修改驱动了,现在比较懒,呵呵不愿意对原理图,呵呵,请原谅

 

 

哎,我上论坛问了有一段时间,没有人回答,估计是天嵌工程师放假,呵呵正好赶上我大三也放暑假,反正我也闲着,我就分析分析一下我这个款驱动,正好也温习一下驱动知识呵呵,懒终究是不行了。顺手记下来方便以后自己用。

先引入一些asoc框架的基本概念

2.  硬件架构

通常,就像软件领域里的抽象和重用一样,嵌入式设备的音频系统可以被划分为板载硬件(Machine)、SocPlatform)、Codec三大部分,如下图所示:

音频系统结构

·   Machine  是指某一款机器,可以是某款设备,某款开发板,又或者是某款智能手机,由此可以看出Machine几乎是不可重用的,每个Machine上的硬件实现可能都不一样,CPU不一样,Codec不一样,音频的输入、输出设备也不一样,MachineCPUCodec、输入输出设备提供了一个载体。

·   Platform  一般是指某一个SoC平台,比如pxaxxx,s3cxxxx,omapxxx等等,与音频相关的通常包含该SoC中的时钟、DMAI2SPCM等等,只要指定了SoC,那么我们可以认为它会有一个对应的Platform,它只与SoC相关,与Machine无关,这样我们就可以把Platform抽象出来,使得同一款SoC不用做任何的改动,就可以用在不同的Machine中。实际上,把Platform认为是某个SoC更好理解。

·   Codec  字面上的意思就是编解码器,Codec里面包含了I2S接口、D/AA/DMixerPA(功放),通常包含多种输入(MicLine-inI2SPCM)和多个输出(耳机、喇叭、听筒,Line-out),CodecPlatform一样,是可重用的部件,同一个Codec可以被不同的Machine使用。嵌入式Codec通常通过I2C对内部的寄存器进行控制。 

3.  软件架构

在软件层面,ASoC也把嵌入式设备的音频系统同样分为3大部分,MachinePlatformCodec

·   Codec驱动  ASoC中的一个重要设计原则就是要求Codec驱动是平台无关的,它包含了一些音频的控件(Controls),音频接口,DAMP(动态音频电源管理)的定义和某些Codec IO功能。为了保证硬件无关性,任何特定于平台和机器的代码都要移到PlatformMachine驱动中。所有的Codec驱动都要提供以下特性:

o      Codec DAI PCM的配置信息;

o      CodecIO控制方式(I2CSPI等);

o      Mixer和其他的音频控件;

o      CodecALSA音频操作接口;

必要时,也可以提供以下功能:

o      DAPM描述信息;

o      DAPM事件处理程序;

o      DAC数字静音控制

·   Platform驱动  它包含了该SoC平台的音频DMA和音频接口的配置和控制(I2SPCMAC97等等);它也不能包含任何与板子或机器相关的代码。

·   Machine驱动  Machine驱动负责处理机器特有的一些控件和音频事件(例如,当播放音频时,需要先行打开一个放大器);单独的PlatformCodec驱动是不能工作的,它必须由Machine驱动把它们结合在一起才能完成整个设备的音频处理工作。

4.3.0内核的Asoc数据结构图

为了更好的理解alsa,下图将列写出各个相关的结构关系和我们关心的函数,本alsa分析也将相继介绍它们的实现、注册过程。

5. 最后的准备

先从配置单入手,tq6410linux3.0内核。

执行以下语句

 

cp CONFIG_A70_v1.1 .config //用天嵌的7寸屏配置文件

make menuconfig

进入目录

       -> Device Drivers                                                    

         -> Sound card support (SOUND [=y])                                 

           -> Advanced Linux Sound Architecture (SND [=y])                  

             -> ALSA for SoC audio support (SND_SOC [=y]) 

\sound\soc\samung\Kconfig里有这项

  config SND_SOC_SAMSUNG_SMDK_WM9713

        tristate "SoC AC97 Audio support for SMDK with WM9713"

        depends on SND_SOC_SAMSUNG && (MACH_SMDK6410 || MACH_SMDKC100 || MACH_SMDKV210 || MACH_SMDKC110 || MACH_SMDKV310 || MACH_SMDKC210 || MACH_TQ6410)

        select SND_SOC_WM9713

        select SND_SAMSUNG_AC97

source insght里搜索我上面黑体字的宏” SND_SOC_WM9713”” SND_SAMSUNG_AC97”

smdk-wm9713-objs := smdk_wm9713.o

obj-$(CONFIG_SND_SOC_SAMSUNG_SMDK_WM9713) += snd-soc-smdk-wm9713.o

注:这里的宏CONFIG_SND_SOC_SAMSUNG_SMDK_WM9713在上面Kconfig里这句“config SND_SOC_SAMSUNG_SMDK_WM9713”可知已配置

 

snd-soc-wm9713-objs := wm9713.o

obj-$(CONFIG_SND_SOC_WM9713)    += snd-soc-wm9713.o

这个宏“CONFIG_SND_SOC_WM9713”在上面我粗字体,

综上,在make menuconfig 中配置这项 SoC AC97 Audio support for SMDK with WM9713”就配置了CONFIG_SND_SOC_SAMSUNG_SMDK_WM9713”,

CONFIG_SND_SOC_WM9713”。

下一章正式分析驱动代码中的Machine 部分。

 


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-4 14:14 , Processed in 1.046881 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

返回顶部