该函数如何工作 cdev_add()?

How the function works cdev_add()?

结构初始化的时候我理解正确吗

struct dev_t dev;
dev = MKDEV(major,minor_first);

我只创建设备文件,对节点来说是正确的。接下来,我应该说明我将如何使用这个设备吗?为此,您需要函数

cdev_add(&my_ch_dev, dev, minor_count);

之后
cdev_init(&my_ch_dev ,&dev_fops);

所以,我的意思是我的驱动程序将把创建的节点作为字符设备使用?提前致谢!

这里是详细的工作原理

  • dev = MKDEV(major,minor_first); 内核仍然不知道我们是否选择了 major/minor 号码,所以为此你需要通过调用 register_chrdev_region()
  • 来注册他的设备
  • register_chrdev_region(dev,minor_count,"AYRAT_DEVICE"); 所以到目前为止 number(major/minor) 已经保留了 name(dev) 这样其他驱动程序就不会得到相同的名称。接下来你需要向内核注册你的驱动程序。
  • 通过调用 cdev_init(&my_ch_dev ,&dev_fops);cdev 注册 接下来您需要通知内核我们填充了 struct cdev 的所有成员,因此为此使用 cdev_add().
  • cdev_add(&my_ch_dev, dev, minor_count);