2

データ バッファーの読み取り準備が整ったときにハードウェア割り込みを送信する PCIe デバイスがあります。これに対する最善のアプローチはシグナルを使用することだと思いますが、その方法は完全にはわかりません。私がする必要があると私が信じていることは次のとおりです。

  1. ドライバーが信号の送信先を認識できるように、ユーザー空間アプリケーションの PID を保存します。
  2. PCIe デバイス ドライバーの割り込みハンドラーで、ユーザー空間アプリケーションにシグナルを送信します。
  3. ユーザー空間アプリケーションで、シグナルを処理するためのシグナル ハンドラー関数を実装します。

これらのいずれかを行う方法がわかりません。ユーザー空間アプリケーションの PID を保存する方法/場所は? ドライバーの割り込みハンドラーからその特定の PID に信号を送信するにはどうすればよいですか (kill コマンドを使用する必要があると思いますが、PID を取得する構文に興味があります)。PID を保存した後、ユーザー空間アプリケーションに信号を待機させるにはどうすればよいですか? PID を保存した後もユーザー空間アプリケーションを実行し続け、シグナルが受信されたときにシグナル ハンドラー関数を実行し、シグナルが到着する前の場所で実行を継続することは可能ですか? (ISR の仕組みに似ています)

4

3 に答える 3

2

これには信号を使用しないでください。キャラクターデバイスを実装します。ユーザー空間アプリケーションはopenそれを呼び出しread、ドライバーが利用可能なデータがあると判断するまでブロックされます。

Linux Device Driversの第 3 章を参照してください。

于 2012-07-06T19:07:23.440 に答える