为什么SysFs创建类显示在sys / dev / char中?

时间:2018-10-18 16:10:54

标签: linux-kernel sysfs

我正在将模块从2.6移植到3.3.8。

我遇到的问题是模块在/ sys / class /中创建sysfs条目 通过致电:

struct class* myfunc(const char* name){
     struct class *cls=kmalloc(sizeof(struct class),GFP_KERNEL);
     memset(cls,0,sizeof(*cls));
     cls->name=name;
     cls->class_release=classRelease;
     cls->class_attrs=myClassAttr;
     cls->dev_attrs=myDevAttr;

    if (class_register(cls))
         return NULL;
 }

这将在/ sys / class / foo中创建一个项目,其中上面的name = foo可以说。 没关系。 后面的其他代码将kobjects的父级设置为上述类kobject。 在2.6中,它按设计在/ sys / class / foo / ....下添加了项。

在3.3.8中,foo位于sys / class /中,但其kobject实际上指向 / sys / dev / char,因此新项目最终位于/ sys / dev / char /...

在3.3.8中,我看到class_register()将类的kobj设置为driver / base / class.c(197)下的/ sys / dev / char。

 /* set the default /sys/dev directory for devices of this class */
if (!cls->dev_kobj)
    cls->dev_kobj = sysfs_dev_char_kobj;

所以..为什么要在/ sys / class / ...中创建类,却将其kobj覆盖为/ sys / dev / char?

0 个答案:

没有答案