0

IRQ ハンドラを持つパラレル ポート ドライバのデバイス ドライバを 1 つ作成しました。

ここで、最初に IRQ7 にアクセスする必要があります。これは、パラレル ポートが割り込みを発生させるためです (/proc/interrupts で見たことがあります)。

今、私が直面した問題は、irq7 を要求しようとすると、request_irq() 関数が失敗することです。

また、私の猫 /proc/interrupt は次のようになります::

CPU0 CPU1
0: 98 0 IO-APIC エッジ タイマー
1: 11764 2178 IO-APIC エッジ i8042

3: 2 0 IO-APIC-edge
4: 2 0 IO-APIC-edge
7: 8 0 IO-APIC-edge parport0

8: 1 0 IO-APIC エッジ rtc0

9: 0 0 IO-APIC-fasteoi acpi

parport0とは何かわかりません。私の考えでは、この parport0 が原因で request_irq が失敗します。

私はそれを読みました: 「parport」コードは、Linux でパラレルポートのサポートを提供します。これには、複数のデバイス ドライバー間で 1 つのポートを共有する機能が含まれます。パラメータを parport コードに渡して、ハードウェアの自動検出を無効にすることができます。これは、IRQ を使用する場合に特に便利です。一般に、IRQ は正常に自動プローブされないためです。デフォルトでは、プローブできる場合でも IRQ は使用されません。これは、多くの人がパラレル ポートとサウンド カードまたはネットワーク カードに同じ IRQ を使用しているためです。

では、パラレル ポートからの割り込みを管理できるように、割り込みハンドラを irq7 に登録するにはどうすればよいでしょうか。

4

2 に答える 2

0

request_irq のリターン コードを確認すると役立ちます。失敗の理由を教えてくれます。rakib が指摘したように、デフォルトのドライバーである parport0 がインストールされている可能性があります。SHARED IRQ ハンドラの登録を試みることができます - これは動作するはずです: ほとんどの IRQ は共有可能です (SA_SHIRQ フラグ)。また、デバイス ID として NULL ポインターを渡さないようにしてください。

于 2013-05-17T17:51:25.547 に答える
0

お使いのシステムには、パラレル ポート ドライバーが既にインストールされています。これが、カーネルがドライバーに irq を割り当てられない理由です。まず、現在のパラレル ドライバをアンロードしてから、再試行してください。

于 2013-05-17T09:33:53.313 に答える