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