初心者からLinuxへのカーネルとドライバの開発ここでは、割り込みハンドラのカーネルバッファからユーザ空間バッファへのデータの移動
私は、pcieデバイスから割り込みが入ってくるデータを持っています。割り込みが検出されるたびに、私はドライバが(ドライバにある)バッファからユーザー空間の大きなバッファにデータをコピーするようにします。ユーザーアプリケーションは、ドライバーに新しいデータを "ポーリング"しません。
現在、私の割り込みハンドラは、ユーザ空間のデータをcopy_to_user()
にしようとします。これは失敗します。 copy_to_user()
は常にnを返します。nはコピーしたいバイト数です。私の推測は、割り込みハンドラの呼び出しは、コピーを失敗させるコンテキストの切り替えを引き起こすのですか?
これを達成するにはどうすればよいですか?
ありがとうございます!
アプリがポーリングしない場合、新しいデータがいつバッファに表示されるかはどのようにわかりますか?運転手が信号を送信しますか? – Barmar
@Barmarユーザアプリケーションは、デバイスがすでにホストにデータを送信したことを通知するpcieデバイス内のレジスタを読み取ります。 – whyamihere
広すぎます。私たちはコンサルティングサイトではありませんが、**具体的な**質問はあなたのコードを示して、何/何故動作していないのかを指摘してください..脇役として:オプション(例えばFPGA)があれば、データをバッファにコピーします。 – Olaf