【问题标题】:How's the Major number allocated for platform device driver?平台设备驱动程序的主要编号是如何分配的?
【发布时间】:2014-04-08 04:46:33
【问题描述】:

我想知道如何为平台设备驱动程序分配主编号。 例如,在driver code 中,我没有看到任何类似的函数调用

alloc_chrdev_region()

register_chrdev_region()

有人,请让我明白这一点。 谢谢。

【问题讨论】:

  • 一个普遍的问题:你为什么认为 MCSPI 控制器需要一个 char 设备专业?它与用户可见的字符设备无关。
  • 这是一个约定。另见udev

标签: c linux linux-kernel device-driver spi


【解决方案1】:

内核创建了大量连接到各种虚拟总线(可能代表也可能不代表物理总线)的设备。只有其中一些设备可以直接从用户空间进行有意义的访问。并且其中只有一部分依赖“设备节点”接口来执行此操作(因为现代内核中存在大量其他选项)。如果驱动程序不使用此特定接口,则无需分配设备节点号。

内核内部的设备通过它们与特定总线的从属关系来定位(使用内部设备名称和总线 ID)。例如,mcspi 驱动程序在“平台总线”上注册为“设备”,在“spi 总线”上注册为“总线主机”。看到总线主控已注册,spi 子系统将在新连接的总线上触发“总线重新扫描”。

spidev 驱动程序的安装方式总是“匹配”每个 spi 总线上存在的虚构设备,因此它将为每个“总线主控”注册实例化。它将创建用户空间设备节点,该节点可用于与其“总线主控”(spi 总线控制器,在本例中为mcspi)直接通信。

【讨论】:

    【解决方案2】:

    控制器不需要暴露。因此,没有设备号。

    另一方面,SPI 设备确实需要在spidev.c 中未定义的 MAJOR?MINOR,这里是注册设备。并且在同一文件的top 上,有一个主要没有定义为的宏:

    56 #define SPIDEV_MAJOR 153 /* 已分配 */
    57 #define N_SPI_MINORS 32 /* ... 最多 256 */

    【讨论】:

    • 这个控制器驱动和字符驱动有什么不同?
    • Controller 是控制器,spidev 是完全不同的驱动程序,您可以使用它从用户空间连接到控制器。
    • @brokenfoot 您的回答基本上是错误的。 mcspi 本身是一个控制器驱动程序,不直接链接到 spidev
    • @oakad:能否请您详细说明spidev驱动程序和mcspi控制器驱动程序之间的区别。请提供支持链接。
    • 看我的回答。至于支持链接 - 请查看“Linux 设备驱动程序”一书,第 3 版第 14 章(但最好寻找新版本)。
    猜你喜欢
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多