Я изучаю регистрацию модуля ядра с помощью register_chrdev_region(dev_t from, unsigned count, const char * name);
.
Я заметил, что с этой функцией или без нее, мой модуль ядра работал так, как ожидалось. Код, который я использовал для тестирования:
first = MKDEV(MAJOR_NUM, MINOR_NUM);
register_chrdev_region(first, count, DEVICE_NAME);//<---with and without
mycdev=cdev_alloc();
mycdev->ops= &fops;
mycdev->owner = THIS_MODULE;
if (cdev_add(mycdev,first, count) == 0)
{printk(KERN_ALERT "driver loaded\n");}
Я закомментировал строку register_chrdev_region(first, count, DEVICE_NAME);
, а сообщение printk
все равно появилось. Я пробовал общаться с драйвером с этим и без этого из пространства пользователя, и оба варианта успешны.
Итак, мой вопрос в том, используется ли эта функция register_chrdev_region()
только для того, чтобы сделать мой драйвер хорошим гражданином ядра, так же как и сказать другим, что "я использую главный номер, пожалуйста, не используйте"?
Я попытался заглянуть в исходники ядра char_dev.c
, чтобы понять функцию, но я нахожу ее слишком сложной для понимания, кто-нибудь знаком с этим?
Спасибо!