1 裝置驅動程式的概念

2021-07-02 13:00:23 字數 2549 閱讀 3447

系統呼叫是作業系統核心和應用程式之間的介面,裝置驅動程式是作業系統核心和機器硬體之間的介面。裝置驅動程式為應用程式遮蔽了硬體的細節,這樣在應用程式看來,硬體裝置只是乙個裝置檔案,應用程式可以象操作普通檔案一樣對硬體裝置進行操作。裝置驅動程式是核心的一部分。

linux將裝置主要分成兩大類:一類是塊裝置,類似磁碟以記錄塊或扇區為單位,成塊進行輸入/輸出的裝置;另一類是字元裝置,類似鍵盤以字元為單位,逐個進行輸入/輸出的裝置。網路裝置是介於塊裝置和字元裝置之間的一種特殊裝置。

塊裝置介面僅支援面向塊的i/o操作,所有i/o操作都通過在核心位址空間中的i/o緩衝區進行,它可以支援隨機訪問的功能。檔案系統通常都建立在塊裝置上。

字元裝置介面支援面向字元的i/o操作,由於它們不經過系統的快速快取,所以它們負責管理自己的緩衝區結構。字元裝置介面只支援順序訪問的功能,一般不能進行任意長度的i/o請求,而是限制i/o請求的長度必須是裝置要求的基本塊長的倍數。

裝置驅動程式實際是處理和操作硬體控制器的軟體,從本質上講,是核心中具有最高特權級的、駐留記憶體的、可共享的底層硬體處理例程。驅動程式是核心的一部分,是作業系統核心與硬體裝置的直接介面,驅動程式遮蔽了硬體的細節,完成以下功能:

— 對裝置初始化和釋放;

— 對裝置進行管理,包括實時引數設定,以及提供對裝置的操作介面;

— 讀取應用程式傳送給裝置檔案的資料或者回送應用程式請求的資料;

— 檢測和處理裝置出現的錯誤。

linux作業系統將所有的裝置全部看成檔案,並通過檔案的操作介面進行操作。對使用者程式而言,裝置驅動程式隱藏了裝置的具體細節,對各種不同裝置提供了 一致的介面,一般來說,是把裝置對映為乙個特殊的裝置檔案,使用者程式可以像對其他檔案一樣對此裝置檔案進行操作。這意味著:

— 由於每乙個裝置至少由檔案系統的乙個檔案代表,因而都有乙個「檔名」。

— 應用程式通常可以通過系統呼叫open()開啟裝置檔案,建立起與目標裝置的連線。

— 開啟了代表著目標裝置的檔案,即建立起與裝置的連線後,可以通過read()、write()、ioctl()等常規的檔案操作對目標裝置進行操作。

裝置檔案的屬性由三部分資訊組成:第一部分是檔案的型別,第二部分是乙個主裝置號,第三部分是乙個次裝置號。其中型別和主裝置號結合在一起惟一地確定了裝置檔案驅動程式及其介面,而次裝置號則說明目標裝置是同類裝置中的第幾個。

由於linux 中將裝置當做檔案處理,所以對裝置進行操作的呼叫格式與對檔案的操作類似,主要包括open()、read()、write()、ioctl()、 close()等。應用程式發出系統呼叫命令後,會從使用者態轉到核心態,通過核心將open()這樣的系統呼叫轉換成對物理裝置的操作。

系統呼叫是作業系統核心和應用程式之間的介面,裝置驅動程式是作業系統核心和機器硬體之間的介面。裝置驅動程式為應用程式遮蔽了硬體的細節,這樣在應用程式看來,硬體裝置只是乙個裝置檔案,應用程式可以象操作普通檔案一樣對硬體裝置進行操作。裝置驅動程式是核心的一部分。

linux將裝置主要分成兩大類:一類是塊裝置,類似磁碟以記錄塊或扇區為單位,成塊進行輸入/輸出的裝置;另一類是字元裝置,類似鍵盤以字元為單位,逐個進行輸入/輸出的裝置。網路裝置是介於塊裝置和字元裝置之間的一種特殊裝置。

塊裝置介面僅支援面向塊的i/o操作,所有i/o操作都通過在核心位址空間中的i/o緩衝區進行,它可以支援隨機訪問的功能。檔案系統通常都建立在塊裝置上。

字元裝置介面支援面向字元的i/o操作,由於它們不經過系統的快速快取,所以它們負責管理自己的緩衝區結構。字元裝置介面只支援順序訪問的功能,一般不能進行任意長度的i/o請求,而是限制i/o請求的長度必須是裝置要求的基本塊長的倍數。

裝置驅動程式實際是處理和操作硬體控制器的軟體,從本質上講,是核心中具有最高特權級的、駐留記憶體的、可共享的底層硬體處理例程。驅動程式是核心的一部分,是作業系統核心與硬體裝置的直接介面,驅動程式遮蔽了硬體的細節,完成以下功能:

— 對裝置初始化和釋放;

— 對裝置進行管理,包括實時引數設定,以及提供對裝置的操作介面;

— 讀取應用程式傳送給裝置檔案的資料或者回送應用程式請求的資料;

— 檢測和處理裝置出現的錯誤。

linux作業系統將所有的裝置全部看成檔案,並通過檔案的操作介面進行操作。對使用者程式而言,裝置驅動程式隱藏了裝置的具體細節,對各種不同裝置提供了 一致的介面,一般來說,是把裝置對映為乙個特殊的裝置檔案,使用者程式可以像對其他檔案一樣對此裝置檔案進行操作。這意味著:

— 由於每乙個裝置至少由檔案系統的乙個檔案代表,因而都有乙個「檔名」。

— 應用程式通常可以通過系統呼叫open()開啟裝置檔案,建立起與目標裝置的連線。

— 開啟了代表著目標裝置的檔案,即建立起與裝置的連線後,可以通過read()、write()、ioctl()等常規的檔案操作對目標裝置進行操作。

裝置檔案的屬性由三部分資訊組成:第一部分是檔案的型別,第二部分是乙個主裝置號,第三部分是乙個次裝置號。其中型別和主裝置號結合在一起惟一地確定了裝置檔案驅動程式及其介面,而次裝置號則說明目標裝置是同類裝置中的第幾個。

由於linux 中將裝置當做檔案處理,所以對裝置進行操作的呼叫格式與對檔案的操作類似,主要包括open()、read()、write()、ioctl()、 close()等。應用程式發出系統呼叫命令後,會從使用者態轉到核心態,通過核心將open()這樣的系統呼叫轉換成對物理裝置的操作。

裝置驅動(1) 驅動程式簡介

裝置驅動是幹什麼用的?linux裝置驅動程式使得特定的硬體響應乙個定義良好的內部程式設計介面 系統呼叫open read write close 這些介面完全隱藏了裝置的工作細節。使得使用者通過呼叫標準的系統呼叫來完成對於硬體的操作。字元裝置是一種按位元組順序訪問的裝置,因此字元裝置通常至少要實現o...

linux裝置驅動程式 字元裝置驅動程式

先留個 有一起學習驅動程式的加qq295699450 字元裝置驅動 這篇比較惱火。載入成功,但是讀不出來資料,有知道怎麼回事的,留個言,一起討論下 資料結構 struct scull mem struct scull dev dev 整個驅動程式 如下 include include include...

Linux裝置驅動程式 字元裝置驅動程式

1.檢視主裝置號,次裝置號 進入 dev目錄執行ls l,第四,五列分別為主次裝置號,10,180,1,5,這些是主裝置號,而60,63這些就是次裝置號 130 shell android dev ls l crw rw r system radio 10,60 1969 12 31 21 00 a...