我正在学习使用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
以理解该函数,但我发现它太难理解了,是否有熟悉此内容的人?谢谢!