1.設備驅動程序的概念



系統調用是操作系統內核和應用程序之間的接口,設備驅動程序是操作系統內核和機器硬件之間的接口。設備驅動程序爲應用程序屏蔽了硬件的細節,這樣在應用程序看來,硬件設備只是一個設備文件,應用程序可以象操作普通文件一樣對硬件設備進行操作。設備驅動程序是內核的一部分。

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()這樣的系統調用轉換成對物理設備的操作。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章