最近在搞一個專案,就是實作使用Linux usb audio gadget 實作一個USB麥克風,但是遇到一些問題。
板子的系統是 Linux 3.10.103 我在makemenuconfig 中配置了USB Audio/MIDI driver和 Audio gadget


sound路徑下編譯出了一些驅動,drivers/usb/gadget/ 目錄下編譯出了 libcomposite.ko 和 g_audio.ko
在板子上根據依賴關系插入ALSA相關驅動和g_audio.ko
板子上會顯示

在/dev/snd/ 目錄下也生成幾個檔案

設備通過usb線連接電腦(ubuntu系統),dmesg顯示

/dev/snd/ 目錄下

首先第一個問題,在板子上看到的 /dev/snd/ 下的設備節點 和 在Ubuntu /dev/snd/ 下的設備節點是什么關系呢?
第二個問題,在 kernel/linux 3.10.103/dricvers/usb/gadget/ 下的 f_uac2.c ,有

我通過USB往電腦發送音頻資料 是不是應該走 ALSA_Playback -> IT_2 -> OT_4 -> USB-IN,我寫程式 往 ALSA_Playback里寫資料,但是 Ubuntu 這邊并沒有什么反應。
是我實作的方式有問題嗎,懇請大佬指點。
uj5u.com熱心網友回復:
f_uac2.c源檔案能整個貼出來嗎?uj5u.com熱心網友回復:
檔案太大了,這上面貼不下我上傳了一下百度網盤 , 放上鏈接
鏈接:https://pan.baidu.com/s/1_LgQWGKpgzm3KXqvbxnJ5Q 提取碼:a9e3
uj5u.com熱心網友回復:
https://download.csdn.net/download/s151140124/12056869uj5u.com熱心網友回復:
樓主,專案怎么樣了,我現在也在學習這方面問題,不過我是直接使能uac1功能來使用的,作為麥克風的話,使用這部分功能效果如何uj5u.com熱心網友回復:
現在使用的Linux4.9的內核,uac2支持性不好,使用configfs基于uac1實作的,作為麥克風基本沒問題uj5u.com熱心網友回復:
樓主我在使用uac1功能的時候,列舉能夠成功,也能得到相應的聲卡資訊cat proc/asound/cards
2 [UAC1Gadget ]: UAC1_Gadget - UAC1_Gadget
UAC1_Gadget 0
可是在執行錄音命令:arecord -f dat -t wav -r 48000 -c 2 -D hw:2,0 /tmp/test.wav
會出現 arecord: pcm_read:2143: read error: Input/output error 你覺得可能會是什么原因
uj5u.com熱心網友回復:
你是在 host 端執行的這個命令嗎?還有在板子上 看一下 /dev/snd/ 下有沒有對應的設備節點
uj5u.com熱心網友回復:
我之前在Ubuntu上除錯也是這種情況,在 windows 上使用GoldWave可以錄到聲音,不過聲音不正常
uj5u.com熱心網友回復:
板子有相應的設備節點
[root@rockchip]:/$:ls /dev/snd/
by-path controlC2 pcmC0D0p pcmC2D0c pcmC7D0p timer
controlC0 controlC7 pcmC1D0c pcmC2D0p pcmC7D1c
controlC1 pcmC0D0c pcmC1D0p pcmC7D0c pcmC7D1p
我是在板子上執行的,因為看了下別人的資料,是先在板子上錄好音,然后aplay 出來電腦在開始按錄音,這個樣子,然后在板子上執行那個命令就出錯了。
uj5u.com熱心網友回復:
你可以嘗試一下不使用 alsa-utils ,使用ALSA 的API 撰寫程式:在板子上讀取一個音頻檔案,然后writei下去
uj5u.com熱心網友回復:
我現在好了,用的audio source ,這個功能,當作mic錄音, 可是目前的只是使用alsa-utils工具,如果說想要代碼上實作主機端給出錄音信號,這邊自動錄音,可以怎么實作,只可以用ALSA 的API 撰寫程式嗎
uj5u.com熱心網友回復:
我現在好了,用的audio source ,這個功能,當作mic錄音, 可是目前的只是使用alsa-utils工具,如果說想要代碼上實作主機端給出錄音信號,這邊自動錄音,可以怎么實作,只可以用ALSA 的API 撰寫程式嗎
請問你出現 arecord: pcm_read:2143: read error: Input/output error 是怎么解決的呢
uj5u.com熱心網友回復:
我現在好了,用的audio source ,這個功能,當作mic錄音, 可是目前的只是使用alsa-utils工具,如果說想要代碼上實作主機端給出錄音信號,這邊自動錄音,可以怎么實作,只可以用ALSA 的API 撰寫程式嗎
請問你出現 arecord: pcm_read:2143: read error: Input/output error 是怎么解決的呢
程序是這樣的,如果你想要用板子放音,那電腦就要先播放音樂,然后板子執行arecord命令,錄取電腦通過usb傳輸過來的資料
如果,要想錄音,就要電腦按下錄音,然后板子aplay你想要播放的音樂,電腦就能錄到你的聲音資料。
uj5u.com熱心網友回復:
我現在好了,用的audio source ,這個功能,當作mic錄音, 可是目前的只是使用alsa-utils工具,如果說想要代碼上實作主機端給出錄音信號,這邊自動錄音,可以怎么實作,只可以用ALSA 的API 撰寫程式嗎
請問你出現 arecord: pcm_read:2143: read error: Input/output error 是怎么解決的呢
程序是這樣的,如果你想要用板子放音,那電腦就要先播放音樂,然后板子執行arecord命令,錄取電腦通過usb傳輸過來的資料
如果,要想錄音,就要電腦按下錄音,然后板子aplay你想要播放的音樂,電腦就能錄到你的聲音資料。
請問你在PC端的操作,也是通過arecord/aplay完成的嗎?
現在PC端執行aplay不報錯,板子側arecord依然產生了read error
uj5u.com熱心網友回復:
我現在好了,用的audio source ,這個功能,當作mic錄音, 可是目前的只是使用alsa-utils工具,如果說想要代碼上實作主機端給出錄音信號,這邊自動錄音,可以怎么實作,只可以用ALSA 的API 撰寫程式嗎
請問你出現 arecord: pcm_read:2143: read error: Input/output error 是怎么解決的呢
程序是這樣的,如果你想要用板子放音,那電腦就要先播放音樂,然后板子執行arecord命令,錄取電腦通過usb傳輸過來的資料
如果,要想錄音,就要電腦按下錄音,然后板子aplay你想要播放的音樂,電腦就能錄到你的聲音資料。
請問你在PC端的操作,也是通過arecord/aplay完成的嗎?
現在PC端執行aplay不報錯,板子側arecord依然產生了read error
pc端要選擇對應的聲卡aplay,我用的windows,Linux的話那你要注意哪個才是你的usb聲卡
uj5u.com熱心網友回復:
板子aplay -Dhw:1,0 fei.wav ubuntu主機 arecord -f cd -t wav -Dhw:1,0 | aplay -f cd -D hw:0,0兩處 -Dhw:1,0 為同一個聲卡在板子和ubuntu的/dev/snd下面的出現。
uj5u.com熱心網友回復:
先執行ubuntu主機 arecord -f cd -t wav -Dhw:1,0 | aplay -f cd -D hw:0,0 后執行 板子aplay -Dhw:1,0 fei.wav轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/16095.html
標籤:驅動程序開發區
