Вопросы о register_chrdev_region() в драйвере устройства linux

Я изучаю регистрацию модуля ядра с помощью 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, чтобы понять функцию, но я нахожу ее слишком сложной для понимания, кто-нибудь знаком с этим?

Спасибо!

9
задан I'm a frog dragon 24 November 2011 в 07:20
поделиться