Я портирую модуль с 2.6 на 3.3.8.
У меня проблема в том, что модуль создает запись sysfs в / sys / class /, вызывая:
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 класса в / sys / dev / char в файле driver / base /class.c (197).
/* 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?