Linux 驱动模块 "kobj_to_dev" 不工作
Linux driver module "kobj_to_dev" not working
我正在尝试开发我的第一个 linux 驱动程序,但是我在使用 API kobj_to_dev 以从"struct kobject*" 作为参数传递给 r/o 属性的 "show" 事件。
我最好解释一下场景,只描述我写的一些指令陷入上述问题:
静态结构 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_tpinNumber_show(
结构 kobject *kobj,
结构 kobj_attribute *属性,
字符 *缓冲区
)
{
结构设备 *kobjDev = kobj_to_dev(kobj);
pr_info(
"Expected: %p - Passed: %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 驱动程序,但是我在使用 API kobj_to_dev 以从"struct kobject*" 作为参数传递给 r/o 属性的 "show" 事件。
我最好解释一下场景,只描述我写的一些指令陷入上述问题:
静态结构 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_tpinNumber_show( 结构 kobject *kobj, 结构 kobj_attribute *属性, 字符 *缓冲区 ) { 结构设备 *kobjDev = kobj_to_dev(kobj);
pr_info( "Expected: %p - Passed: %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)
还是谢谢你! :)