我正在尝试开发我的第一个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。
有人能指出我错过了吗?
非常感谢你!
答案 0 :(得分:0)
我自己找到了解决方案,我不得不改变
kobj_to_dev(kobj)
到
kobj_to_dev(kobj->parent)
无论如何,谢谢! :)