2

我是驱动程序开发的新手。但是,我购买了一个 OSR USB FX2 学习套件,它带有用于 Windows 内核/用户模式驱动程序的示例代码。但是,我正在 Linux (Ubuntu 12) 中编写驱动程序。我已经成功地能够发送控制命令并从设备接收控制命令的返回。我还能够通过设备支持的 BULK OUT/IN 端点成功发送和读取数据。

我还没有完成一项实验。该设备具有以下端点:

1. BULK (OUT) --> Address 0x06
2. BULK (IN)  --> Address 0x88
3. INTERRUPT (IN) --> Address 0x81

我无法弄清楚如何找到中断 (IN)端点的IRQ 号。我了解如何使用以下方法安装 IRQ 处理程序:

int request_irq (unsigned int irq,
                 irq_handler_t handler,
                 unsigned long irqflags,
                 const char * devname,
                 void * dev_id);

并使用正确的函数原型编写处理程序。但是,我想知道如何找到设备中断的 IRQ 线路(IRQ 编号)?也就是如何确定上面request_irq函数中参数unsigned int irq的值应该是多少?我通读了“Linux 设备驱动程序,第三版”一书,如何确定并行端口的 IRQ 号。但是,这对 USB 是如何工作的,我将如何去探测或找出 USB 设备的这个数字应该是什么?

4

1 回答 1

1

您不需要处理中断来编写 USB 设备驱动程序,如果您想要一个很好的教程,请查看

http://www.linuxforu.com/2011/10/usb-drivers-in-linux-1/

这是学习如何编写 USB 驱动程序的绝佳起点;

如果您在进行过程中遇到具体问题;发布它们,我们会看看它是怎么回事:)

编辑

您可以使用 platform_get_irq 或 platform_get_irq_byname 来获取设备的 irq。

编辑2:

我还向您指出http://lwn.net/images/pdf/LDD3/ch10.pdf供您观赏 :-) 向您展示如何检索分配给设备的 IRQ。

于 2013-05-18T15:46:58.550 回答