Почему класс создания SysF появляется в sys / dev / char? - PullRequest
0 голосов
/ 18 октября 2018

Я портирую модуль с 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?

...