私はLinux Device Drivers, 3rd editionの第3.5章を勉強しています。デバイスが開いている間に、デバイスを表すstruct inode *inode
がscull_open
に渡され、私の理解から、Linuxのデバイスドライバプログラミングでstruct inodeとstruct fileを使用してデータを渡す理由
int scull_open(struct inode *inode, struct file *filp)
{
struct scull_dev *dev;
dev = container_of(inode->i_cdev, struct scull_dev, cdev);
filp->private_data = dev; /* for other methods */
}
return 0;
}
:このセクションでは、我々はオープン機能でstruct inode *inode
から自分自身を定義されたカスタム構造を取得する方法を紹介します。その後、カスタム構造dev
を抽出し、そのようなscull_read
などの他の方法は、それを使用することができるようにfilp->private_data
に渡されます。
ssize_t scull_read(struct file *filp, char _ _user *buf, size_t count,
loff_t *f_pos)
{
struct scull_dev *dev = filp->private_data;
/* other codes that uses *dev */
}
私たちはすでにscull_setup_cdev
hereで初期化中にstruct scull_dev *dev
を持っていたことに気づいたまでは私には罰金です。
私たちはstruct scull_dev *dev
、グローバル変数、scull_read
および他の方法は、最終的にinode
とfile
を使用して、すべての通過を経由せずにそれにアクセスする必要がありますすることができます思ったので、私はむしろ混乱しています。
私の質問は、グローバル変数にするだけです。
誰でもこのメソッドを使用してデータを渡す具体的な例を提供できますか?
完全な実装を見ることができます。 –
ええ、しかし、作家を教えている間、特定の機能の使用理由と理由を教えなければなりません。 – mrigendra