- 追加された行はこの色です。
- 削除された行はこの色です。
*参照元 [#c2865b7a]
#backlinks
*説明 [#z89137b0]
デバイスドライバ内で、ドライバの固有情報を設定、取得する方法の概要です。
基本的には、最初に dev_set_drvdata() で struct device に覚えさせた値を、必要なタイミングで dev_get_drvdata() で取得するだけです。
そんな機能の何が嬉しいか?というと、コールバックなどで引数として struct device * を渡されたときに、デバイスに対応する、ドライバの固有の情報を引き出せます。
デバイスとドライバの対応を持つ必要も無いし、グローバル変数も要りません。嬉しいですよね?
使い方のイメージ
struct my_device {
int some_data;
...
};
//デバイスの登録
int my_probe(struct device *dev)
{
struct my_device *d;
...
//ドライバで使う固有のデータなどを設定する
d = kzalloc(sizeof(struct my_device));
d->some_data = 1000;
...
//デバイスに固有データの領域を覚えておいてもらう
dev_set_drvdata(dev, d);
...
device_add(dev);
}
//デバイスに対して何かする
int my_callback(struct device *dev)
{
struct my_device *d = dev_get_drvdata(dev);
...
//ドライバで使う固有のデータにアクセスできる
printk("data is %d.\n", d->some_data);
...
}
**参考 [#le6510d0]
取得、設定する関数は下記の通り。
-[[linux-4.4.1/dev_get_drvdata()]]
-[[linux-4.4.1/dev_set_drvdata()]]
似た名前の関数 (...._get_drvdata()) は他にもあるが、同じスキームで動いていると思ってもらって構わないはず。
**関連モジュール [#zf10df54]
似た名前の関数 (...._get_drvdata()) は他にもあるが、同じスキームで動いていると思ってもらって構わないはずです。
*コメント [#q954ac47]