====================================================================================================================================
一、ALSA驅(qū)動創(chuàng)建聲卡過程
1.創(chuàng)建聲卡
snd_card_create(Linux2.6.30及以后api),snd_card_new(Linux2.6.30以前api)。
說明:第一步要創(chuàng)建聲卡
2.創(chuàng)建pcm設(shè)備,并加入聲卡
int snd_pcm_new(struct snd_card *card,const char *id,int device,int playback_count,int capture_count,struct snd_pcm *rpcm );
說明:參數(shù)device表示目前創(chuàng)建的是該聲卡下的第幾個pcm,第一個pcm設(shè)備從0開始。
參數(shù)playback_count表示該pcm將會有幾個playback substream。
參數(shù)capture_count表示該pcm將會有幾個capture substream。
3.設(shè)置pcm設(shè)備的ops
void snd_pcm_set_ops(struct snd_pcm *pcm,int direction,struct snd_pcm_ops *ops);
說明:
4.注冊聲卡,創(chuàng)建設(shè)備節(jié)點(diǎn)
snd_card_register()
5.舉例
內(nèi)核被加載時,_mdrv_alsa_probe(device_id)函數(shù)被調(diào)用;完成上述4個步驟。即snd_card_create;snd_pcm_new、snd_pcm_set_ops;snd_card_register。
====================================================================================================================================
二、基于USB的ALSA驅(qū)動
1.、USB聲卡的發(fā)展
近年來產(chǎn)品層出不窮,USB類在USB開發(fā)者論壇的努力下、成為一種標(biāo)準(zhǔn)的規(guī)范;USB聲卡也開始在市場上悄然出現(xiàn)。
因?yàn)閁SB聲卡內(nèi)置了DAC和有源功放,音頻數(shù)據(jù)以數(shù)字方式進(jìn)入USB聲卡,完全杜絕了PC的內(nèi)部干擾;所以,USB聲卡有可能成為現(xiàn)有內(nèi)置聲卡的替代品。
本文介紹一種基于ARM處理器的USB聲卡設(shè)計(jì)。
2、USB聲卡原理
3.編程
我們來看看USB音頻設(shè)備驅(qū)動程序,下篇文章會討論USB主機(jī)控制器驅(qū)動程序。
USB音頻設(shè)備掛載時,usb_audio_probe()函數(shù)被調(diào)用;完成上述4個步驟。即snd_card_create;snd_pcm_new、snd_pcm_set_ops;snd_card_register。
下一章將詳細(xì)分析Linux USB驅(qū)動的組成:《Linux內(nèi)核編程》第三章:USB類設(shè)備驅(qū)動
聯(lián)系客服