在Linux中编写USB设备驱动程序

3

ALSA或libusb API是两个选择;对我来说都很新颖。我已经好几年没有写设备驱动程序了,那时候写的是Unix的驱动程序,而且还在80年代,但我知道一旦我知道要使用哪些工具,就可以弄清楚如何做。我猜想这两种API都仍然使用C语言;我看过libusb API,非常不错,但我对ALSA项目一无所知;似乎它们旨在将模块放入内核以实现这一点。

这是一个泛化的问题,但我感兴趣的设备是Roland GR-55;它具有从同一个USB连接中传输MIDI和音频的功能;它有Windows和MAC驱动程序,但没有Linux驱动程序。

您更喜欢使用哪些库或工具?

我需要编写设备驱动程序还是可加载内核模块(LKM)?


1
你可能会对这本书《Linux设备驱动程序》感兴趣(http://www.amazon.com/Linux-Device-Drivers-Jonathan-Corbet/dp/0596005903/ref=tmm_pap_title_0)。我正在阅读它,它非常棒。 - Mike Pennington
是的,但它非常过时了。请查看http://www.kernelnewbies.org、http://lwn.net(内核页面)获取最新信息。检查USB和音频驱动程序所在的网站,也许已经完成/正在进行中。 - vonbrand
4个回答

3

libusb非常有用且易于上手。如果你已经有一段时间没有编写Linux驱动程序了,我建议你从这里开始。使用libusb来了解Roland GR-55的信令协议并进行一些实验。

USB支持同一物理线路上的多种逻辑连接类型。设备可能会提供数据和控制管道,您需要在启动适当的驱动程序之前对其进行映射。

正如我所说,如果您只想编写控制界面并存储设备的原始数据,那么使用libusb很容易上手,并且您可以在几天内得到有用的东西。但是,如果您想将设备与现有音乐软件一起使用,则应使用ALSA。此外,通过更新ALSA,您将支持更大的社区,因为您可以将自己的工作合并到ALSA项目中。

从头开始编写内核模块可能很有趣,但USB有点棘手,可能不是一个理想的模块来入门。使用ALSA,您将有一个框架来指导您,并且不需要过多担心定义自己的API。


2

如上所述,可以查看Linux设备驱动程序http://lwn.net/Kernel/LDD3/第13章专门讨论USB驱动程序。为了开发方便,最好将您的驱动程序编写为内核模块,这样当您进行更改时就不需要重新编译内核。


1

0

由于您可能希望在声卡上听到声音,因此您应该选择ALSA。这样,完成后就可以了。如果您编写libusb驱动程序,则必须编写自己的用户空间工具以提供声卡声音进行播放。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接