【问题标题】:major and minor device numbers主要和次要设备号
【发布时间】:2012-06-24 09:52:50
【问题描述】:

我正在阅读 rubini、corbet 和 hartmen 的 linux 设备驱动程序书。我对主要和次要设备号的动态分配有疑问。他们说

动态分配的缺点是不能在 提前,因为分配给您的模块的主要编号会有所不同。对于正常 使用驱动程序,这几乎不是问题,因为一旦号码已经 已分配,您可以从 /proc/devices 中读取它。

1)这里的提前是什么意思?

2)当函数alloc_chrdev_region在发送给它的参数中提供主要和次要数字时,为什么必须从/proc/devices读取主要和次要数字。发送的参数可以不直接使用吗?

提前致谢

【问题讨论】:

    标签: linux-device-driver


    【解决方案1】:

    1) 动态分配意味着您无法在加载驱动程序之前创建设备节点,例如在系统启动时将它们作为文件系统的静态部分。相反,您只能在发现它们的主要/次要数字是什么后才能创建它们这次

    2) 驱动程序可能知道它的主要和次要数字是什么,但设备节点应该由用户空间中的某些东西创建。他们建议,如果无法提前将这些信息同时提供给内核驱动程序和用户空间,那么用户空间将不得不在运行时从 /proc/devices 之类的东西中发现它。

    【讨论】:

      【解决方案2】:
      1. 当我们将主编号动态分配给设备驱动程序时,直到 alloc_chrdev_region 函数完成执行,或者假设您在您之前不知道主编号时,我们才知道主编号将模块插入内核(为此我们使用insmod)。因此,除非您加载设备驱动程序,否则您无法为您的驱动程序(我们使用mknod)创建节点,这被作者称为高级。

      2. 当不同的设备/程序需要它们时,我们会阅读 /proc/devices 以获得一个设备驱动程序的主要和次要编号。

      【讨论】:

        猜你喜欢
        • 2014-04-15
        • 1970-01-01
        • 1970-01-01
        • 2010-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多