
298
|
第八章
裝置節點
裝置節點
(
device node
)是一種特殊檔案,應用程式可以透過它介接裝置驅動程式
(device driver)。當應用程式在一個裝置節點上進行平常的 Unix I/O 時—像是開啟、
關閉、讀取、寫入…等等,核心並不會像一般檔案 I/O 那樣來處理這些要求。事實上,
核心會將此類要求傳遞給一個裝置驅動程式。裝置驅動程式會處理該 I/O 操作,以及把
結果傳回給用戶。裝置節點所提供的裝置抽象層,讓應用程式不需要熟悉裝置的具體情
況,甚至不必掌控特殊的介面。的確,在 Unix 系統上,裝置節點是存取硬體的標準機
制。網路裝置是罕見的例外,並且在 Unix 的歷史中,對此例外是否為錯誤有些爭論。
使用
read()
、
write()
及
mmap()
等呼叫來操作一個機器的所有硬體,的確具有一種優雅
的美感。
核心如何辨別應該由哪個裝置驅動程式來處理要求?每個裝置節點會被指定兩個數值,
稱為
主要編號
(
major numbe
r)及
次要編號
(
minor number
)。這些主要和次要編號會映
射至被載入核心的特定裝置驅動程式。如果一個裝置節點所具有的主要和次要編號並未
映射至核心裡的裝置驅動程式—會因為各種原因突然發生此情況—則裝置節點上的一個
open()
要求,會傳回
-1
並且把
errno
設定為
ENODEV
。於是我們會說,此裝置節點碰上了
不存在的裝置。
特殊裝置節點
特殊裝置節點存在於所有的 Linux 系統之上。這些裝置節點是 Linux 開發環境的一部
分,而且它們的存在被視為 Linux ABI ...