2

私はハードウェアとデバイス ドライバーの経験が豊富で、ハードウェアの制御には以前のバージョンの Linux を使用していました。私は最近、組み込み処理を使用した Linux とデバイス制御のゲームに戻ってきましたが、Linux の世界で (より良い方向に) 多くの変化があったことを発見しました。ただし、データ フレームの適切なデータ転送タイミングを確保するために、短時間 (5 ミリ秒) の間すべての割り込みをオフにする必要がある、非常に高速な SPI ベースのフレーム データ転送カーネル モジュールに関連するハードウェア制御の問題に取り組んでいます。Linux の「昔」では、save_flags - cli() - sti() フレームワークを使用して、クリティカル セクションの割り込みを無効にしていました。新しい (2.6.33 以降) Linux IRQ 制御フレームワーク内でこれを達成する最も簡単な方法は何ですか?

スコット

4

1 に答える 1

1

現代の同等物は、、、local_irq_disable()およびです。しかし、そのような長時間 (間違いなく、最新の CPU 速度で 5 ミリ秒は長い時間です) を行うことは、かなり反社会的であると見なされます。local_irq_enable()local_irq_save()local_irq_restore()

また、最新のマシンにはマスクできない SMI (システム管理割り込み) があり、CPU を長時間占有する可能性があるため、コードでそのケースを処理する必要がある場合があることにも注意してください。

最近のカーネルはプリエンプト可能で、カーネル コード用の高解像度タイマーを備えています。代わりに、コードでこれらを使用できる場合があります (「参考文献」を参照include/linux/hrtimer.h)。

于 2010-07-04T14:54:07.107 に答える