2010-12-16 44 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