1. 程式人生 > >linux核心、驅動和硬體之間的關係和通訊

linux核心、驅動和硬體之間的關係和通訊

linux驅動是直接和硬體打交道的軟體程式。層次結構上它處於作業系統和硬體之間。

驅動與linux核心的關係

驅動程式提供的一組裝置驅動介面函式Device Driver Interface給作業系統在linux中,這一組裝置驅動介面函式一般包括open,close,read,write,ioctl等。 這一組函式是通過一個叫做file operations的結構體註冊給linux核心的。 Linux核心提供特定的系統功能函式進行驅動程式的註冊。註冊時提供裝置驅動檔名稱、裝置號給對應的file operations結構體,file operations結構體中儲存有一組裝置驅動介面函式指標。

參考連結

驅動程式還需要提供2個模組介面函式給作業系統。

Linux裝置驅定作為一個linux核心模組存在。模組都有2個介面函式。 模組初始化函式和模組退出函式。 上面提到的驅動程式的註冊。一般是由模組初始化函式來實現的。模組退出函式則用於取消核心註冊,釋放資源。 可見只有運行了驅動的這個模組初始化函式之後,驅動程式才能夠被註冊,核心才能找到裝置驅動。 那麼什麼時候模組初始化函式才獲得執行呢?動態載入時,即執行insmode時。靜態載入時模組編譯進核心系統初始化時會自動呼叫這個模組初始化函式。

驅動與應用程式的關係

對於應用程式來說,驅動所對應的裝置檔案就代表著驅動。應用程式通過linux系統呼叫使用驅動。 應用程式通過linux檔案作業系統呼叫使用驅動。也就是說裝置驅動對於使用者來說同操作一個檔案沒有區別

。代表這個驅動的是驅動所對應的裝置檔案。

驅動與硬體的關係

硬體對於驅動程式來講,可以抽象為一組暫存器和需要響應的中斷源。對於統一定址的系統,比如ARM,這一組暫存器就是一段地址空間。驅動就是按照晶片手冊規定的原則,讀取或者寫入這些地址空間。中斷源是硬體產生的中斷,中斷是由核心響應的,需要給這個中斷註冊一箇中斷處理函式。這可以通過呼叫linux核心提供特定的系統功能函式進行。 一般註冊中斷處理函式,可以在模組初始化函式裡實現,或者在裝置驅動介面程式open中實現。