Различия между cdev_add и функцией device_create? - PullRequest
0 голосов
/ 16 мая 2018

Я новичок в разработке драйверов устройств для Linux. Я не могу понять, что на самом деле делает cdev_add. Я просмотрел некоторый простой код драйвера char-устройства и увидел, что функции cdev_add и device_create используются вместе. Например:

/* Create device class, visible in /sys/class */
dummy_class = class_create(THIS_MODULE, "dummy_char_class");
if (IS_ERR(dummy_class)) {
    pr_err("Error creating dummy char class.\n");
    unregister_chrdev_region(MKDEV(major, 0), 1);
    return PTR_ERR(dummy_class);
}

/* Initialize the char device and tie a file_operations to it */
cdev_init(&dummy_cdev, &dummy_fops);
dummy_cdev.owner = THIS_MODULE;
/* Now make the device live for the users to access */
cdev_add(&dummy_cdev, devt, 1);

dummy_device = device_create(dummy_class,
                            NULL,   /* no parent device */
                            devt,    /* associated dev_t */
                            NULL,   /* no additional data */
                            "dummy_char");  /* device name */

Что cdev_add и device_create делают в этом коде?

1 Ответ

0 голосов
/ 18 мая 2018

Чтобы использовать символьный драйвер, сначала вы должны зарегистрировать его в системе.Затем вы должны открыть его для пользовательского пространства. Функции

cdev_init и cdev_add выполняют регистрацию символьного устройства. cdev_add добавляет символьное устройство в систему.Когда функция cdev_add успешно завершается, устройство работает и ядро ​​может вызывать его операции.

Чтобы получить доступ к этому устройству из пространства пользователя, вы должны создать узел устройства в /dev.Это можно сделать, создав класс виртуального устройства с помощью class_create , затем создав устройство и зарегистрировав его с помощью sysfs с помощью функции device_create .device_create создаст файл устройства в /dev.

Read Драйверы устройств Linux, третье издание , глава 3 (Char Drivers) для хорошего описания процесса (class_createи device_create не рассматриваются в книге).

...