我在 ARM 处理器上运行嵌入式 linux 3.2.6。我正在使用修改版的 atmel 串行驱动程序来控制我设备上的 4 个 USART 端口。当我使用用内核编译的驱动程序时,一切正常。但我想将驱动程序作为内核模块运行。我进行了所有必要的更改并禁用了内部驱动程序,一切似乎都很好。4 个 tty 设备注册成功,我可以看到我的所有探测和初始化功能都正常工作。
所以这就是问题所在:当我尝试写入任何设备时,我的“开始传输”函数被调用,但随后等待来自 usart 的中断,该中断从未发生。所以写入只是挂起,使用逻辑分析仪我可以看到 RTS 被断言但 tx 线上没有字节显示。我知道我对 request_irq 的调用成功,但我从未在 /proc/interrupts 中看到任何 irq 条目。在驱动程序中,我还尝试使用 request_irq 为 gpio 线注册一个单独的中断处理程序,这工作正常。
我知道这是一个可能很难诊断的问题,但我正在寻找任何可能的建议,这些建议可以引导我朝着正确的方向寻找解决方案。如果您需要任何澄清,请告诉我。谢谢