2010年7月16日 星期五

major number 和 device node 以及 device driver 間的關係

每個 device 會有一組 (Major number, Minor number) 來作為區別的資訊

到 /dev 資料夾底下,使用 ls -l 就可得到各個 device node的資訊

以 ppp 這個 device node為例,ls -l 輸出如下
crw------- 1 root root 108, 0 Apr 21 12:46 ppp

前面的 permission field 中,第一個字元 c 表示這個 device 是 char device
接下來介於 Group name 之後,Modification date 之前
就是 ppp 這個 device 的 (major number, minor number) 資訊 108,0

有了 device node 與 (major,minor) 之間關係的觀念後

接下來就來探討 device driver 和 (major,minor) 有什麼樣的關係

關係圖:device node --- (major,minor) --- device driver

恰巧,這個關係也就是為什麼 kernel 能正確找到 device 其所有的 driver 的原因

答案很簡單

device driver 需要向 kernel 註冊其所屬 device 的 (major,minor) pair

接下來就來解釋為什麼會有(major,minor)這樣的資訊存在


在系統中新增一個硬體,許多環節彼此相扣
  1. hardware
  2. driver
  3. Linux OS 中配給硬體的 dev node (在 /dev 底下)

driver 向 kernel 註冊一些 handler software 以及一些 hardware 資源 (io ports,etc)
好讓 kernel 得知此 hardware 的存在,並且接受此 hardware 的 interrupt

在 /dev 底下需要替這個 hardware 新建一個 device node 好讓 kernel 可以使用它
但這項工作不是 driver 的 job
因此需要手動建立這個 device node

而 device node 的 (major,minor) 資訊
需要和 driver 中向 kernel 註冊的 (major,minor) 一樣

因此 kernel 就可經由 (major,minor) 搭建起來的橋樑找到 hardware 和 driver 的關連

也就是此關係圖:device node --- (major,minor) --- device driver

沒有留言:

張貼留言