主裝置號用來標識與裝置檔案相連的驅動程式.用來反映裝置型別.
次裝置號被驅動程式用來辨別操作的是哪乙個裝置.用來區分同型別的裝置.
通過的是主裝置號.
字元裝置檔案 本身沒有太多的內容,通過 字元裝置檔案 能找到 字元裝置驅動程式 ,
字元裝置檔案 能將 應用程式 的需求傳遞給 字元裝置驅動程式.
核心中如何描述裝置號:
使用的是dev_t 這個型別,其實質是unsigned int 32 位整數,其中高 12 位為主裝置號,
低 20 位 為 次裝置號.
如何從dev_t 中 分解出主、次裝置號:
主裝置號: major( dev_t dev ) , 次裝置號 minor( dev_t dev ) .
linux 核心可以採用 靜態申請 和 動態申請 兩種方法.
方法:1,根據 documentation/devices.txt ,確定乙個沒有使用的主裝置號.
2,使用 register_ chrdev_region 函式註冊裝置號.
優點: 簡單.
缺點:一旦驅動被廣泛使用,這個隨機選定的主裝置號可能會導致裝置號衝突,
而使驅動程式無法註冊.
函式:int register_ chrdev_region( dev_t from , unsigned count , const char * name )
要註冊的裝置號 要註冊裝置號的個數 裝置名(體現在 /proc/devices)
方法:使用alloc_chrdev_region 分配裝置號.
有點:易於推廣.
缺點:無法在安裝驅動前建立 裝置檔案 ( 因為安裝前沒有分配到 主裝置號) .
解決辦法:安裝驅動後,從 /proc/devices 查詢裝置號.
函式:int alloc_chrdev_region( dev_t *dev , unsigned baseminor , unsigned count , const char * name )
分配到的裝置號 起始次裝置號 要註冊裝置號的個數 裝置名(體現在 /proc/devices)
不論使用何種方法分配到的裝置號,都應該在不使用它們時釋放這些裝置號.
函式: void unregister_chrdev_region ( dev_t from , unsigned count)
釋放從from開始的 count 個裝置號.
1,使用 mknod 命令手工建立.
2,自動建立(驅動程式來實現).
mknod filename type major minor
裝置檔名 裝置檔案型別 主裝置號 次裝置號
eg. mknod serial0 c 100 0 .
裝置與驅動的關係以及裝置號 裝置檔案
linux裝置分類 linux下的裝置通常分為三類,字元裝置,塊裝置和網路裝置。字元裝置 乙個字元裝置是一種位元組流裝置,對裝置的訪問只能按順序按位元組的訪問而不能隨機訪問,字元裝置沒有請求緩衝區,所有的訪問請求都是按順序執行的。linux下的大多裝置都是字元裝置。應用程式是通過字元裝置節點來訪問字...
裝置驅動及Linux裝置號
在乙個計算機系統的開發過程中,應用層一般不會去關心底層硬體的具體操作,而是專注於應用層業務邏輯的實現,因此我們會將涉及到裝置硬體底層的操作封裝成乙個個介面,應用層在進行業務設計的過程中只需呼叫這些介面便可以完成想要的操作,這些介面我們可以成為裝置驅動。即使在乙個不執行作業系統的系統中 如傳統的51微...
裝置驅動例項 字元裝置驅動
在整個linux裝置驅動學習中,字元裝置驅動較為基礎。通過對它的學習,對裝置驅動進一步加深了解 cdev 結構體struct cdev 講下比較重要的成員變數 dev t dev 定義了32位的裝置號,其中12位是主裝置號,20位是從裝置號。獲取主裝置號 major dev t dev 獲取從裝置號...