参照元

説明

デバイスドライバ内で、ドライバの固有情報を設定、取得する方法の概要です。

基本的には、最初に 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);
    ...
}

参考

取得、設定する関数は下記の通り。

関連モジュール

似た名前の関数 (...._get_drvdata()) は他にもあるが、同じスキームで動いていると思ってもらって構わないはずです。

コメント


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-02-15 (月) 13:47:58