
據我所知:
一個驅動程式可以與一個或多個“設備”相關。
/dev 檔案下的檔案代表這些裝置。驅動程式有主設備號,每個設備也有一個次設備號,因此(主要、次要)標識一個設備。
/proc/devices 也列出了裝置。
如果我所知道的屬實的話:
為什麼 /dev 和 /proc/devices 的輸出完全不同? dev 中有裝置名稱、主裝置號碼和次裝置號。在 /proc/devices 中有主裝置號碼和裝置名稱,但沒有次裝置號。為什麼即使是相同的主編號,這兩個清單也顯示完全不同的輸出?
例如,請查看 ls -l /dev 中的這一行
crw------- 1 root root 10, 235 Sep 19 21:40 autofs
它是字元設備,主設備號碼為 10,次設備號碼為 235。
現在我檢查 /proc/devices 中具有相同主裝置號碼的條目:
10 misc
正如您所看到的,設備名稱完全不同,並且沒有次要編號(這如何僅通過主編號來識別設備?)。
似乎有些術語是混合的,但我無法解決這個問題。
答案1
核心模組(“驅動程式”,如果你喜歡的話)可以在核心中註冊區塊或字元裝置(在傳統的unix意義上,“裝置”是一個具有多種含義的字),使用像register_blkdev
與字串一起使用的例程識別設備。可以使用任何用於此目的的字串,這些字串顯示在文件中/proc/devices
(這只是該內核表的文字表示)。
另一方面,在現代 Linux 系統中,檔案/dev
是透過udev
遵循許多複雜的規則來創建的。這些文件應該代表用戶空間透過讀取、寫入和ioctl 與核心互動的方式,其工作原理是因為它們是具有主設備號和次設備號的「特殊」文件,因此對這些文件的存取會轉換為內核呼叫(大致上說來)。
這兩者及其結構完全無關。唯一的聯繫是,每當訪問此類文件時,都會查找此類特殊文件的主設備號,並用於查找註冊該文件的模組。它註冊的字串完全無關。文件出現的名稱也完全無關,只要使用者知道名稱即可。沒有什麼可以阻止您呼叫磁碟/dev/this-disk
,而/dev/that-disk
不是如果您有這樣做的衝動,請更改規則。/dev/sda
/dev/sdb
udev
但當然人們喜歡讓事情變得簡單,這就是為什麼用於註冊設備的字串通常與它們在/dev
.但這是唯一的聯繫。