在register_chrdev函数中,我们必须给出设备名称。即使我们创建了一个具有相同主机号的另一个名称的设备,它也能正常工作。那么在该函数中命名的意义是什么呢?
我是这方面的初学者:)
发布于 2010-12-17 00:47:42
根据register_chrdev的手册页:
The name parameter is a short name for the device
and is displayed in the The /proc/devices list. It also
must exactly match the name passed to unregister_chrdev
function when releasing the functions.因此,内核并没有真正使用这个名称,除非您以后可以识别注册以便撤消它,并且可以在/proc设备列表中调用驱动程序。
为什么有两个独立的register _chrdev具有不同的名称和相同的主要工作,是因为现代Linux内核允许多个驱动程序注册相同的主要工作编号,并基本上共享它。据推测,两个司机都会接到该专业的所有电话,并必须根据次要号码来决定是否采取行动。我真的不太确定这一点,因为我工作过的所有驱动程序和大多数驱动程序都遵循“每个主要编号一个驱动程序”的习语
最后一件事,而不是硬编码主数,可以只将零传递给register_chrdev,让内核为您选择一个空闲的主数并将其返回给您。通过这种方式,您不必担心踩到其他驱动程序的脚趾,但是您需要让您的用户空间代码检查/proc/device,以便正确地识别/dev条目。
https://stackoverflow.com/questions/4462515
复制相似问题