我正在尝试开发我的第一个 Linux 驱动程序,但是我在使用 API kobj_to_dev 时遇到了一个阻塞问题,以便从作为参数传递给“show”事件的“struct kobject*”中获取“struct device*”引用r/o 属性的。
我最好解释一下场景,只描述我写的一些指令会陷入上述问题:
静态结构 kobj_attribute myOption_attr = __ATTR_RO(myOption)
静态结构属性 *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)
静态 ssize_t pinNumber_show( 结构 kobject *kobj, 结构 kobj_attribute *属性, 字符 *缓冲区 ) { 结构设备 *kobjDev = kobj_to_dev(kobj);
公关信息( "预期:%p - 通过:%p %d:%d。\n", 我的开发者, kobjDev, 主要(kobjDev->devt) MINOR(kobjDev->devt) );
安装驱动模块后,我成功获取了虚拟文件/sys/class/myDev/mySettings/myOption 。
当我在/var/log/kern.log 中运行命令“cat/sys/class/myDev/mySettings/myOption”时,我得到 myDev 和 kobjDev 的不同指针值,主要和次要编号为 0 .
谁能指出我错过了什么?
非常感谢!
最佳答案
我自己找到了解决方案,我不得不改变
kobj_to_dev(kobj)
到
kobj_to_dev(kobj->parent)
还是谢谢你! :)
关于Linux 驱动模块 "kobj_to_dev"不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44399609/