2大型別的裝置驅動程式(2 main types of device driver)
在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。
相關文章
- platform_driver驅動及裝置驅動匹配識別符號Platform符號
- 驅動Driver-MISC雜項驅動裝置
- Windows NT 裝置驅動程式開發基礎(2) (轉)Windows
- 微軟釋出2萬行Linux裝置驅動程式程式碼微軟Linux
- [驅動安裝]win2k,XP下用setupapi.dll自動安裝DriverAPI
- Linux裝置驅動程式學習----1.裝置驅動程式簡介Linux
- Linux驅動之I2C匯流排裝置以及驅動Linux
- 字元裝置驅動 —— 字元裝置驅動框架字元框架
- Linux裝置驅動之字元裝置驅動Linux字元
- 《Linux裝置驅動開發詳解(第2版)》——第1章Linux裝置驅動概述及開發環境構建1.1裝置驅動的作用Linux開發環境
- 框架-裝置與驅動的拆分及實現-I2C框架
- Linux裝置驅動程式 (轉)Linux
- 在Linux中,什麼是裝置驅動程式?如何安裝和解除安裝裝置驅動程式?Linux
- LINUX下的裝置驅動程式 (轉)Linux
- Research2guidance:智慧移動裝置驅動醫療商機GUI
- 裝置驅動程式包可以刪除嗎 win10裝置驅動程式包能刪嗎Win10
- Struts2的屬性驅動與模型驅動的區別模型
- 深入淺出:Linux裝置驅動之字元裝置驅動Linux字元
- 乾坤合一:Linux裝置驅動之塊裝置驅動Linux
- Linux驅動實踐:如何編寫【 GPIO 】裝置的驅動程式?Linux
- win10系統連線蘋果裝置提示Apple Mobile Device USB Composite Device驅動程式錯誤怎麼辦Win10蘋果APPdev
- Windows裝置和驅動的安裝Windows
- 蛻變成蝶:Linux裝置驅動之字元裝置驅動Linux字元
- 蛻變成蝶~Linux裝置驅動之字元裝置驅動Linux字元
- 手把手教你寫Linux I2C裝置驅動薦Linux
- 驅動Driver-platform平臺驅動Platform
- LED字元裝置驅動字元
- UNIX下裝置驅動程式的基本結構(轉)
- Ubuntu Nvidia driver驅動安裝及解除安裝Ubuntu
- Windows95的裝置驅動程式的編寫 (轉)Windows
- 基於匯流排裝置驅動模型的按鍵讀取驅動程式模型
- 乾坤合一:Linux裝置驅動之USB主機和裝置驅動Linux
- SCO UNIX 下裝置驅動程式開發 (轉)
- SCO UNIX 下裝置驅動程式開發(轉)
- 裝置驅動程式INF檔案——INF檔案的節
- 字元驅動裝置踩坑字元
- Linux塊裝置驅動Linux
- platform 裝置驅動實驗Platform