abstract:1、linux設(shè)備驅(qū)動(dòng)計(jì)算機(jī)系統(tǒng)硬件主要由CPU、存儲(chǔ)器和外設(shè)組成。驅(qū)動(dòng)針對(duì)的對(duì)象是存儲(chǔ)器和外設(shè)(包括CPU內(nèi)部集成的存儲(chǔ)器和外設(shè)),而不是針對(duì)從CPU核。linux將存儲(chǔ)器和外設(shè)分為3個(gè)基礎(chǔ)大類。字符設(shè)備塊設(shè)備網(wǎng)絡(luò)設(shè)備 字符設(shè)備指那些必須以串行順序一次進(jìn)行訪問(wèn)的設(shè)備,如觸摸屏、磁帶驅(qū)動(dòng)器、鼠標(biāo)等?! K設(shè)備可以任意順序進(jìn)行訪問(wèn),以塊為單位進(jìn)行操作,如硬盤、軟驅(qū)等。 字符設(shè)備和塊設(shè)備的不同點(diǎn):
1、linux設(shè)備驅(qū)動(dòng)
計(jì)算機(jī)系統(tǒng)硬件主要由CPU、存儲(chǔ)器和外設(shè)組成。
驅(qū)動(dòng)針對(duì)的對(duì)象是存儲(chǔ)器和外設(shè)(包括CPU內(nèi)部集成的存儲(chǔ)器和外設(shè)),而不是針對(duì)從CPU核。linux將存儲(chǔ)器和外設(shè)分為3個(gè)基礎(chǔ)大類。
字符設(shè)備
塊設(shè)備
網(wǎng)絡(luò)設(shè)備
字符設(shè)備指那些必須以串行順序一次進(jìn)行訪問(wèn)的設(shè)備,如觸摸屏、磁帶驅(qū)動(dòng)器、鼠標(biāo)等。
塊設(shè)備可以任意順序進(jìn)行訪問(wèn),以塊為單位進(jìn)行操作,如硬盤、軟驅(qū)等。
字符設(shè)備和塊設(shè)備的不同點(diǎn):字符設(shè)備不經(jīng)過(guò)系統(tǒng)的快速緩沖,而塊設(shè)備經(jīng)過(guò)系統(tǒng)的快速緩沖。
在linux系統(tǒng)中,網(wǎng)絡(luò)設(shè)備面向數(shù)據(jù)包的接收和發(fā)送而設(shè)計(jì)的,它并不對(duì)應(yīng)于文件系統(tǒng)的節(jié)點(diǎn)。內(nèi)核與網(wǎng)絡(luò)設(shè)備的通信與內(nèi)核和字符設(shè)備、網(wǎng)絡(luò)設(shè)備的通信方式完全不同。
2.linux設(shè)備驅(qū)動(dòng)與整個(gè)軟硬件系統(tǒng)的關(guān)系
如下圖所示,除網(wǎng)絡(luò)設(shè)備外,字符設(shè)備與塊設(shè)備都被映射到linux文件系統(tǒng)的文件和目錄,通過(guò)文件系統(tǒng)的系統(tǒng)調(diào)用接口open(),write(),read(),close()等即可訪問(wèn)字符設(shè)備和塊設(shè)備,所有的字符設(shè)備和塊設(shè)備都被統(tǒng)一的呈現(xiàn)給用戶。塊設(shè)備比字符設(shè)備復(fù)雜,在它上面會(huì)首先建立一個(gè)磁盤/Flash文件系統(tǒng),如FAT、EXT3、YAFFS2 、JFFS2、 UBIFS等。FAT、EXT3、YAFFS2 、JFFS2、 UBIFS定義了文件和目錄在存儲(chǔ)介質(zhì)上的組織。
應(yīng)用程序可以使用linux的系統(tǒng)調(diào)用接口編程,但也可以使用c庫(kù)函數(shù),處于代碼可移植性的目的,后者更值得推薦。c庫(kù)函數(shù)本身也通過(guò)系統(tǒng)調(diào)用接口而實(shí)現(xiàn),如c庫(kù)函數(shù)fopen(),fwrite(),fread(),fclose()分別會(huì)調(diào)用操作系統(tǒng)的API open(),write(),read(),close().