Linux驱动程序模块" kobj_to_dev"不工作

时间:2017-06-06 20:50:31

标签: linux module driver

我正在尝试开发我的第一个linux驱动程序,但是我遇到了一个使用API​​ kobj_to_dev的阻塞问题,以获得一个" struct device *"来自" struct kobject *"作为参数传递给"显示" r / o属性的事件。

我会更好地解释一下这个场景,它只描述了我为了上述问题而编写的一些指令:

  • static struct kobj_attribute myOption_attr = __ATTR_RO(myOption)

  • static struct attribute * my_attrs [] = {& myOption_attr.attr,NULL}

  • static struct attribute_group my_attr_group = {.attrs = my_attrs}

  • struct device * myDev = device_create(...一些参数...)

  • struct kobject * myKObj = kobject_create_and_add(" mySettings",& myDev-> kobj)

  • sysfs_create_group(myKObj,& my_attr_group)

  • static ssize_t pinNumber_show( struct kobject * kobj, struct kobj_attribute * attr, char * buf ) { struct device * kobjDev = kobj_to_dev(kobj);

    pr_info(   "预期:%p - 通过:%p%d:%d。\ n",   mydev的,   kobjDev,   MAJOR(kobjDev-> DEVT)   MINOR(kobjDev-> DEVT) ); }

安装驱动程序模块后,我成功获取了虚拟文件/ sys / class / myDev / mySettings / myOption。

当我运行命令" cat / sys / class / myDev / mySettings / myOption"在/var/log/kern.log中我得到myDev和kobjDev的不同指针值,主要和次要数字是0。

有人能指出我错过了吗?

非常感谢你!

1 个答案:

答案 0 :(得分:0)

我自己找到了解决方案,我不得不改变

kobj_to_dev(kobj)

kobj_to_dev(kobj->parent)

无论如何,谢谢! :)