Linux系統將設備(bei)驅動分為三種(zhong)類型
時間:2018-09-29 來源(yuan):未知
1)字符設備
字(zi)符(fu)設(she)備是(shi)能夠像字(zi)節流(比如文件(jian))一樣訪問的(de)設(she)備,由字(zi)符(fu)設(she)備驅動(dong)從程序來實(shi)(shi)現(xian)這種(zhong)特性,通過(guo)/dev下的(de)字(zi)符(fu)設(she)備文件(jian)來訪問。字(zi)符(fu)設(she)備驅動(dong)程序通常至少需要實(shi)(shi)現(xian)open、close、read和write等(deng)系統調用所對應的(de)、對該硬件(jian)進行操(cao)作的(de)功(gong)能函數。
應用程序調用system call,將會(hui)導(dao)致操作(zuo)(zuo)系(xi)統執行上層(ceng)功(gong)能組件(jian)的代碼(ma)(ma),這些代碼(ma)(ma)會(hui)處(chu)理內(nei)核的一些內(nei)部事務,為操作(zuo)(zuo)硬件(jian)做好(hao)準備,然后就會(hui)調用驅動(dong)程序中實現的對硬件(jian)進(jin)行物理操作(zuo)(zuo)的函數(shu),從而完成對硬件(jian)的驅動(dong),然后返回操作(zuo)(zuo)系(xi)統上層(ceng)功(gong)能組件(jian)的代碼(ma)(ma),做好(hao)內(nei)核內(nei)部的善后事務,后返回應用程序。
由于應用程序(xu)必(bi)須使用/dev/目錄下(xia)的設(she)備(bei)文(wen)件,所以該設(she)備(bei)文(wen)件必(bi)須事先(xian)創建。
2)塊設備
塊設備通常是按照塊為單位(wei)來訪問數據,比如(ru)一塊為512KB。
塊設(she)備也(ye)是通(tong)過/dev目(mu)錄下的文件(jian)系統(tong)節點(dian)來訪問(wen),塊設(she)備和字符設(she)備區別僅僅在于內核(he)內部管(guan)理數據的方式(shi),也(ye)就(jiu)是內核(he)和驅動程序(xu)的接口不同(tong)。
塊(kuai)設(she)(she)備(bei)除了給內核提供和字符設(she)(she)備(bei)一(yi)樣(yang)的接(jie)(jie)口(kou)外,還提供了專門面(mian)向塊(kuai)設(she)(she)備(bei)的接(jie)(jie)口(kou),塊(kuai)設(she)(she)備(bei)的接(jie)(jie)口(kou)必須(xu)支持掛(gua)裝文件(jian)(jian)系(xi)統(tong),通(tong)過此接(jie)(jie)口(kou),塊(kuai)設(she)(she)備(bei)能夠容納(na)文件(jian)(jian)系(xi)統(tong),因(yin)此應用程序一(yi)般通(tong)過文件(jian)(jian)系(xi)統(tong)來訪問塊(kuai)設(she)(she)備(bei)上的內容,而不(bu)是直接(jie)(jie)和設(she)(she)備(bei)打交道(dao)。
3)網絡設備
網絡設(she)備驅動不同于字(zi)符設(she)備和塊設(she)備,不在/dev下以(yi)文件(jian)節(jie)點代(dai)(dai)表,而(er)是通過單獨(du)的網絡接口來代(dai)(dai)表。
任何網(wang)絡事務都要通(tong)過(guo)一(yi)個網(wang)絡接口,即一(yi)個能夠和其(qi)他主機交(jiao)換數(shu)據的設(she)(she)備(bei)(bei),通(tong)過(guo)接口代表一(yi)個硬件設(she)(she)備(bei)(bei),但(dan)也可能是個純(chun)軟件設(she)(she)備(bei)(bei)。
內核(he)(he)和(he)網絡驅動(dong)程(cheng)序間的通(tong)(tong)信完全(quan)不同于內核(he)(he)和(he)字(zi)符設(she)備驅動(dong)以及塊設(she)備前驅動(dong)程(cheng)序之間的通(tong)(tong)信,內核(he)(he)調用一套與數(shu)據包(bao)傳輸(shu)相關的函數(shu)。

