嵌入式Linux設備驅動(dòng)開(kāi)發(fā)之:設備驅動(dòng)概述
通過(guò)文件屬性可以查看它們是哪種設備文件(字符設備文件或塊設備文件)。
$ls–l/dev
crw-rw----1rootuucp4,6408-3022:58ttyS0/*串口設備,c表示字符設備*/
brw-r-----1rootfloppy2,008-3022:58fd0/*軟盤(pán)設備,b表示塊設備*/
n 網(wǎng)絡(luò )設備通常是指通過(guò)網(wǎng)絡(luò )能夠與其他主機進(jìn)行數據通信的設備,如網(wǎng)卡等。
內核和網(wǎng)絡(luò )設備驅動(dòng)程序之間的通信調用一套數據包處理函數,它們完全不同于內核和字符以及塊設備驅動(dòng)程序之間的通信(read()、write()等函數)。Linux網(wǎng)絡(luò )設備不是面向流的設備,因此不會(huì )將網(wǎng)絡(luò )設備的名字(例如eth0)映射到文件系統中去。
對這3種設備文件編寫(xiě)驅動(dòng)程序時(shí)會(huì )有一定的區別,本書(shū)在后面會(huì )有相關(guān)內容的講解。
11.1.3設備號
設備號是一個(gè)數字,它是設備的標志。就如前面所述,一個(gè)設備文件(也就是設備節點(diǎn))可以通過(guò)mknod命令來(lái)創(chuàng )建,其中指定了主設備號和次設備號。主設備號表明設備的類(lèi)型(例如串口設備、SCSI硬盤(pán)),與一個(gè)確定的驅動(dòng)程序對應;次設備號通常是用于標明不同的屬性,例如不同的使用方法、不同的位置、不同的操作等,它標志著(zhù)某個(gè)具體的物理設備。高字節為主設備號,底字節為次設備號。
例如,在系統中的塊設備IDE硬盤(pán)的主設備號是3,而多個(gè)IDE硬盤(pán)及其各個(gè)分區分別賦予次設備號1、2、3…
$ls–l/dev
crw-rw----1rootuucp4,6408-3022:58ttyS0/*主設備號4,此設備號64*/
11.1.4驅動(dòng)層次結構
Linux下的設備驅動(dòng)程序是內核的一部分,運行在內核模式下,也就是說(shuō)設備驅動(dòng)程序為內核提供了一個(gè)I/O接口,用戶(hù)使用這個(gè)接口實(shí)現對設備的操作。圖11.1顯示了典型的Linux輸入/輸出系統中各層次結構和功能。
圖11.1Linux輸入/輸出系統
層次結構和功能
Linux設備驅動(dòng)程序包含中斷處理程序和設備服務(wù)子程序兩部分。
設備服務(wù)子程序包含了所有與設備操作相關(guān)的處理代碼。它從面向用戶(hù)進(jìn)程的設備文件系統中接受用戶(hù)命令,并對設備控制器執行操作。這樣,設備驅動(dòng)程序屏蔽了設備的特殊性,使用戶(hù)可以像對待文件一樣操作設備。
設備控制器獲得系統服務(wù)有兩種方式:查詢(xún)和中斷。因為L(cháng)inux的設備驅動(dòng)程序是內核的一部分,在設備查詢(xún)期間系統不能運行其他代碼,查詢(xún)方式的工作效率比較低,所以只有少數設備如軟盤(pán)驅動(dòng)程序采取這種方式,大多設備以中斷方式向設備驅動(dòng)程序發(fā)出輸入/輸出請求。
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)linux相關(guān)文章:linux教程
評論