カスタムデバイスのPCIeドライバ/モジュールを作成しています。デバイスはホットプラグ可能なので、いつでも消える可能性があります。カスタムPCIeホットプラグLinux 2.6.xドライバを作成
ここではどのようにpci_driver構造まで私のセットアップ:
struct pci_driver my_pci_driver = {
.name = "my_pci_driver",
.id_table = ids,
.probe = "my_pci_driver_probe",
.remove = "my_pci_driver_remove"
};
しかし、私は正しく削除イベントを処理する方法がわかりません。 .remove関数が呼び出されたとき、私はドライバで開かれ、いくつかのioctlを実行するいくつかのプロセスを持っています。
したがって、デバイスの取り外しを正しく処理する方法は何ですか?現在実行中のioctlが終了し、ドライバからデバイスを適切に削除するのを安全に待つ方法はありますか?
これは私がしたことですが、ドライバではなくカーネルのUSB層で処理されると思います。私の最初の考えは、ioctl()で扱うオブジェクトの参照カウンタを使うことでした。カウンターが0の場合は、開いているハンドルでは使用されず、デバイスを安全に取り外すことができます。しかし、私は、参照カウンタが0(逆セマフォの一種、その値が0に等しくないまでロックするもの)になるのを適切に待つ方法を見つけられませんでした。 –