中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
《Linux內(nèi)核編程》第二章:ALSA驅(qū)動

====================================================================================================================================

一、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.舉例

  1. module_init(_mdrv_alsa_init);  
  2. static int __init _mdrv_alsa_init(void){  
  3.   ................................  
  4.   err = _mdrv_alsa_probe(device_id);    
  5.   ..............................  
  6. }  

    內(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聲卡原理
    


    如上圖:在主機(jī)端播放音樂時,應(yīng)用軟件或驅(qū)動程序把各類音頻信號轉(zhuǎn)換為統(tǒng)一的格式,如PCM等,通過主機(jī)的USB接口發(fā)送給USB聲卡;聲卡的USB接口接收到數(shù)據(jù)后,通過I2S接口把并行音頻數(shù)據(jù)轉(zhuǎn)為串行,再發(fā)送給音頻編解碼芯片進(jìn)行D/A轉(zhuǎn)換,即可在音頻芯片連接的揚(yáng)聲器中發(fā)音。   

3.編程

    我們來看看USB音頻設(shè)備驅(qū)動程序,下篇文章會討論USB主機(jī)控制器驅(qū)動程序。

  1. module_init(snd_usb_audio_init);  
  2. static int __init snd_usb_audio_init(void){  
  3.   if (nrpacks < 1 || nrpacks > MAX_PACKS) {  
  4.   printk(KERN_WARNING "invalid nrpacks value.\n");  
  5.   return -EINVAL;  
  6.   }  
  7.   return usb_register(&usb_audio_driver);    //為了實(shí)現(xiàn)USB設(shè)備的即插即用,所有USB設(shè)備驅(qū)動都要在USBD中注冊。當(dāng)驅(qū)動程序調(diào)用int usb_register(struct usb_driver *new_driver)時,系統(tǒng)將這個新的驅(qū)動程序加入驅(qū)動鏈表(usb_driver_list)的尾部完成注冊;同時、掃描總線上的所有設(shè)備,與驅(qū)動程序關(guān)聯(lián)。  
  8. }  
  9. static struct usb_driver usb_audio_driver = {  
  10.   .name = "snd-usb-audio",  
  11.   .probe =usb_audio_probe,  
  12.   .disconnect = usb_audio_disconnect,  
  13.   .suspend = usb_audio_suspend,  
  14.   .resume = usb_audio_resume,  
  15.   .id_table = usb_audio_ids,//當(dāng)USB設(shè)備掛載時,USB Host驅(qū)動會去匹配id_table、若與該id匹配、證明是Audio設(shè)備;usb_audio_probe將被觸發(fā)。  
  16. };  

    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ū)動

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Linux ALSA聲卡驅(qū)動之三:PCM設(shè)備的創(chuàng)建
Alsa 小結(jié)
如何安裝ALSA驅(qū)動
Linux操作系統(tǒng)下聲卡驅(qū)動的詳細(xì)加載方法
Android 音頻系統(tǒng)
Linux Audio ALSA Technical specification(Linu...
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服