當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > Linux系統(tǒng)將設(shè)備驅(qū)動分為三種類型
1)字符設(shè)備
字符設(shè)備是能夠像字節(jié)流(比如文件)一樣訪問的設(shè)備,由字符設(shè)備驅(qū)動從程序來實現(xiàn)這種特性,通過/dev下的字符設(shè)備文件來訪問。字符設(shè)備驅(qū)動程序通常至少需要實現(xiàn)open、close、read和write等系統(tǒng)調(diào)用所對應(yīng)的、對該硬件進行操作的功能函數(shù)。
應(yīng)用程序調(diào)用system call,將會導(dǎo)致操作系統(tǒng)執(zhí)行上層功能組件的代碼,這些代碼會處理內(nèi)核的一些內(nèi)部事務(wù),為操作硬件做好準(zhǔn)備,然后就會調(diào)用驅(qū)動程序中實現(xiàn)的對硬件進行物理操作的函數(shù),從而完成對硬件的驅(qū)動,然后返回操作系統(tǒng)上層功能組件的代碼,做好內(nèi)核內(nèi)部的善后事務(wù),后返回應(yīng)用程序。
由于應(yīng)用程序必須使用/dev/目錄下的設(shè)備文件,所以該設(shè)備文件必須事先創(chuàng)建。
2)塊設(shè)備
塊設(shè)備通常是按照塊為單位來訪問數(shù)據(jù),比如一塊為512KB。
塊設(shè)備也是通過/dev目錄下的文件系統(tǒng)節(jié)點來訪問,塊設(shè)備和字符設(shè)備區(qū)別僅僅在于內(nèi)核內(nèi)部管理數(shù)據(jù)的方式,也就是內(nèi)核和驅(qū)動程序的接口不同。
塊設(shè)備除了給內(nèi)核提供和字符設(shè)備一樣的接口外,還提供了專門面向塊設(shè)備的接口,塊設(shè)備的接口必須支持掛裝文件系統(tǒng),通過此接口,塊設(shè)備能夠容納文件系統(tǒng),因此應(yīng)用程序一般通過文件系統(tǒng)來訪問塊設(shè)備上的內(nèi)容,而不是直接和設(shè)備打交道。
3)網(wǎng)絡(luò)設(shè)備
網(wǎng)絡(luò)設(shè)備驅(qū)動不同于字符設(shè)備和塊設(shè)備,不在/dev下以文件節(jié)點代表,而是通過單獨的網(wǎng)絡(luò)接口來代表。
任何網(wǎng)絡(luò)事務(wù)都要通過一個網(wǎng)絡(luò)接口,即一個能夠和其他主機交換數(shù)據(jù)的設(shè)備,通過接口代表一個硬件設(shè)備,但也可能是個純軟件設(shè)備。
內(nèi)核和網(wǎng)絡(luò)驅(qū)動程序間的通信完全不同于內(nèi)核和字符設(shè)備驅(qū)動以及塊設(shè)備前驅(qū)動程序之間的通信,內(nèi)核調(diào)用一套與數(shù)據(jù)包傳輸相關(guān)的函數(shù)。