これらのノードのそれぞれを特定のHWにマップしたいので、各ノード(/dev/foo[1-99]
)の特定のデータを保存します。デバイスドライバノード固有のプライベートデータ
私はfile->private_data
を使用して始めましたが、openを呼び出すたびにNULL
に設定されました。
open()
の間に永続化できる類似点はありますか?
これらのノードのそれぞれを特定のHWにマップしたいので、各ノード(/dev/foo[1-99]
)の特定のデータを保存します。デバイスドライバノード固有のプライベートデータ
私はfile->private_data
を使用して始めましたが、openを呼び出すたびにNULL
に設定されました。
open()
の間に永続化できる類似点はありますか?
あなたの質問に対する答えは「いいえ」ですが、あなたは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
値の範囲は永続的ではありません(と、それはもはやそれらを見ることができます!)ので、私の最初の段落で
「(一種の)が」です。
これは良い説明であり、私の前進に向けてくれます。 – Alex