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

时间:2011-05-12 04:51:55

标签: linux-device-driver

ALSA或libusb api是两种选择;对我来说都是新的;自从我写了一个设备驱动程序以来它已经好几年了,而且它已经在80年代用于Unix了,但是我知道我可以弄明白,一旦我知道要使用什么工具,我猜它们仍然使用C;我看过libusb api;非常好;但我不知道ALSA项目;看来他们正准备将模块放入内核来实现这一目标。

这是一个通用的问题,但我感兴趣的设备是Roland GR-55;它具有来自相同USB连接的MIDI和音频;它有Windows和MAC驱动程序,但没有Linux。

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

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

4 个答案:

答案 0 :(得分:3)

libusb很有用,易于启动和运行。我建议你从那里开始,特别是如果你有一段时间没有编写Linux驱动程序。使用libusb来了解Roland GR-55的信令协议是什么,并做一些实验。

USB支持在同一条物理线路上进行多种类型的逻辑连接。设备中可能会有DATA和CONTROL管道,您需要在开始使用正确的驱动程序之前将其映射出来。

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

从头开始编写内核模块可能很有趣,但USB有点像野兽,可能不是一个理想的开始。使用ALSA,您将拥有一个指导您的框架,而不必担心定义您自己的API。

答案 1 :(得分:2)

如上所述,请查看Linux设备驱动程序http://lwn.net/Kernel/LDD3/第13章专门讨论USB驱动程序。对于开发,将驱动程序编写为内核模块更容易,因为在进行更改时不需要重新编译内核。

答案 2 :(得分:1)

无需编写新驱动程序 - ALSA已经支持了一段时间。请参阅提交https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=0ef283247a0cf0fd2e8370ee467030292eb3129e

答案 3 :(得分:0)

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