Linux设备驱动程序注册过程

Linux设备驱动程序注册过程,linux,linux-device-driver,Linux,Linux Device Driver,我是一个linux新手,试图理解linux设备模型。我一直在研究Linux3.1.6代码库,特别是驱动程序部分,发现 一些驱动程序正在使用(例如i2c总线设备:linux-3.1.6/drivers/i2c/i2c-dev.c)*register_chrdev()*和 很少有其他人(例如pci总线:linux-3.1.6/drivers/pci/bus.c)使用*device\u register() 我的问题是何时使用register\u chrdev(是的,我知道它用于字符设备,但为什么不使

我是一个linux新手,试图理解linux设备模型。我一直在研究Linux3.1.6代码库,特别是驱动程序部分,发现

  • 一些驱动程序正在使用(例如i2c总线设备:linux-3.1.6/drivers/i2c/i2c-dev.c)*register_chrdev()*和
  • 很少有其他人(例如pci总线:linux-3.1.6/drivers/pci/bus.c)使用*device\u register()
  • 我的问题是何时使用register\u chrdev(是的,我知道它用于字符设备,但为什么不使用device\u register)和device\u register


    这是否取决于驱动程序开发人员希望他的设备/驱动程序列在哪里,比如devfs和sysfs?或者暴露在用户空间中访问设备的界面?

    一个函数注册一个字符设备关联(连接主要:次要到您的函数),另一个函数只是创建一个抽象设备对象(仅),可以这么说。两者相辅相成。设备对象用于生成事件,这样,如果还注册了cdev关联,udev就可以在
    /dev
    中创建节点。(例如,与drivers/char/misc.c相比)

    当您将设备注册为字符设备时,会发生以下情况:

    主要数字是根据。如果您使用的任何设备取决于其注册基于字符设备(如tty、输入等)的功能,那么这些设备将有各自的主要编号这就是为什么它说如果不确定,不要静态分配主要数字。

    某些文件操作与只能在char设备上执行的操作相对应


    如果有任何疑问,一定要问。

    谢谢你的回答。然而,在浏览了几篇在线文章之后,register\u chr/blk/net/dev API似乎将过时。i、 e.sysfs将取代devfs。devfs已经消失了6年多了,sysfs不是devfs的替代品(至少它不是devfs的替代品),register\u chrdev既没有消失也没有过时,如果你看看/dev,它现在通常是使用tmpfs的方式实现的。唯一过时的是你读的“那些在线帖子”。