- 相關(guān)推薦
linux主次設(shè)備號介紹
linux主次設(shè)備號有哪些呢?下面是小編給大家介紹一下linux主次設(shè)備號,大家可以參考閱讀,更多詳情請關(guān)注應(yīng)屆畢業(yè)生考試網(wǎng)。
1、主設(shè)備號與次設(shè)備號的功能
在Linux內(nèi)核中,主設(shè)備號標識設(shè)備對應(yīng)的驅(qū)動程序,告訴Linux內(nèi)核使用哪一個驅(qū)動程序為該設(shè)備(也就是/dev下的設(shè)備文件)服務(wù);而次設(shè)備號則用來標識具體且唯一的某個設(shè)備。
比如說在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
會出現(xiàn)很多的文件列表,這里舉例字符串設(shè)備文件【字符串設(shè)備的開頭表示為c,當然塊設(shè)備表示為b】,這些文件可以稱為文件系統(tǒng)書的節(jié)點,都是位于/dev目錄下。另外上面2行中的數(shù)字,4【紫紅表示】,0,1【藍色表示】分別表示的是該設(shè)備的主設(shè)備號,次設(shè)備號。一個主設(shè)備號和一個次設(shè)備號就組成了該設(shè)備的唯一標識符。雖然現(xiàn)在的linux內(nèi)核允許多個驅(qū)動程序共享主設(shè)備號,但是現(xiàn)在大多數(shù)的設(shè)備仍然按照“一個主設(shè)備號對應(yīng)一個驅(qū)動程序”的原則組織。次設(shè)備號用來指向驅(qū)動程序所實現(xiàn)的設(shè)備,內(nèi)核本身基本上不會去關(guān)心關(guān)于次設(shè)備號的任何其他信息。
查看系統(tǒng)已經(jīng)分配的主設(shè)備有哪些:
#cat /proc/devices
2、設(shè)備編號的內(nèi)部表達
設(shè)備號的類型是dev_t類型(2.4內(nèi)核為kdev_t),在<linux/coda.h>中定義。
typedef unsigned long dev_t ;
其中dev_t是一個32位的數(shù),12位表示主設(shè)備號,另外20位表示次設(shè)備號。
2.6內(nèi)核把主設(shè)備號由8位擴展到12位,而次設(shè)備號由8位擴展到20位。
獲取主設(shè)備號和次設(shè)備號的方法如下:
MAJOR(dev_t dev):根據(jù)設(shè)備號dev獲得主設(shè)備號;
MINOR(dev_t dev):根據(jù)設(shè)備號dev獲得次設(shè)備號;
在<linux/kdev_t.h> 中以上宏的定義如下:
#define MAJOR(dev) ((unsigned int) ((dev) >> MINORBITS))
#define MINOR(dev) ((unsigned int) ((dev) & MINORMASK))
根據(jù)主設(shè)備號major和次設(shè)備號minor構(gòu)建設(shè)備號(轉(zhuǎn)換成dev_t的類型),可以使用
MKDEV(int major, int minor);
在<linux/kdev_t.h> 中以上宏的定義如下:
#define MKDEV(ma,mi) (((ma) << MINORBITS) | (mi))
3、雜項設(shè)備的介紹
misc設(shè)備,主設(shè)備號為10,函數(shù)注冊的方式也不一樣。使用如下:
misc_register(&XXX_miscdev);
misc_deregister(&XXX_miscdev);
上面的函數(shù)需指定miscdevice結(jié)構(gòu)體,
在#include <linux/miscdevice.h>中定義:
C++代碼
struct miscdevice
{
int minor; //次設(shè)備號
const char *name; //設(shè)備驅(qū)動程序的名稱
struct file_operations *fops; //file_operation
struct miscdevice *next, *prev; //用于內(nèi)部管理
devfs_handle_t devfs_handle; //用于內(nèi)部管理
}
開發(fā)人員必須定義的filed包括:minor ,name 及fops如下:
C++代碼
static struct miscdevice mymisc_dev = {
.minor = MISC_DYNAMIC_MINOR,
.name = "mymisc",
.fops = &mymisc_fops,
};
可以通過#cat /proc/misc來查看misc設(shè)備的注冊情況。
【linux主次設(shè)備號介紹】相關(guān)文章:
Linux系統(tǒng)調(diào)用設(shè)備的ioctl函數(shù)10-20
Linux系統(tǒng)字符設(shè)備驅(qū)動框架筆記09-12
Linux系統(tǒng)中怎么掛載外界設(shè)備06-14
Linux入門學習 GNOME介紹11-01
Linux環(huán)境下保護數(shù)據(jù)的方法和設(shè)備信息10-15
linux下卸載apache方法介紹09-12
Linux的主要特點及功能介紹08-12
linux磁盤清理方法介紹09-27