2大型別的裝置驅動程式(2 main types of device driver)

JUAN425發表於2014-08-15

在Linux 作業系統(實際上是任何作業系統都有著兩個主要的device driver)中, 主要有2大device driver, 分別如下:

(1) character device driver(字元裝置驅動) 特點如下:

character device driver writes and reads  character by character to the device  and from the device

      operrrating in a blocking mode whereby when the user writes information to the device,   the user must wait for the device (which is attached to your computer)to be finished being  written to before  continuing execution of the user code。 (該工作模式又稱為synchronous operation(同步操作))

most common of all device driver。 



(2)block device driver(塊裝置驅動), 特點如下:

writing and reading block by block.

CPU intensive,  operations take long time to complete.  (可以稱其工作在asynchronous mode operation,即使用者不用等待裝置完成讀取或者寫入就可以執行後面的程式)。

block device driver 具有cache(快取)。


我們重點關注character device driver(字元裝置驅動器)。


接下來, 我們概述一下Linux系統中構建一個device driver所需要的幾大步。 參見下圖:



首先, 第一步, 就是建立一個device File(裝置檔案)。 

開啟Linux的terminal, 切換到/dev 目錄中:

程式如下:

cd  /dev


所以我們進入到了dev 目錄中了。

我們可以使用ls 檢視其中所有裝置:


下面我們檢視一個device的資訊:



上述資訊解釋如下:

crw的意思是character device, 可以read, 可以write。 這個device的major number為4(device driver為4), minor number為0.。  

接下來, 建立一個新的自己的device File(是與計算機連線的一個device的對映到Linux的檔案), 命令如下:

mkmod  /dev/myTestDeviceFile c 900 1

解釋: c 表示character device, b 代表block device。 900 表示major number, 1表示minor number。major number 必須是unique的, 即和你的kernel裡面的所有的device driver都不同。  如果不滿足唯一這個條件, 就會出現conflict的錯誤。 

要檢視整個的device driver的major number, 地址如下:



點選Enter, 發現這個命令的執行必須是超級使用者, 所以切換為超級使用者:



解決辦法如下:



這樣檢視, 可以看出, 我們成功的建立了我們的device File:


我們可以檢視我們的這個device File的資訊:


這個裝置檔案將與使用者如何去access到kernel space中的真實的裝置有關。 我們知道, user處於userspace中, 永遠無法直接access kernel space(核空間),  所以我們唯一可以和device diver 交流的途徑就是通過我們建立的這個device File。 user 可以open 這個device File, 可以開啟, 可以讀取其中的內蓉, 也可以寫進去內容。 但是一旦我們執行這些操作後, 就會呼叫device driver, 然後我們的裝置驅動程式就開始talk to the physical device。 

相關文章