linux主次裝置號有哪些呢?下面是小編給大家介紹一下linux主次裝置號,大家可以參考閱讀,更多詳情請關注應屆畢業生考試網。
1、主裝置號與次裝置號的功能
在Linux核心中,主裝置號標識裝置對應的驅動程式,告訴Linux核心使用哪一個驅動程式為該裝置(也就是/dev下的裝置檔案)服務;而次裝置號則用來標識具體且唯一的某個裝置。
比如說在linux的終端打入命令:
**@ubuntu:/dev$ ls –l
crw-rw—- 1 root root 4, 0 2010-05-25 06:50 tty0
crw——- 1 root root 4, 1 2010-05-25 06:51 tty1
會出現很多的檔案列表,這裡舉例字串裝置檔案【字串裝置的開頭表示為c,當然塊裝置表示為b】,這些檔案可以稱為檔案系統書的節點,都是位於/dev目錄下。另外上面2行中的數字,4【紫紅表示】,0,1【藍色表示】分別表示的是該裝置的主裝置號,次裝置號。一個主裝置號和一個次裝置號就組成了該裝置的.唯一識別符號。雖然現在的linux核心允許多個驅動程式共享主裝置號,但是現在大多數的裝置仍然按照“一個主裝置號對應一個驅動程式”的原則組織。次裝置號用來指向驅動程式所實現的裝置,核心本身基本上不會去關心關於次裝置號的任何其他資訊。
檢視系統已經分配的主裝置有哪些:
#cat /proc/devices
2、裝置編號的內部表達
裝置號的型別是dev_t型別(2.4核心為kdev_t),在<linux/coda.h>中定義。
typedef unsigned long dev_t ;
其中dev_t是一個32位的數,12位表示主裝置號,另外20位表示次裝置號。
2.6核心把主裝置號由8位擴充套件到12位,而次裝置號由8位擴充套件到20位。
獲取主裝置號和次裝置號的方法如下:
MAJOR(dev_t dev):根據裝置號dev獲得主裝置號;
MINOR(dev_t dev):根據裝置號dev獲得次裝置號;
在<linux/kdev_t.h> 中以上巨集的定義如下:
#define MAJOR(dev) ((unsigned int) ((dev) >> MINORBITS))
#define MINOR(dev) ((unsigned int) ((dev) & MINORMASK))
根據主裝置號major和次裝置號minor構建裝置號(轉換成dev_t的型別),可以使用
MKDEV(int major, int minor);
在<linux/kdev_t.h> 中以上巨集的定義如下:
#define MKDEV(ma,mi) (((ma) << MINORBITS) | (mi))
3、雜項裝置的介紹
misc裝置,主裝置號為10,函式註冊的方式也不一樣。使用如下:
misc_register(&XXX_miscdev);
misc_deregister(&XXX_miscdev);
上面的函式需指定miscdevice結構體,
在#include <linux/miscdevice.h>中定義:
C++程式碼
struct miscdevice
{
int minor; //次裝置號
const char *name; //裝置驅動程式的名稱
struct file_operations *fops; //file_operation
struct miscdevice *next, *prev; //用於內部管理
devfs_handle_t devfs_handle; //用於內部管理
}
開發人員必須定義的filed包括:minor ,name 及fops如下:
C++程式碼
static struct miscdevice mymisc_dev = {
r = MISC_DYNAMIC_MINOR,
= "mymisc",
= &mymisc_fops,
};
可以通過#cat /proc/misc來檢視misc裝置的註冊情況。