Linux 驱动模块 "kobj_to_dev"不工作

标签 linux module driver

我正在尝试开发我的第一个 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/

相关文章:

javascript - Webpack 在范围方面有问题

c++ - 我如何使用 perf 来分析我的代码?

linux - 使用选项卡式输出在 Linux 上显示用户

c - 收到 SIGCHLD 但尚未生成任何子进程

c - 为什么 vfork 会产生这个输出?

perl - 错误 : "Can' t locate object method "new" via package"in Perl

Python如何确保在模块死亡之前调用对象的 __del__() 方法?

c# - 使用单声道等待 UIO 中断

linux - LINUX如何挂载eeprom之类的字符设备

python - 在 Solaris 上为 jython 2.5 编译 Mysqldb