2017-06-06 22 views
0

私は最初のLinuxドライバを開発しようとしていますが、 "struct kobject *"から "struct device *"リファレンスを取得するためにAPI kobj_to_devを使用してブロック問題が発生しましたar/o属性の "show"イベントへのパラメータとして使用します。Linuxドライバモジュール "kobj_to_dev"が動作しない

私はより良い、私は上記の問題に分類するために書かれた命令の一部だけを記述したシナリオを説明するだろう:

  • 静的構造体kobj_attribute myOption_attr = __ATTR_RO(myOption)

  • 静的構造体の属性* my_attrs [] = {& myOption_attr.attr、NULL}

  • 静的構造体attribute_group my_attr_group = {.attrs = my_attrs}

  • 構造体デバイス* myDev = device_create(...いくつかのパラメータ...)

  • のstructたkobject * myKObj = kobject_create_and_add( "mySettings"、& myDev-> KOBJ)

  • sysfs_create_group( myKObj、& my_attr_group)

  • 静的pinNumber_show ssize_tの( 構造体たkobject * KOBJ、 構造体kobj_attributeの*​​のATTR、 チャー*BUF) { struct device * kobjDev = kobj_to_dev(kobj); "期待:%pを - 合格:%P%D:%dの\ nは。"

    pr_info( 、 myDev、 kobjDev、 MAJOR(kobjDev-> DEVT) MINOR(kobjDev-> DEVT) );

}

ドライバモジュールをインストールした後、私は成功した仮想ファイル/ SYS /クラス/ myDev/mySettings/myOptionを取得します。

/var/log/kern.logの中で "cat/sys/class/myDev/mySettings/myOption"コマンドを実行すると、私はmyDevとkobjDevの異なるポインタ値になり、メジャー番号とマイナー番号は0

誰かが私が逃したものを指摘できますか?

ありがとうございました!

答えて

0

私は

kobj_to_dev(kobj->parent) 

kobj_to_dev(kobj) 

を変更しなければならなかった、自分で解決策を見つけたが、とにかくありがとうございます! :)

関連する問題