我正在学习使用register_chrdev_region(dev_t from, unsigned count, const char * name);
注册一个内核模块。关于register_chrdev_region()在linux设备驱动程序的问题
我注意到,有或没有这个功能,我的内核模块按预期工作。我用于测试的代码:
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
消息仍然出现了。我尝试与用户空间中的驱动程序进行通信,并且都是成功的。
所以我的问题是,这个功能只用于使我的驱动程序成为一个好的核心公民,就像告诉别人“我用尽主要号码,请不要使用”?
我试图看看内核源代码char_dev.c
来了解这个函数,但是我发现它很难理解,熟悉这个的任何人?
谢谢!