我正在将模块从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?