主要和次要设备号码

时间:2012-06-22 05:00:02

标签: linux-device-driver

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

动态分配的缺点是您无法在其中创建设备节点 提前,因为分配给您的模块的主要编号会有所不同。正常情况 使用驱动程序,这几乎不是问题,因为一旦数量已经存在 已分配,您可以从/ proc / devices中读取它。

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

2)为什么当函数 alloc_chrdev_region 在发送给it.can的参数中提供主要和次要数字时,必须从/ proc / devices读取主要和次要数字,而不是直接使用?

提前致谢

2 个答案:

答案 0 :(得分:2)

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

2)驱动程序可能知道它的主要和次要数字是什么,但设备节点应该由用户空间中的某些东西创建。他们建议,如果不能事先与内核驱动程序和用户空间并行地提供此信息,那么用户空间必须在运行时从/ proc / devices等内容中发现它。

答案 1 :(得分:0)

  1. 当我们动态地为设备驱动程序分配一个主号码时,我们不知道主号码,直到alloc_chrdev_region功能完成执行或者说你不知道主号码在将模块插入内核之前(为此我们使用insmod)。因此,除非您加载设备驱动程序,否则无法为驱动程序创建节点(我们使用mknod),作者称之为“高级”。

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