声卡驱动开发最佳实践_第1页
声卡驱动开发最佳实践_第2页
声卡驱动开发最佳实践_第3页
声卡驱动开发最佳实践_第4页
声卡驱动开发最佳实践_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Linux ALSA本实践是在Linux ALSA本实践是在Linux基础培训(2)-2014-1-一、ALSA2014-1-一、ALSA2014-1-一、ALSA架构简一、ALSA架构简2014-1-一、ALSA支持SMP一、ALSA支持SMP兼容OSS2014-1-一、 ALSAALSA是AdvancedLinux Sound Architecture,高提供了音频和MIDI(MusicalInstrument一、 ALSAALSA是AdvancedLinux Sound Architecture,高提供了音频和MIDI(MusicalInstrumentDigital 包含API Lin

2、uxALSA包含一系列内核驱动对libasound 的 API库。用这些进行写程序不需要打开设备等括音件访2014-1-一、 ALSA一、 ALSA2014-1-一、 ALSA架构简一、 ALSA架构简/dev/snd/pcmC0D0p核层的alsa-drivier驱动再经由sound core一、ALSA二、最一、ALSA二、最佳实践的目标、目的、方2014-1-ALSAapp app alsa-ALSAapp app alsa-alsa内核alsa-2014-1-实现的最小化驱动insmod,remod,以及 playback stop 的过程。使 (capture)s10一、ALSA20

3、14-1-一、ALSA2014-1-使用alsa自带的aplay,可以用alsamixerapt-getinstallalsa-使用alsa自带的aplay,可以用alsamixerapt-getinstallalsa-#红色文字表示apt-getinstallalsa-alsamixeralsamixer、方向键可以调整焦点,、方向键可以调整音量,esc键退出。也可以用数字或+、-(2) 检查使用的PC的声卡是否是# 2014-1-#02:02.0Multimediaaudiocontroller:EnsoniqES1371AudioPCI-97(rev ifneqobj-m:=ens137

4、1-KBUILD:=/lib/modules/uname-make-C$(KBUILD)pwd)rm-f*.o *core.depend.*.cmd*.ko*.mod.c*.order rm-rfs. 2014-1-#define CHIP1371 #includeens1370.c“3. 抽取ens1370.c(位于linux-source-2.6.26/sound/pci)中Linux通用驱动程序,添加到ens1371-playback.c3. 抽取ens1370.c(位于linux-source-2.6.26/sound/pci)中Linux通用驱动程序,添加到ens1371-playb

5、ack.c中并make,测试。可以先添加框架,再向框架中逐步添加函数。可以打印适当的log信息,不会影响ens13714.根据ens1370.c的代码,向init和exit中添加实现函数。根据调用关系实现一个被调用函数的最小化定义(中的snd_audiopci_probe()和snd_audiopci_remove()),以填充调用函数,并将无关部分注释掉,减轻代码量。注意2014-1-#define#include#defineENS1371_DEBUG #ifdef ENS1371_DEBUG#defineFUNC_LOG() k(KERN_ERR “FUNC_LOG: *%d+*%s()

6、+n, , initic void exit#define#include#include#define#ifdef#defineFUNC_LOG()k(KERN_ERRFUNC_LOG:%d:%s()n, LINE , FUNCTION #defineDRIVER_NAME#define#include#include#define#ifdef#defineFUNC_LOG()k(KERN_ERRFUNC_LOG:%d:%s()n, LINE , FUNCTION #defineDRIVER_NAMEicstructpci_device_idsnd_audiopci_ids=/#ifdef0

7、 x1274,0 x5000,PCI_ANY_ID, PCI_ANY_ID, 0,0,0,/*ES1370#ifdef0 x1274,0 x1371,PCI_ANY_ID, PCI_ANY_ID, 0,0,0,0 x1274,0 x5880,PCI_ANY_ID, PCI_ANY_ID, 0,0,0,0 x1102,0 x8938,PCI_ANY_ID, PCI_ANY_ID, 0,0,0,0, /*ES1371/*ES1373- CT5880/*EctivaEV1938 s devinit snd_audiopci_probe(structpci_dev *pci, conststructp

8、ci_device_idreturnsicvoid devexit snd_audiopci_remove(struct pci_devsicstructpci_driverdriver =.name=.id_table =.probe= .remove = #ifdef/.suspend=/.resume= init icvoid exit 25make、insmod、5make、insmod、 DRIVER_NAME后,insmod的模块打印的log 6. 仿照snd_audiopci_probe()和 snd_audiopci_remove()的填充与alsa_card_ens137x_

9、init()和alsa_card_ens137x_exit()6. 仿照snd_audiopci_probe()和 snd_audiopci_remove()的填充与alsa_card_ens137x_init()和alsa_card_ens137x_exit()出声音。 对于snd_audiopci_probe()面函数中赋值而还没有实现的部分,可以先用if#define#include#include#include#include#define#ifdef#defineFUNC_LOG()k(KERN_ERRFUNC_LOG:%d:%s()n, LINE , FUNCTION #defi

10、neDRIVER_NAMEicstructpci_device_idsnd_audiopci_ids=indexSNDRV_CARDS =/*Index0-MAXic char *idSNDRV_CARDS = SNDRV_DEFAULT_STR;/* ID for this card */ enableSNDRV_CARDS = SNDRV_DEFAULT_ENABLE_PNP;/*Enableswitches*/ structensoniq devinit snd_ensoniq_1371_mixer(struct ensoniq *ensoniq, devinit snd_ensoniq

11、_pcm(struct ensoniq * ensoniq,device,structsnd_pcm*return devinit snd_ensoniq_create(struct snd_card*card, structpci_dev *pci, structensoniq * rensoniq)return2 6s devinit snd_audiopci_probe(structpci_dev conststructpci_device_idstrcpy(card-driver,strcpy(card-shortname,Ensoniq#ifdefstructsnd_cardstru

12、ctensoniq*ensoniq; err, pcm_devs2;f(card-longname,%s%sat 0 x%lx,irq6s devinit snd_audiopci_probe(structpci_dev conststructpci_device_idstrcpy(card-driver,strcpy(card-shortname,Ensoniq#ifdefstructsnd_cardstructensoniq*ensoniq; err, pcm_devs2;f(card-longname,%s%sat 0 x%lx,irq if(dev=return-if(!enabled

13、ev)return-if(err=snd_card_register(card) 0)return return0;card=snd_card_new(indexdev, iddev,THIS_MODULE, if(card= return-if(err=snd_ensoniq_create(card, pci,&ensoniq) private_data=sicvoid devexit snd_audiopci_remove(struct pci_devpci_set_drvdata(pci, NULL);pcm_devs0 =0;pcm_devs1 =/#ifdefif(err=snd_ensoniq_1370_mixer(ensoniq) 0)return err;sicstructpci_driverdriver =.name=.id_table =.probe= .remove= devexit_p(snd_audiopci_remove), #ifdefCONFIG_PM/.suspend=/.resume=/#ifdefif(err=snd_ensoniq_1371_mixer(ensoniq, spdifdev,lineiodev)0)returnif(err=snd_ensoniq_pcm(ensoniq, 0,NULL)0)return e

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论