
本の説明に従ってハードウェア割り込みをトリガしたいと思います。Linuxデバイスドライバピン9と10の間にワイヤを接続します。試しましたが、明らかに割り込みはトリガされませんでした。
cat /proc/interrupts
:
7: 0 XT-PIC parport0
今、なぜそうなのか知りたいです。カーネルモジュールをロードします。
parport_pc 26004 0
parport 35239 2 ppdev,parport_pc
本では割り込みを有効にする必要があることが示されていますが、モジュールをロードするとそのようなことが起こります。そうですか?
何ができるのか、どんなアイデアがありますか?
答え1
単にピンを接続するだけでは割り込みは発生しません。引用した文書によると、割り込みを生成するには、ピン10で短絡されたピン9にいくつかのデータを書き込む必要があります。参照した文書を引用するには、次のようにします。
ピン9はパラレルデータバイトの最上位ビットです。バイナリデータが/dev/short0に書き込まれると、複数の割り込みが発生します。ただし、ASCII文字セットには最も高いビットセットを持つエントリがないため、ASCIIテキストをポートに書き込むと中断は発生しません。
答え2
人々はなぜカーネルコードを読むのが難しいと思いますか? :血。
http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/char/ppdev.c
真剣に、デバイスは通常、必要なとき、つまりユーザ空間がデバイスを開くときにのみアクティブになります。例:
ppdev.cを見ると、parportが「宣言」されたAPIを提供していることがわかります(必ずしも一意ではありませんが?!)。それだけが呼び出されますpp_enable_irq()
。 (私は最初にopen()を見て、そこにあるコメントを見ました)。
これが正しい理由であるかどうかはわかりませんが、家庭に欠陥があることを示しています。 :).