关于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 这边并没有什么反应。

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

...全文
3954 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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源文件能整个贴出来吗?
Table of Contents| Index Copyright Prentice Hall Open Source Software Development Series Foreword Preface Acknowledgments About the Author Chapter 1. Introduction Evolution The GNU Copyleft Kernel.org Mailing Lists and Forums Linux Distributions Looking at the Sources Building the Kernel Loadable Modules Before Starting Chapter 2. A Peek Inside the Kernel Booting Up Kernel Mode and User Mode Process Context and Interrupt Context Kernel Timers Concurrency in the Kernel Process Filesystem Allocating Memory Looking at the Sources Chapter 3. Kernel Facilities Kernel Threads Helper Interfaces Looking at the Sources Chapter 4. Laying the Groundwork Introducing Devices and Drivers Interrupt Handling The Linux Device Model Memory Barriers Power Management Looking at the Sources Chapter 5. Character Drivers Char Driver Basics Device Example: System CMOS Sensing Data Availability Talking to the Parallel Port RTC Subsystem Pseudo Char Drivers Misc Drivers Character Caveats Looking at the Sources Chapter 6. Serial Drivers Layered Architecture UART Drivers TTY Drivers Line Disciplines Looking at the Sources Chapter 7. Input Drivers Input Event Drivers Input Device Drivers Debugging Looking at the Sources Chapter 8. The Inter-Integrated Circuit Protocol What's I2C/SMBus? I2C Core Bus Transactions Device Example: EEPROM Device Example: Real Time Clock I2C-dev Hardware Monitoring Using LM-Sensors The Serial Peripheral Interface Bus The 1-Wire Bus Debugging Looking at the Sources Chapter 9. PCMCIA and Compact Flash What's PCMCIA/CF? Linux-PCMCIA Subsystem Host Controller Drivers PCMCIA Core Driver Services Client Drivers Tying the Pieces Together PCMCIA Storage Serial PCMCIA Debugging Looking at the Sources Chapter 10. Peripheral Component Interconnect The PCI Family Addressing and Identification Accessing PCI Regions Direct Memory Access Device Example: Ethernet-Modem Card Debugging Looking a

1,324

社区成员

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

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