如何为平台设备驱动程序分配主要编号?

时间:2014-04-08 04:46:34

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

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

alloc_chrdev_region()

register_chrdev_region()

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

2 个答案:

答案 0 :(得分:1)

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

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

spidev驱动程序的操作方式是始终“匹配”每个spi总线上存在的虚设备,因此它将针对每个“总线主控”注册进行实例化。它将创建用户空间设备节点,该节点可用于与其“总线主控”(spi总线控制器,在此特定情况下为mcspi)直接通信。

答案 1 :(得分:0)

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

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

  

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