1、字元裝置和塊裝置
l字元裝置
字元裝置是指那些只能一位元組一位元組讀寫資料的裝置,不能隨機讀取裝置記憶體中的某一資料。其讀取需要按照先後順序,字元裝置是面向資料流的裝置。常見的有:滑鼠、鍵盤、串列埠、控制檯、LED等裝置。
l塊裝置
塊裝置是指那些可以從裝置的任意位置讀取一定長度的資料的裝置。其讀取資料不必要按照先後順序,可以定位到裝置的某一具體位置,讀取資料。常見的塊裝置有:硬碟、磁碟、U盤、SD卡等。
2、主裝置號和次裝置號
l每個裝置都有一個裝置號。主裝置號用來表示一個特定的驅動程式。次裝置號用來表示使用該驅動程式的各個裝置。
l主裝置號和次裝置號的表示:linux核心中,dev_t型別用來表示裝置號。為一長整形變數。32位機中高12位表示主裝置號,低20位表示次裝置號。
l主裝置號和次裝置號的獲取:使用MAJOR巨集獲得主裝置號,MINOR巨集獲得次裝置號。巨集MKDEV可以將主裝置號和次裝置號轉換為裝置號型別(dev_t)。MKDIR巨集將主裝置號(ma)左移20位,然後與次裝置號(mi)相與,得到裝置號。
l靜態分配裝置號:靜態指定一個裝置號。常用的可在documentation devices.txt中檢視。
l動態分配裝置號:使用函式alloc_chrdev_region()動態分配裝置號。
l檢視裝置號:在/proc/devices檔案中檢視系統中已經存在的裝置號。
3、申請和釋放裝置號
l申請裝置號:在構建字元裝置之前要向系統申請一個或多個裝置號。函式是register_chrdev_region(),在
int register_chardev_region(dev_t from,unsigned count,const char *name);
from是要分配的裝置號範圍的起始值,一般只提供from的主裝置號,from的次裝置號通常置0.count為要申請連續裝置號的個數。name是關聯的裝置名稱。成功返回0。動態申請裝置號用函式alloc_chrdev_region;
int alloc_chrdev_region(dev_t *dev,unsigned baseminor,unsigned count,const char *name);
dev作為輸出引數,若函式成功則儲存分配的裝置號。若申請的是連續一段號,則儲存第一個。baseminor表示要申請的第一個號,其通常為0.
l釋放裝置號:在不使用裝置時釋放裝置號用unregister_chrdev_region()函式。
void unregister_chrdev_region(dev_t from,unsigned count);
一般在模組解除安裝中呼叫。