关于linux usb audio gadget的问题

mrs_1023 2019-12-21 02:02:06
最近在搞一个项目,就是实现使用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 这边并没有什么反应。

是我实现的方式有问题吗,恳请大佬指点。

...全文
4016 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
xx-xx-xxx-xxx 2020-07-22
  • 打赏
  • 举报
回复
先执行ubuntu主机 arecord -f cd -t wav -Dhw:1,0 | aplay -f cd -D hw:0,0 后执行 板子aplay -Dhw:1,0 fei.wav
xx-xx-xxx-xxx 2020-07-22
  • 打赏
  • 举报
回复
板子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下面的出现。
Moose0 2020-05-29
  • 打赏
  • 举报
回复
引用 14 楼 qq_40519931 的回复:
[quote=引用 13 楼 Moose0 的回复:] [quote=引用 12 楼 qq_40519931 的回复:] [quote=引用 11 楼 Moose0 的回复:] 我现在好了,用的audio source ,这个功能,当作mic录音, 可是目前的只是使用alsa-utils工具,如果说想要代码上实现主机端给出录音信号,这边自动录音,可以怎么实现,只可以用ALSA 的API 编写程序吗
请问你出现 arecord: pcm_read:2143: read error: Input/output error 是怎么解决的呢[/quote] 过程是这样的,如果你想要用板子放音,那电脑就要先播放音乐,然后板子执行arecord命令,录取电脑通过usb传输过来的数据 如果,要想录音,就要电脑按下录音,然后板子aplay你想要播放的音乐,电脑就能录到你的声音数据。[/quote] 请问你在PC端的操作,也是通过arecord/aplay完成的吗? 现在PC端执行aplay不报错,板子侧arecord依然产生了read error[/quote] pc端要选择对应的声卡aplay,我用的windows,Linux的话那你要注意哪个才是你的usb声卡
qq_40519931 2020-05-29
  • 打赏
  • 举报
回复
引用 13 楼 Moose0 的回复:
[quote=引用 12 楼 qq_40519931 的回复:]
[quote=引用 11 楼 Moose0 的回复:]
我现在好了,用的audio source ,这个功能,当作mic录音, 可是目前的只是使用alsa-utils工具,如果说想要代码上实现主机端给出录音信号,这边自动录音,可以怎么实现,只可以用ALSA 的API 编写程序吗

请问你出现 arecord: pcm_read:2143: read error: Input/output error 是怎么解决的呢[/quote]

过程是这样的,如果你想要用板子放音,那电脑就要先播放音乐,然后板子执行arecord命令,录取电脑通过usb传输过来的数据
如果,要想录音,就要电脑按下录音,然后板子aplay你想要播放的音乐,电脑就能录到你的声音数据。[/quote]

请问你在PC端的操作,也是通过arecord/aplay完成的吗?
现在PC端执行aplay不报错,板子侧arecord依然产生了read error
Moose0 2020-05-29
  • 打赏
  • 举报
回复
引用 12 楼 qq_40519931 的回复:
[quote=引用 11 楼 Moose0 的回复:] 我现在好了,用的audio source ,这个功能,当作mic录音, 可是目前的只是使用alsa-utils工具,如果说想要代码上实现主机端给出录音信号,这边自动录音,可以怎么实现,只可以用ALSA 的API 编写程序吗
请问你出现 arecord: pcm_read:2143: read error: Input/output error 是怎么解决的呢[/quote] 过程是这样的,如果你想要用板子放音,那电脑就要先播放音乐,然后板子执行arecord命令,录取电脑通过usb传输过来的数据 如果,要想录音,就要电脑按下录音,然后板子aplay你想要播放的音乐,电脑就能录到你的声音数据。
qq_40519931 2020-05-28
  • 打赏
  • 举报
回复
引用 11 楼 Moose0 的回复:
我现在好了,用的audio source ,这个功能,当作mic录音, 可是目前的只是使用alsa-utils工具,如果说想要代码上实现主机端给出录音信号,这边自动录音,可以怎么实现,只可以用ALSA 的API 编写程序吗

请问你出现 arecord: pcm_read:2143: read error: Input/output error 是怎么解决的呢
Moose0 2020-05-22
  • 打赏
  • 举报
回复
我现在好了,用的audio source ,这个功能,当作mic录音, 可是目前的只是使用alsa-utils工具,如果说想要代码上实现主机端给出录音信号,这边自动录音,可以怎么实现,只可以用ALSA 的API 编写程序吗
mrs_1023 2020-05-19
  • 打赏
  • 举报
回复
引用 9 楼 Moose0 的回复:
[quote=引用 7 楼 MRS1995 的回复:] 你是在 host 端执行的这个命令吗? 还有在板子上 看一下 /dev/snd/ 下有没有对应的设备节点
板子有相应的设备节点 [root@rockchip]:/$:ls /dev/snd/ by-path controlC2 pcmC0D0p pcmC2D0c pcmC7D0p timer controlC0 controlC7 pcmC1D0c pcmC2D0p pcmC7D1c controlC1 pcmC0D0c pcmC1D0p pcmC7D0c pcmC7D1p 我是在板子上执行的,因为看了下别人的资料,是先在板子上录好音,然后aplay 出来电脑在开始按录音,这个样子,然后在板子上执行那个命令就出错了。 [/quote] 你可以尝试一下不使用 alsa-utils ,使用ALSA 的API 编写程序:在板子上读取一个音频文件,然后writei下去
Moose0 2020-05-19
  • 打赏
  • 举报
回复
引用 7 楼 MRS1995 的回复:
你是在 host 端执行的这个命令吗? 还有在板子上 看一下 /dev/snd/ 下有没有对应的设备节点
板子有相应的设备节点 [root@rockchip]:/$:ls /dev/snd/ by-path controlC2 pcmC0D0p pcmC2D0c pcmC7D0p timer controlC0 controlC7 pcmC1D0c pcmC2D0p pcmC7D1c controlC1 pcmC0D0c pcmC1D0p pcmC7D0c pcmC7D1p 我是在板子上执行的,因为看了下别人的资料,是先在板子上录好音,然后aplay 出来电脑在开始按录音,这个样子,然后在板子上执行那个命令就出错了。
mrs_1023 2020-05-18
  • 打赏
  • 举报
回复
引用 6 楼 Moose0 的回复:
楼主我在使用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 你觉得可能会是什么原因
我之前在Ubuntu上调试也是这种情况,在 windows 上使用GoldWave可以录到声音,不过声音不正常
mrs_1023 2020-05-18
  • 打赏
  • 举报
回复
你是在 host 端执行的这个命令吗? 还有在板子上 看一下 /dev/snd/ 下有没有对应的设备节点
Moose0 2020-05-18
  • 打赏
  • 举报
回复
楼主我在使用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 你觉得可能会是什么原因
Moose0 2020-05-11
  • 打赏
  • 举报
回复
楼主,项目怎么样了,我现在也在学习这方面问题,不过我是直接使能uac1功能来使用的,作为麦克风的话,使用这部分功能效果如何
mrs_1023 2020-05-11
  • 打赏
  • 举报
回复
引用 4 楼 Moose0 的回复:
楼主,项目怎么样了,我现在也在学习这方面问题,不过我是直接使能uac1功能来使用的,作为麦克风的话,使用这部分功能效果如何
现在使用的Linux4.9的内核,uac2支持性不好,使用configfs基于uac1实现的,作为麦克风基本没问题
mrs_1023 2019-12-27
  • 打赏
  • 举报
回复
引用 1 楼 gt_sup 的回复:
f_uac2.c源文件能整个贴出来吗?
我上传到下载区了,这个可能更方便一些
https://download.csdn.net/download/s151140124/12056869
mrs_1023 2019-12-27
  • 打赏
  • 举报
回复
引用 1 楼 gt_sup 的回复:
f_uac2.c源文件能整个贴出来吗?
文件太大了,这上面贴不下
我上传了一下百度网盘 , 放上链接
链接:https://pan.baidu.com/s/1_LgQWGKpgzm3KXqvbxnJ5Q 提取码:a9e3
gt_sup 2019-12-27
  • 打赏
  • 举报
回复
f_uac2.c源文件能整个贴出来吗?

1,324

社区成员

发帖
与我相关
我的任务
社区描述
主要是开发驱动技术
社区管理员
  • 驱动程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧