我正在阅读rubini,corbet和hartmen的linux设备驱动程序书。我对主要和次要设备号的动态分配有疑问。他们说
动态分配的缺点是您无法在其中创建设备节点 提前,因为分配给您的模块的主要编号会有所不同。正常情况 使用驱动程序,这几乎不是问题,因为一旦数量已经存在 已分配,您可以从/ proc / devices中读取它。
1)这里提前是什么意思?
2)为什么当函数 alloc_chrdev_region 在发送给it.can的参数中提供主要和次要数字时,必须从/ proc / devices读取主要和次要数字,而不是直接使用?
提前致谢
答案 0 :(得分:2)
1)动态分配意味着您无法在加载驱动程序之前创建设备节点,例如在系统引导时将它们作为文件系统的静态部分。相反,一旦你发现他们的主要/次要数字这次,你就只能创建它们。
2)驱动程序可能知道它的主要和次要数字是什么,但设备节点应该由用户空间中的某些东西创建。他们建议,如果不能事先与内核驱动程序和用户空间并行地提供此信息,那么用户空间必须在运行时从/ proc / devices等内容中发现它。
答案 1 :(得分:0)
当我们动态地为设备驱动程序分配一个主号码时,我们不知道主号码,直到alloc_chrdev_region
功能完成执行或者说你不知道主号码在将模块插入内核之前(为此我们使用insmod
)。因此,除非您加载设备驱动程序,否则无法为驱动程序创建节点(我们使用mknod
),作者称之为“高级”。
当不同的设备/程序需要时,我们会读取/proc/devices
一个设备驱动程序的主要和次要编号。