*参照元 [#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]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS