2016-11-01 20 views
0

これらのノードのそれぞれを特定のHWにマップしたいので、各ノード(/dev/foo[1-99])の特定のデータを保存します。デバイスドライバノード固有のプライベートデータ

私はfile->private_dataを使用して始めましたが、openを呼び出すたびにNULLに設定されました。

open()の間に永続化できる類似点はありますか?

答えて

1

あなたの質問に対する答えは「いいえ」ですが、あなたはfile->private_dataの使い方を誤解しています。それはあなたのopenファイル操作ハンドラで設定できるもので、他のファイル操作ハンドラ関数が後でそれを使用できるようにします。 openファイル操作ハンドラは、inode->i_rdevのデバイス番号を使用して、開いているハードウェアデバイスを決定し、file->private_dataがそのデバイスのプライベートデータ構造を指すように設定できます。

inode->i_rdevは、「メジャー」と「マイナー」のデバイス番号の組み合わせであることに注意してください。 MAJOR(inode->i_rdev)またはimajor(inode)のいずれかを使用して大部分を抽出し、MINOR(inode->i_rdev)またはiminor(inode)を使用してマイナー部分を抽出することができます。このメジャー/マイナースプリットは、デバイスの登録方法に応じて、有用かもしれません。いずれの場合でも、ドライバはデバイス番号の範囲を登録しており、inode->i_rdevの値はその範囲内になります。それが彼らの登録を解除するまで、あなたのドライバがを見inode->i_rdev値の範囲は永続的ではありません(と、それはもはやそれらを見ることができます!)ので、私の最初の段落で

「(一種の)が」です。

+0

これは良い説明であり、私の前進に向けてくれます。 – Alex