2011-08-28 59 views
6

我在閱讀「Linux設備驅動程序,第3版」,並發現了一些我無法理解的內容。兩臺設備如何共享相同的主要次要設備編號?

第3.2章

,對筆者說:

傳統上,主編號標識與設備相關的驅動程序。 內核使用次要號碼來確定究竟是哪個設備被引用。

然後我試圖 「ls -l命令的/ dev」 來一看,我發現了一些不尋常的事情:

brw-rw---- 1 root disk  1, 1 2011-08-23 23:52 ram1 
brw-rw---- 1 root disk  1, 2 2011-08-23 23:52 ram2 
brw-rw---- 1 root disk  1, 3 2011-08-23 23:52 ram3 
brw-rw---- 1 root disk  1, 4 2011-08-23 23:52 ram4 
brw-rw---- 1 root disk  1, 5 2011-08-23 23:52 ram5 
... 
crw-r----- 1 root kmem  1, 1 2011-08-23 23:52 mem 
crw-r----- 1 root kmem  1, 4 2011-08-23 23:52 port 
crw-rw-rw- 1 root root  1, 3 2011-08-23 23:52 null 
crw-rw-rw- 1 root root  1, 5 2011-08-23 23:52 zero 

這些設備(RAM1-ram5)都有一個克隆,同樣重要 - 分鐘,但不同的名稱和類型。我認爲作者說「主號碼錶示設備類別,次號碼錶示設備索引,所以Major-Minor標識一個獨特的設備

現在我很困惑。兩臺設備如何共享相同的主要未成年人?設備號碼是什麼?

糾正我,如果我錯了..在此先感謝。

回答

8

memportnull,並zero是字符設備(由c列表開頭所證實)。 ramN設備是塊設備(因此是b)。塊設備的主要/次要編號與字符設備無關,反之亦然。

+0

所以他們是完全不同的文件關聯不同的設備?我也在LDD3中發現了這個問題,「**現代Linux內核允許多個驅動程序共享主要數字,但是您將看到的大多數設備仍然按照一個主要單一驅動程序的原則組織**:如果是,內核如何爲設備選擇正確的驅動程序? – kumo

+1

@Shello,首先,這已經過時了,現在動態分配更爲普遍。其次,更準確地說,一對一和一對一對一的驅動程序(也就是說,你可以認爲類型是主要的一部分) – bdonlan