聲卡驅(qū)動開發(fā)最佳實踐_第1頁
聲卡驅(qū)動開發(fā)最佳實踐_第2頁
聲卡驅(qū)動開發(fā)最佳實踐_第3頁
聲卡驅(qū)動開發(fā)最佳實踐_第4頁
聲卡驅(qū)動開發(fā)最佳實踐_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、Linux ALSA本實踐是在Linux ALSA本實踐是在Linux基礎(chǔ)培訓(2)-2014-1-一、ALSA2014-1-一、ALSA2014-1-一、ALSA架構(gòu)簡一、ALSA架構(gòu)簡2014-1-一、ALSA支持SMP一、ALSA支持SMP兼容OSS2014-1-一、 ALSAALSA是AdvancedLinux Sound Architecture,高提供了音頻和MIDI(MusicalInstrument一、 ALSAALSA是AdvancedLinux Sound Architecture,高提供了音頻和MIDI(MusicalInstrumentDigital 包含API Lin

2、uxALSA包含一系列內(nèi)核驅(qū)動對libasound 的 API庫。用這些進行寫程序不需要打開設備等括音件訪2014-1-一、 ALSA一、 ALSA2014-1-一、 ALSA架構(gòu)簡一、 ALSA架構(gòu)簡/dev/snd/pcmC0D0p核層的alsa-drivier驅(qū)動再經(jīng)由sound core一、ALSA二、最一、ALSA二、最佳實踐的目標、目的、方2014-1-ALSAapp app alsa-ALSAapp app alsa-alsa內(nèi)核alsa-2014-1-實現(xiàn)的最小化驅(qū)動insmod,remod,以及 playback stop 的過程。使 (capture)s10一、ALSA20

3、14-1-一、ALSA2014-1-使用alsa自帶的aplay,可以用alsamixerapt-getinstallalsa-使用alsa自帶的aplay,可以用alsamixerapt-getinstallalsa-#紅色文字表示apt-getinstallalsa-alsamixeralsamixer、方向鍵可以調(diào)整焦點,、方向鍵可以調(diào)整音量,esc鍵退出。也可以用數(shù)字或+、-(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通用驅(qū)動程序,添加到ens1371-playback.c3. 抽取ens1370.c(位于linux-source-2.6.26/sound/pci)中Linux通用驅(qū)動程序,添加到ens1371-playb

5、ack.c中并make,測試??梢韵忍砑涌蚣?,再向框架中逐步添加函數(shù)??梢源蛴∵m當?shù)膌og信息,不會影響ens13714.根據(jù)ens1370.c的代碼,向init和exit中添加實現(xiàn)函數(shù)。根據(jù)調(diào)用關(guān)系實現(xiàn)一個被調(diào)用函數(shù)的最小化定義(中的snd_audiopci_probe()和snd_audiopci_remove()),以填充調(diào)用函數(shù),并將無關(guān)部分注釋掉,減輕代碼量。注意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()面函數(shù)中賦值而還沒有實現(xiàn)的部分,可以先用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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論