當前位置:才華齋>計算機>作業系統>

linux主次裝置號介紹

作業系統 閱讀(2.41W)

linux主次裝置號有哪些呢?下面是小編給大家介紹一下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裝置的註冊情況。