ARM プロセッサで組み込み Linux 3.2.6 を実行しています。デバイスの 4 つの USART ポートを制御するために、atmel のシリアル ドライバーの修正版を使用しています。カーネルでコンパイルされたドライバーを使用すると、すべて正常に動作します。しかし、代わりにドライバーをカーネルモジュールとして実行したいと考えています。必要な変更をすべて行い、内部ドライバーを無効にしましたが、すべて問題ないようです。4 つの tty デバイスが正常に登録され、すべてのプローブおよび初期化機能が正しく機能していることがわかります。
問題は次のとおりです。いずれかのデバイスに書き込もうとすると、「送信開始」関数が呼び出されますが、usart からの割り込みが発生するのを待ちます。そのため、書き込みがハングするだけで、ロジック アナライザーを使用すると、RTS がアサートされていることがわかりますが、tx ラインにバイトは表示されません。request_irq の呼び出しが成功することはわかっていますが、/proc/interrupts に irq エントリがまったく表示されません。ドライバーでは、request_irq を使用して、gpio ライン用の別の割り込みハンドラーを登録することも試みましたが、これは正常に機能します。
これはおそらく診断が難しい問題であることはわかっていますが、解決策を見つけるための正しい方向に導く可能性のある提案を探しています。説明が必要な場合はお知らせください。ありがとうございました