2010-12-16 45 views

回答

0

按照手册页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内核允许多个驱动程序注册相同的主要数字,并基本上共享它。据推测,两名司机都会接到该专业的所有电话,并根据次要数字来决定是否采取行动。我并不确定这一点,因为我曾经参与过的所有驱动程序都是遵循“每个主号码一个驱动程序”的成语。

最后一件事,而不是硬编码一个主号码,它的可能性只需将zero传递给register_chrdev并让内核为您选取一个免费的主要编号并将其返回给您。这样,您不必担心踩踩其他驱动程序的脚趾,但是您需要使用用户空间代码check/proc/devices来正确地操作/ dev条目。

+0

[udev](http://en.wikipedia.org/wiki/Udev)应负责创建和销毁/ dev中的条目。如果它不自动执行正确的操作,则可以为该设备编写新的规则。 – Karmastan 2010-12-16 22:19:04

+0

阅读[Linux设备驱动程序,第三版](http://lwn.net/Kernel/LDD3/)。本书的第3章也提到了同样的事情。 “传统上,主号码标识与设备关联的驱动程序,例如,对于 示例,/ dev/null和/ dev/zero都由驱动程序1管理,而虚拟控制台和串行终端由驱动程序4管理; ,vcs1和vcsa1 设备由驱动程序7管理。现代Linux内核允许多个驱动程序共享主要数字,但大多数设备仍将按照主要一个驱动程序原则组织。 “ – 2010-12-17 13:46:46