1)字符設備
字符設備是能夠像字節流(比如文件)一樣訪問的設備,由字符設備驅動從程序來實現這種特性,通過/dev下的字符設備文件來訪問。字符設備驅動程序通常至少需要實現open、close、read和write等系統調用所對應的、對該硬件進行操作的功能函數。
應用程序調用system call,將會導致操作系統執行上層功能組件的代碼,這些代碼會處理內核的一些內部事務,為操作硬件做好準備,然后就會調用驅動程序中實現的對硬件進行物理操作的函數,從而完成對硬件的驅動,然后返回操作系統上層功能組件的代碼,做好內核內部的善后事務,后返回應用程序。
由于應用程序必須使用/dev/目錄下的設備文件,所以該設備文件必須事先創建。
2)塊設備
塊設備通常是按照塊為單位來訪問數據,比如一塊為512KB。
塊設備也是通過/dev目錄下的文件系統節點來訪問,塊設備和字符設備區別僅僅在于內核內部管理數據的方式,也就是內核和驅動程序的接口不同。
塊設備除了給內核提供和字符設備一樣的接口外,還提供了專門面向塊設備的接口,塊設備的接口必須支持掛裝文件系統,通過此接口,塊設備能夠容納文件系統,因此應用程序一般通過文件系統來訪問塊設備上的內容,而不是直接和設備打交道。
3)網絡設備
網絡設備驅動不同于字符設備和塊設備,不在/dev下以文件節點代表,而是通過單獨的網絡接口來代表。
任何網絡事務都要通過一個網絡接口,即一個能夠和其他主機交換數據的設備,通過接口代表一個硬件設備,但也可能是個純軟件設備。
內核和網絡驅動程序間的通信完全不同于內核和字符設備驅動以及塊設備前驅動程序之間的通信,內核調用一套與數據包傳輸相關的函數。
鍗庢竻鍥句功棣�
0鍏冪數瀛愪功锛岄檺鏃跺厤璐圭敵棰�10鏈崕娓呭浘涔�PDF鐗�
鎵爜鍏虫敞鍗庢竻杩滆鍏紬鍙�