為什麼 /dev 和 /proc/devices 在 Linux 中有完全不同的輸出

為什麼 /dev 和 /proc/devices 在 Linux 中有完全不同的輸出

據我所知:

  • 一個驅動程式可以與一個或多個“設備”相關。

  • /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/sdbudev

當然人們喜歡讓事情變得簡單,這就是為什麼用於註冊設備的字串通常與它們在/dev.但這是唯一的聯繫。

相關內容