linux主linux下查看设备号号能大于255吗

Linux:主设备号和次设备号_Linux编程_Linux公社-Linux系统门户网站
你好,游客
Linux:主设备号和次设备号
来源:Linux社区&
作者:liangkaiming
&&& Linux的设备管理是和文件系统紧密结合的,各种设备都以文件的形式存放在/dev目录下,称为设备文件。应用程序可以打开、关闭和读写这些设备文件,完成对设备的操作,就像操作普通的数据文件一样。为了管理这些设备,系统为设备编了号,每个设备号又分为主设备号和次设备号。主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备。对于常用设备,Linux有约定俗成的编号,如硬盘的主设备号是3。
&&&& 一个字符设备或者块设备都有一个主设备号和次设备号。主设备号和次设备号统称为设备号。主设备号用来表示一个特定的驱动程序。次设备号用来表示使用该驱动程序的各设备。例如一个嵌入式系统,有两个LED指示灯,LED灯需要独立的打开或者关闭。那么,可以写一个LED灯的字符设备驱动程序,可以将其主设备号注册成5号设备,次设备号分别为1和2。这里,次设备号就分别表示两个LED灯。
&&&& 设备文件通常都在 /dev 目录下。如:
beyes@linux-beyes:~/C/kernel/memory& ll /dev |more总计 0crw-rw----& 1 root uucp&&& 4,& 70 04-14 18:16 ttyS6crw-rw----& 1 root uucp&&& 4,& 71 04-14 18:16 ttyS7crw-rw----& 1 root tty&&&&&&&& 7,&& 0 08-08 18:58 vcscrw-rw----& 1 root tty&&& & && 7,&& 1 08-08 18:58 vcs1crw-rw-rw-& 1 root root&&& 1,&& 7 08-08 18:58 fullcrw-rw-rw-& 1 root root&&& 1,&& 3 04-14 18:16 null
如上,前面第一个字符为c 的表示字符设备。在字符设备里,有主设备号和次设备号。如上1,4,7 分别是主设备号,0,1,3,7,70,71都是次设备号。一般的,主设备号标识出与设备关联的设备驱动。如 /dev/null 和 /dev/full 由 1 号驱动来管理,/dev/vcs 和/dev/vcs1由 7 号驱动来管理,/dev/ttyS6 由 4 号驱动来管理。
现在的 Linux 内核允许多个驱动共享一个主设备号,但更多的设备都遵循一个驱动对一个主设备号的原则。内核由次设备号确定当前所指向的是哪个设备。根据所编写的驱动程序,可以从内核那里得到一个直接指向设备的指针,或者使用次设备号作为一个设备本地数组的索引。但不论如何,内核自身几乎不知道次设备号的什么事情。设备号的内部表示
在内核中,dev_t& 类型( 在 &linux/types.h& 头文件有定义 ) 用来表示设备号,包括主设备号和次设备号两部分。对于 2.6.x 内核,dev_t 是个 32 位量,其中 12 位用来表示主设备号,20 位用来表示次设备号。在 linux/types.h 头文件里定义有
typedef __kernel_dev_t&&&&&&&&& dev_t;
typedef __u32 __kernel_dev_t;
主设备号和次设备号的获取
为了写出可移植的驱动程序,不能假定主设备号和次设备号的位数。不同的机型中,主设备号和次设备号的位数可能是不同的。应该使用MAJOR宏得到主设备号,使用MINOR宏来得到次设备号。下面是两个宏的定义:(linux/kdev_t.h)
#define&MINORBITS&&&20&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&/*次设备号*/&&
#define&MINORMASK&&&((1U&&)&-&1)&&&&&&&&&&&&&/*次设备号掩码*/&&
#define&MAJOR(dev)&&((unsigned&int)&((dev)&&MINORBITS))&&&/*dev右移20位得到主设备号*/&&
#define&MINOR(dev)&&((unsigned&int)&((dev)&&&MINORMASK))&&&/*与次设备掩码与,得到次设备号*/&
MAJOR宏将dev_t向右移动20位,得到主设备号;MINOR宏将dev_t的高12位清零,得到次设备号。相反,可以将主设备号和次设备号转换为设备号类型(dev_t),使用宏MKDEV可以完成这个功能。
#define&MKDEV(ma,mi)&(((ma)&&)&|&(mi))
MKDEV宏将主设备号(ma)左移20位,然后与次设备号(mi)相与,得到设备号
静态分配设备号
静态分配设备号,就是驱动程序开发者,静态地指定一个设备号。对于一部分常用的设备,内核开发者已经为其分配了设备号。这些设备号可以在内核源码documentation/ devices.txt文件中找到。如果只有开发者自己使用这些设备驱动程序,那么其可以选择一个尚未使用的设备号。在不添加新硬件的时候,这种方式不会产生设备号冲突。但是当添加新硬件时,则很可能造成设备号冲突,影响设备的使用。
动态分配设备号
由于静态分配设备号存在冲突的问题,所以内核社区建议开发者使用动态分配设备号的方法。动态分配设备号的函数是alloc_chrdev_region()。
相关资讯 & & &
& (07/28/:23)
& (11/03/:38)
& (06/06/:40)
& (01/28/:00)
& (10/07/:52)
& (05/15/:55)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款Linux:主设备号和次设备号
第2页_Linux编程_Linux公社-Linux系统门户网站
你好,游客
Linux:主设备号和次设备号
来源:Linux社区&
作者:liangkaiming
查看设备号
当静态分配设备号时,需要查看系统中已经存在的设备号,从而决定使用哪个新设备号。可以读取/proc/devices文件获得设备的设备号。/proc/devices文件包含字符设备和块设备的设备号,如下所示:
[root@tom&/]#&cat&/proc/devices&/*cat命令查看/proc/devices文件的内容*/ &
Character&devices:&&&&&&&&&&&&&&&&&&/*字符设备*/ &
&& 1&mem &
& &4&/dev/vc/0 &
& &7&vcs &
& &13&input &
& &14&sound &
& &21&sg &
Block&devices:&&&&&&&&&&&&&&&&&&&&&&/*块设备*/ &
& &1&ramdisk &
&&&253&device-mapper &
& &254&mdp&
申请和释放设备号
内核维护着一个特殊的数据结构,用来存放设备号与设备的关系。在安装设备时,应该给设备申请一个设备号,使系统可以明确设备对应的设备号。设备驱动程序中的很多功能,是通过设备号来操作设备的。下面,首先对申请设备号进行简述。
1.申请设备号
在构建字符设备之前,首先要向系统申请一个或者多个设备号。完成该工作的函数是register_chrdev_region(),该函数在&linux/fs.h&中定义:
int&register_chrdev_region(dev_t&from,&unsigned&count,&const&char&*name);
其中,from是要分配的设备号范围的起始值。一般只提供from的主设备号,from的次设备号通常被设置成0。count是需要申请的连续设备号的个数。最后name是和该范围编号关联的设备名称,该名称不能超过64字节。
和大多数内核函数一样,register_chrdev_region()函数成功时返回0。错误时,返回一个负的错误码,并且不能为字符设备分配设备号。&
&&&& 在Linux中有非常多的字符设备,在人为的为字符设备分配设备号时,很可能发生冲突。Linux内核开发者一直在努力将设备号变为动态的。可以使用alloc_chrdev_region()函数达到这个目的。(linux/fs.h)
int&alloc_chrdev_region(dev_t&*dev,&unsigned&baseminor,&unsigned&count,&const&char&*name)
在上面的函数中,dev作为输出参数,在函数成功返回后将保存已经分配的设备号。函数有可能申请一段连续的设备号,这是dev返回第一个设备号。baseminor表示要申请的第一个次设备号,其通常设为0。count和name与register_chrdev_region()函数的对应参数一样。count表示要申请的连续设备号个数,name表示设备的名字。
2.释放设备号
使用上面两种方式申请的设备号,都应该在不使用设备时,释放设备号。设备号的释放统一使用下面的函数:
void&unregister_chrdev_region(dev_t&from,&unsigned&count);&&
在上面这个函数中,from表示要释放的设备号,count表示从from开始要释放的设备号个数。通常,在模块的卸载函数中调用unregister_chrdev_region()函数。
次设备号的主要用途
1、区分设备驱动程序控制的实际设备;2、区分不同用途的设备 (misc 系列设备)3、区分块设备的分区 (partition)通常,为了使应用程序区分所控制设备的类型,内核使用主设备号。而存在多台同类设备时,为了选择其中的一种,设备驱动程序就使用次设备号。
区分块设备的分区
块设备具有被称为分区的分配领域。例如,硬盘在物理上是一个设备,从内核的角度,硬盘被分为多个分区,而以这些分区为对象则形成了文件系统,此时,次设备号既表示设备,也表示分区。
brw-rw----& 1 root disk&&& 8,& 16
sdbbrw-rw----& 1 root disk&&& 8,& 17
sdb1brw-rw----& 1 root disk&&& 8,& 18
sdb2brw-rw----& 1 root disk&&& 8,& 21
sdb5brw-rw----& 1 root disk&&& 8,& 22
sdb6brw-rw----& 1 root disk&&& 8,& 23
sdb7brw-rw----& 1 root disk&&& 8,& 24
相关资讯 & & &
& (07/28/:23)
& (11/03/:38)
& (06/06/:40)
& (01/28/:00)
& (10/07/:52)
& (05/15/:55)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款1529人阅读
linux 相关(186)
/Category/Learning/linux-major-minor-dev-number.html
1、主设备号与次设备号的功能
在Linux内核中,主设备号标识设备对应的驱动程序,告诉Linux内核使用哪一个驱动程序为该设备(也就是/dev下的设备文件)服务;而次设备号则用来标识具体且唯一的某个设备。
比如说在linux的终端打入命令:
crw-rw----& 1 root&& root&&&&&&4,&&&0&
06:50 tty0&
crw-------& 1 root&& root&&&&&&4,&&&1&
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_
其中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&中定义:
struct&miscdevice
&&&&&int&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&const&char&*&&&&&&&&&&&&
&&&&&&struct&file_operations&*&&&&&&
&&&&&struct&&&miscdevice&&*next,&&*&&&&&&&
&&&&&&devfs_handle_t&devfs_&&&&&&&&&&
&开发人员必须定义的filed包括:minor ,name 及fops如下:
static&struct&miscdevice&mymisc_dev&=&{
.minor&=&MISC_DYNAMIC_MINOR, &&
.name&=&&mymisc&,
.fops&=&&mymisc_fops, &&
&可以通过#cat /proc/misc来查看misc设备的注册情况。
misc设备主要针对没有多个同类设备的驱动程序
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:813342次
积分:10756
积分:10756
排名:第1608名
原创:62篇
转载:806篇
评论:33条
(1)(1)(4)(1)(4)(1)(1)(10)(1)(1)(4)(2)(3)(5)(16)(16)(11)(38)(12)(21)(18)(7)(18)(6)(8)(2)(4)(10)(4)(9)(11)(4)(8)(7)(55)(51)(23)(69)(49)(74)(42)(59)(51)(23)(40)(3)(3)(2)(12)(7)(36)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'如何获取主设备号和次设备号?求解【linux吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:179,906贴子:
如何获取主设备号和次设备号?求解收藏
电脑有两个U口,在Ubuntu系统中插两个U盘,发现在/dev/block下主次设备号分别8:18和8:34,想问下,这个主次设备号都是怎么获取的?有什么规律么?目前在修改Android对NTFS的支持上迫切需要获得这两个参数。知道的告知下,不知道的帮顶呗 O(∩_∩)O~
linux培训选择达内,资深10年linux讲师悉心传授,linux项目实战+设备实操+名企内推.达内linux云计算培训将网络工程与linux运维相结合专门培养高端linux复合型人才.
主设备号不可更改,次设备号可变。你是问什么问题?
回复:2楼那电脑上有两个U口的话,主设备号会相同么?
bash$ man 2 stat一般主/次设备号是通过stat()函数的参数stat结构获取的。当然, 需要宏major()、minor()对文件的stat结构进行"处理"一下。&APUE&吧。
登录百度帐号推荐应用一个字符设备或者块设备都有一个主设备号和次设备号。主设备号和次设备号统称为设
备号。主设备号用来表示一个特定的驱动程序。次设备号用来表示使用该驱动程序的各
设备。例如一个嵌入式系统,有两个LED指示灯,LED灯需要独立的打开或者关闭。那么
,可以写一个LED灯的字符设备驱动程序,可以将其主设备号注册成5号设备,次设备号
分别为1和2。这里,次设备号就分别表示两个LED灯。
1.主设备号和次设备号的表示
在Linux内核中,dev_t类型用来表示设备号。在Linux 2.6.29.4中,dev_t定义为一个
无符号长整型变量,如下:typedef u_long dev_t;
u_long在32位机中是4个字节,在64位机中是8字节。以32位机为例,其中高12表示主设备号,低20为表示次设备号,如图6.1所示。
2.主设备号和次设备号的获取
为了写出可移植的驱动程序,不能假定主设备号和次设备号的位数。不同的机型中,主
设备号和次设备号的位数可能是不同的。应该使用MAJOR宏得到主设备号,使用MINOR宏来得到次设备号。下面是两个宏的定义:
#define MINORBITS& &20& && && && && && && && && && && & /*次设备号位数*/
#define MINORMASK& &((1U && MINORBITS) - 1)& && && && & /*次设备号掩码*/
#define MAJOR(dev)&&((unsigned int) ((dev) && MINORBITS))
/*dev右移20位得到主设备号*/&
#define MINOR(dev)((unsigned int) ((dev) & MINORMASK))
& &/*与次设备掩码与,得到次设备号*/
MAJOR宏将dev_t向右移动20位,得到主设备号;MINOR宏将dev_t的高12位清零,得到次
设备号。相反,可以将主设备号和次设备号转换为设备号类型(dev_t),使用宏
MKDEV可以完成这个功能。#define MKDEV(ma,mi) (((ma) && MINORBITS) | (mi))&&
MKDEV宏将主设备号(ma)左移20位,然后与次设备号(mi)相与,得到设备号。
3.静态分配设备号
静态分配设备号,就是驱动程序开发者,静态地指定一个设备号。对于一部分常用的设
备,内核开发者已经为其分配了设备号。这些设备号可以在内核源码documentation/
devices.txt文件中找到。如果只有开发者自己使用这些设备驱动程序,那么其可以选
择一个尚未使用的设备号。在不添加新硬件的时候,这种方式不会产生设备号冲突。但
是当添加新硬件时,则很可能造成设备号冲突,影响设备的使用。
4.动态分配设备号
由于静态分配设备号存在冲突的问题,所以内核社区建议开发者使用动态分配设备号的
方法。动态分配设备号的函数是alloc_chrdev_region()。
5.查看设备号
当静态分配设备号时,需要查看系统中已经存在的设备号,从而决定使用哪个新设备号
。可以读取/proc/devices文件获得设备的设备号。/proc/devices文件包含字符设备和
块设备的设备号,如下所示。[root@tom /]# cat /proc/devices /*cat命令查看
/proc/devices文件的内容*/&&Character devices:& && && && && && &/*字符设备*/
1 mem& & 4 /dev/vc/0& & 7 vcs& & 13 input& & 14 sound& & 21 sg&&Block
devices:&&/*块设备*/& & 1 ramdisk& & 2 fd& & 8 sd& & 253&&device-mapper& & 254 mdp&& 
3. 6.1.3 申请和释放设备号
 内核维护着一个特殊的数据结构,用来存放设备号与设备的关系。在安装设备时,应该
给设备申请一个设备号,使系统可以明确设备对应的设备号。设备驱动程序中的很多功
能,是通过设备号来操作设备的。下面,首先对申请设备号进行简述。
1.申请设备号
在构建字符设备之前,首先要向系统申请一个或者多个设备号。完成该工作的函数是
register_chrdev_region(),该函数在&fs/char_dev.c&中定义:
int register_chrdev_region(dev_t from, unsigned count, const char *name);
其中,from是要分配的设备号范围的起始值。一般只提供from的主设备号,from的次设
备号通常被设置成0。count是需要申请的连续设备号的个数。最后name是和该范围编号
关联的设备名称,该名称不能超过64字节。
和大多数内核函数一样,register_chrdev_region()函数成功时返回0。错误时,返回
一个负的错误码,并且不能为字符设备分配设备号。下面是一个例子代码,其申请了
CS5535_GPIO_COUNT个设备号。retval = register_chrdev_region(dev_id,
CS5535_GPIO_COUNT,NAME);
在Linux中有非常多的字符设备,在人为的为字符设备分配设备号时,很可能发生冲突
。Linux内核开发者一直在努力将设备号变为动态的。可以使用
alloc_chrdev_region()函数达到这个目的。
int alloc_chrdev_region(dev_t *dev, unsigned baseminor,unsigned count, const char *name)
在上面的函数中,dev作为输出参数,在函数成功返回后将保存已经分配的设备号。函
数有可能申请一段连续的设备号,这是dev返回第一个设备号。baseminor表示要申请的
第一个次设备号,其通常设为0。count和name与register_chrdev_region()函数的对应
参数一样。count表示要申请的连续设备号个数,name表示设备的名字。下面是一个例
子代码,其申请了CS5535_GPIO_COUNT个设备号。retval =
alloc_chrdev_region(&dev_id, 0, CS5535_GPIO_COUNT, NAME);
2.释放设备号
使用上面两种方式申请的设备号,都应该在不使用设备时,释放设备号。设备号的释放
统一使用下面的函数:void unregister_chrdev_region(dev_t from, unsignedcount);
在上面这个函数中,from表示要释放的设备号,count表示从from开始要释放的设备号
个数。通常,在模块的卸载函数中调用unregister_chrdev_region()函数。
/Category/Learning/-major-minor-dev-number.html
1、主设备号与次设备号的功能
在Linux内核中,主设备号标识设备对应的驱动程序,告诉Linux内核使用哪一个驱动程序为该设备(也就是/dev下的设备文件)服务;而次设备号则用来标识具体且唯一的某个设备。
比如说在linux的终端打入命令:
crw-rw----& 1 root&& root&&&&&&4,&&&0&
06:50 tty0&
crw-------& 1 root&& root&&&&&&4,&&&1&
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_
其中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&中定义:
struct&miscdevice
&&&&&int&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&const&char&*&&&&&&&&&&
&&&&&&struct&file_operations&*&&&&
&&&&&struct&&&miscdevice&&*next,&&*&&&&&
&&&&&&devfs_handle_t&devfs_&&&&&&&&
&开发人员必须定义的filed包括:minor ,name 及fops如下:
static&struct&miscdevice&mymisc_dev&=&{
.minor&=&MISC_DYNAMIC_MINOR, &&
.name&=&"mymisc",
.fops&=&&mymisc_fops, &&
&可以通过#cat /proc/misc来查看misc设备的注册情况。
misc设备主要针对没有多个同类设备的驱动程序
中的设备有2种类型:字符设备(无缓冲且只能顺序存取)、块设备(有缓冲且可以随机存取)。每个字符设备和块设备都必须有主、次设备号,主设备号相同的设 备是同类设备(使用同一个驱动程序)。这些设备中,有些设备是对实际存在的物理硬件的抽象,而有些设备则是内核自身提供的功能(不依赖于特定的物理硬件,又称为"虚拟设备")。每个设备在 /dev 目录下都有一个对应的文件(节点)。可以通过 cat /proc/devices 命令查看当前已经加载的设备驱动程序的主设备号。内核能够识别的所有设备都记录在原码树下的 documentation/devices.txt 文件中。在 /dev 目录下除了字符设备和块设备节点之外还通常还会存在:fifo管道、socket、软/硬连接、目录。这些东西没有主/次设备号。
$ ls -l /dev/rfd0 /dev/fd0
brw-r----- &9 root operator 2, 0 nov 12 13:32 /dev/fd0
crw-r----- &9 root operator 9, 0 nov 12 13:32 /dev/rfd0
& & 可以看到原来显示文件大小的地方,现在改为显示两个用逗号分隔的数字。这是系统用来表示设备的两个重要的序号,第一个为主设备号(major number),用来表示设备使用的硬件驱动程序在系统中的序号;第二个为从设备号(minor number)。
linux内核所能识别的所有 设备都记录在
http://www.lanana.org/docs/device-list/
而内核原码树中的 documentation/devices.txt 可能不是最新版本。
了解这些设备的最基本要求就是对 每个设备文件的含义了如指掌,下面就医列表的形式列出常见的设备文件以及相应的含义(比较偏僻的就省略了):
代 码:----------------------------------------------------------------------
主 设备号 & & & &设备类型
& & & & & & & &次设备号=文件名 & & & & &简要说明
----------------------------------------------------------------------
&0 & & & & & & & &未命名设备(例如:挂载的非设备)
& & & & & & & & &0 = 未空设备号保留
&1 char & & & &内存设备
& & & & & & & & &1 = /dev/mem & & & & & & & &直接存取物理内存
& & & & & & & & &2 = /dev/kmem & & & & & & & &存取经过内核虚拟之后的内存
& & & & & & & & &3 = /dev/null & & & & & & & &空设备。任何写入都将被直接丢弃,任何读取都将得到eof。
& & & & & & & & &4 = /dev/port & & & & & & & &存取 i/o 端口
& & & & & & & & &5 = /dev/zero & & & & & & & &零字节源,只能读取到无限多的零字节。
& & & & & & & & &7 = /dev/full & & & & & & & &满设备。任何写入都将失败,并把errno设为enospc以表示没有剩余空间。
& & & & & & & & &8 = /dev/random & & & &随机数发生器。完全由用户的输入来产生随机数。
& & & & & & & & & & & & & & & & & & & &如果用户停止所有动作,则停止产生新的随机数。
& & & & & & & & &9 = /dev/urandom & & & &更快,但是不够安全的随机数发生器。尽可能由用户的输入来产生随机数,
& & & & & & & & & & & & & & & & & & & &如果用户停止所有动作,则把已经产生的随机数做为种子来产生新的随机数。
& & & & & & & & 10 = /dev/aio & & & & & & & &异步 i/o 通知接口
& & & & & & & & 11 = /dev/kmsg & & & & & & & &任何对该文件的写入都将作为 printk 的输出
&1 block & & & &ram disk
& & & & & & & & &0 = /dev/ram0 & & & & & & & &第1个 ram disk (initrd只能使用ram0)
& & & & & & & & &1 = /dev/ram1 & & & & & & & &第2个 ram disk
& & & & & & & & & &...
& & & & & & & &200 = /dev/ram200 & & & &第200个 ram disk
&4 char & & & &tty(终端)设备
& & & & & & & & &0 = /dev/tty0 & & & & & & & &当前虚拟控制台
& & & & & & & & &1 = /dev/tty1 & & & & & & & &第1个虚拟控制台
& & & & & & & & & &...
& & & & & & & & 63 = /dev/tty63 & & & &第63个虚拟控制台
&4 block & & & &如果根文件系统以是以只读方式挂载的,那么就不可能创建真正的设备节点,
& & & & & & & &此时就使用该设备作为动态分配的主(major)设备的别名
& & & & & & & & &0 = /dev/root
&5 char & & & &其他 tty 设备
& & & & & & & & &0 = /dev/tty & & & & & & & &当前 tty 设备
& & & & & & & & &1 = /dev/console & & & &系统控制台
& & & & & & & & &2 = /dev/ptmx & & & & & & & &所有 pty master 的复用器
&7 char & & & &虚拟控制台捕捉设备(这些设备既允许读也允许写)
& & & & & & & & &0 = /dev/vcs & & & & & & & &当前虚拟控制台(vc)的文本内容
& & & & & & & & &1 = /dev/vcs1 & & & & & & & &tty1 的文本内容
& & & & & & & & & &...
& & & & & & & & 63 = /dev/vcs63 & & & &tty63 的文本内容
& & & & & & & &128 = /dev/vcsa & & & & & & & &当前虚拟控制台(vc)的文本/属性内容
& & & & & & & &129 = /dev/vcsa1 & & & &tty1 的文本/属性内容
& & & & & & & & & &...
& & & & & & & &191 = /dev/vcsa63 & & & &tty63 的文本/属性内容
代码: &7 block & & & &回环设备(用一个普通的磁盘文件来模拟一个块设备)
& & & & & & & &对回环设备的绑定由 mount(8) 或 losetup(8) 处理
& & & & & & & & &0 = /dev/loop0 & & & &第1个回环设备
& & & & & & & & &1 = /dev/loop1 & & & &第2个回环设备
& & & & & & & & & &...
&8 block & & & &scsi 磁盘(0-15)
& & & & & & & & &0 = /dev/sda & & & & & & & &第1个 scsi 磁盘(整个磁盘)
& & & & & & & & 16 = /dev/sdb & & & & & & & &第2个 scsi 磁盘(整个磁盘)
& & & & & & & & 32 = /dev/sdc & & & & & & & &第3个 scsi 磁盘(整个磁盘)
& & & & & & & & & &...
& & & & & & & &240 = /dev/sdp & & & & & & & &第16个 scsi 磁盘(整个磁盘)
& & & & & & & &分区表示方法如下(以第3个 scsi 磁盘为例)
& & & & & & & & 33 = /dev/sdc1 & & & & & & & &第1个分区
& & & & & & & & 34 = /dev/sdc2 & & & & & & & &第2个分区
& & & & & & & & & &...
& & & & & & & & 47 = /dev/sdc15 & & & &第15个分区
& & & & & & & &对于linux/i386来说,分区1-4是主分区,5-15是逻辑分区。
&9 block & & & &metadisk(raid)设备
& & & & & & & & &0 = /dev/md0 & & & & & & & &第1组 metadisk
& & & & & & & & &1 = /dev/md1 & & & & & & & &第2组 metadisk
& & & & & & & & & &...
& & & & & & & &metadisk 驱动用于将同一个文件系统分割到多个物理磁盘上。
10 char & & & &非串口鼠标,各种杂项设备和特性
& & & & & & & & &1 = /dev/psaux & & & &ps/2鼠标
& & & & & & & &131 = /dev/temperature & & & &机器内部温度
& & & & & & & &134 = /dev/apm_bios & & & &apm(高级电源管理) bios
& & & & & & & &135 = /dev/rtc & & & & & & & &实时时钟(real time clock)
& & & & & & & &144 = /dev/nvram & & & &非易失配置 ram
& & & & & & & &162 = /dev/smbus & & & &系统管理总线(system management bus)
& & & & & & & &164 = /dev/ipmo & & & & & & & &intel的智能平台管理(intelligent platform management)接口
& & & & & & & &173 = /dev/ipmikcs & & & &智能平台管理(intelligent platform management)接口
& & & & & & & &175 = /dev/agpgart & & & &agp图形地址重映射表(graphics address remapping table)
& & & & & & & &182 = /dev/perfctr & & & &性能监视计数器
& & & & & & & &183 = /dev/hwrng & & & &通用硬件随机数发生器
& & & & & & & &184 = /dev/cpu/microcode cpu微代码更新接口
& & & & & & & &186 = /dev/atomicps & & & &进程状态数据的原子快照
& & & & & & & &188 = /dev/smbusbios & & & &smbus(系统管理总线) bios
& & & & & & & &200 = /dev/net/tun & & & &tap/tun 网络设备(tap/tun以软件的方式实现了网络设备)
& & & & & & & & & & & & & & & & & & & &tap模拟了以太网帧(第二层),tun模拟了ip包(第三层)。
& & & & & & & &202 = /dev/emd/ctl & & & &增强型 metadisk raid (emd) 控制器
& & & & & & & &220 = /dev/mptctl & & & &message passing technology (mpt) control
& & & & & & & &223 = /dev/input/uinput & & & &用户层输入设备驱动支持
& & & & & & & &227 = /dev/mcelog & & & &x86_64 machine check exception driver
& & & & & & & &228 = /dev/hpet & & & & & & & &hpet driver
& & & & & & & &229 = /dev/fuse & & & & & & & &fuse(用户空间的虚拟文件系统)
& & & & & & & &231 = /dev/snapshot & & & &系统内存快照
& & & & & & & &232 = /dev/kvm & & & & & & & &基于内核的虚构机(基于amd svm和intel vt硬件虚拟技术)
11 block & & & &scsi cd-rom 设备
& & & & & & & & &0 = /dev/scd0 & & & & & & & &第1个 scsi cd-rom
& & & & & & & & &1 = /dev/scd1 & & & & & & & &第2个 scsi cd-rom
& & & & & & & & & &...
13 char & & & &核心输入设备
& & & & & & & & 32 = /dev/input/mouse0 & & & & & & & &第1个鼠标
& & & & & & & & 33 = /dev/input/mouse1 & & & & & & & &第2个鼠标
& & & & & & & & & &...
& & & & & & & & 62 = /dev/input/mouse30 & & & &第31个鼠标
& & & & & & & & 63 = /dev/input/mice & & & & & & & &所有鼠标的统一
& & & & & & & & 64 = /dev/input/event0 & & & & & & & &第1个事件队列
& & & & & & & & 65 = /dev/input/event1 & & & & & & & &第2个事件队列
& & & & & & & & & &...
& & & & & & & & 95 = /dev/input/event1 & & & & & & & &第32个事件队列
21 char & & & &通用 scsi 设备(通常是scsi光驱)
& & & & & & & & &0 = /dev/sg0 & & & & & & & &第1个通用 scsi 设备
& & & & & & & & &1 = /dev/sg1 & & & & & & & &第2个通用 scsi 设备
& & & & & & & & & &...
29 char & & & &通用帧缓冲(frame buffer)设备
& & & & & & & & &0 = /dev/fb0 & & & & & & & &第1个帧缓冲设备
& & & & & & & & &1 = /dev/fb1 & & & & & & & &第2个帧缓冲设备
& & & & & & & & & &...
& & & & & & & & 31 = /dev/fb31 & & & & & & & &第32个帧缓冲设备
30 char & & & &ibcs-2 兼容设备
& & & & & & & & &0 = /dev/socksys & & & &套接字访问接口
& & & & & & & & &1 = /dev/spx & & & & & & & &svr3 本地 x 接口
& & & & & & & & 32 = /dev/inet/ip & & & &网络访问接口
& & & & & & & & 33 = /dev/inet/icmp
& & & & & & & & 34 = /dev/inet/ggp
& & & & & & & & 35 = /dev/inet/ipip
& & & & & & & & 36 = /dev/inet/tcp
& & & & & & & & 37 = /dev/inet/egp
& & & & & & & & 38 = /dev/inet/pup
& & & & & & & & 39 = /dev/inet/udp
& & & & & & & & 40 = /dev/inet/idp
& & & & & & & & 41 = /dev/inet/rawip
& & & & & & & &此外,ibcs-2 还需要下面的连接必须存在
& & & & & & & &/dev/ip -& /dev/inet/ip
& & & & & & & &/dev/icmp -& /dev/inet/icmp
& & & & & & & &/dev/ggp -& /dev/inet/ggp
& & & & & & & &/dev/ipip -& /dev/inet/ipip
& & & & & & & &/dev/tcp -& /dev/inet/tcp
& & & & & & & &/dev/egp -& /dev/inet/egp
& & & & & & & &/dev/pup -& /dev/inet/pup
& & & & & & & &/dev/udp -& /dev/inet/udp
& & & & & & & &/dev/idp -& /dev/inet/idp
& & & & & & & &/dev/rawip -& /dev/inet/rawip
& & & & & & & &/dev/inet/arp -& /dev/inet/udp
& & & & & & & &/dev/inet/rip -& /dev/inet/udp
& & & & & & & &/dev/nfsd -& /dev/socksys
& & & & & & & &/dev/x0r -& /dev/null
代码: 36 char & & & &netlink 支持
& & & & & & & & &0 = /dev/route & & & &路由, 设备更新, kernel to user
& & & & & & & & &3 = /dev/fwmonitor & & & &firewall packet 复制
59 char & & & &sf 防火墙模块
& & & & & & & & &0 = /dev/firewall & & & &与 sf 内核模块通信
65 block & & & &scsi 磁盘(16-31)
& & & & & & & & &0 = /dev/sdq & & & & & & & &第17个 scsi 磁盘(整个磁盘)
& & & & & & & & 16 = /dev/sdr & & & & & & & &第18个 scsi 磁盘(整个磁盘)
& & & & & & & & 32 = /dev/sds & & & & & & & &第19个 scsi 磁盘(整个磁盘)
& & & & & & & & & &...
& & & & & & & &240 = /dev/sdaf & & & & & & & &第32个 scsi 磁盘(整个磁盘)
66 block & & & &scsi 磁盘(32-47)
& & & & & & & & &0 = /dev/sdag & & & & & & & &第33个 scsi 磁盘(整个磁盘)
& & & & & & & & 16 = /dev/sdah & & & & & & & &第34个 scsi 磁盘(整个磁盘)
& & & & & & & & 32 = /dev/sdai & & & & & & & &第35个 scsi 磁盘(整个磁盘)
& & & & & & & & & &...
& & & & & & & &240 = /dev/sdav & & & & & & & &第48个 scsi 磁盘(整个磁盘)
89 char & & & &i2c 总线接口
& & & & & & & & &0 = /dev/i2c-0 & & & &第1个 i2c 适配器
& & & & & & & & &1 = /dev/i2c-1 & & & &第2个 i2c 适配器
& & & & & & & & & &...
98 block & & & &用户模式下的虚拟块设备(分区处理方式与 scsi 磁盘相同)
& & & & & & & & &0 = /dev/ubda & & & & & & & &第1个用户模式块设备
& & & & & & & & 16 = /dev/udbb & & & & & & & &第2个用户模式块设备
& & & & & & & & & &...
103 block & & & &审计(audit)设备
& & & & & & & & &0 = /dev/audit & & & &审计(audit)设备
128-135 char & & & &unix98 pty master
& & & & & & & &这些设备不应当存在设备节点,而应当通过 /dev/ptmx 接口访问。
136-143 char & & & &unix98 pty slave
& & & & & & & &这些设备节点是自动生成的(伴有适当的权限和模式),不能手动创建。
& & & & & & & &方法是通过使用适当的 mount 选项(通常是:mode=0620,gid=)
& & & & & & & &将 devpts 文件系统挂载到 /dev/pts 目录即可。
& & & & & & & & &0 = /dev/pts/0 & & & &第1个 unix98 pty slave
& & & & & & & & &1 = /dev/pts/1 & & & &第2个 unix98 pty slave
& & & & & & & & & &...
代码:153 block & & & &enhanced metadisk raid (emd) 存储单元(分区处理方式与 scsi 磁盘相同)
& & & & & & & & &0 = /dev/emd/0 & & & &第1个存储单元
& & & & & & & & &1 = /dev/emd/0p1 & & & &第1个存储单元的第1个分区
& & & & & & & & &2 = /dev/emd/0p2 & & & &第1个存储单元的第2个分区
& & & & & & & & & &...
& & & & & & & & 15 = /dev/emd/0p15 & & & &第1个存储单元的第15个分区
& & & & & & & & 16 = /dev/emd/1 & & & &第2个存储单元
& & & & & & & & 32 = /dev/emd/2 & & & &第3个存储单元
& & & & & & & & & &...
& & & & & & & &240 = /dev/emd/15 & & & &第16个存储单元
180 char & & & &usb 字符设备
& & & & & & & & 96 = /dev/usb/hiddev0 & & & &第1个usb人机界面设备(鼠标/键盘/游戏杆/手写版等人操作计算机的设备)
& & & & & & & & & &...
& & & & & & & &111 = /dev/usb/hiddev15 & & & &第16个usb人机界面设备
180 block & & & &usb 块设备(u盘之类)
& & & & & & & & &0 = /dev/uba & & & & & & & &第1个usb 块设备
& & & & & & & & &8 = /dev/ubb & & & & & & & &第2个usb 块设备
& & & & & & & & 16 = /dev/ubc & & & & & & & &第3个usb 块设备
& & & & & & & & & & ...
192 char & & & &内核 profiling 接口
& & & & & & & & &0 = /dev/profile & & & &profiling 控制设备
& & & & & & & & &1 = /dev/profile0 & & & &cpu 0 的 profiling 设备
& & & & & & & & &2 = /dev/profile1 & & & &cpu 1 的 profiling 设备
& & & & & & & & & &...
193 char & & & &内核事件跟踪接口
& & & & & & & & &0 = /dev/trace & & & &跟踪控制设备
& & & & & & & & &1 = /dev/trace0 & & & &cpu 0 的跟踪设备
& & & & & & & & &2 = /dev/trace1 & & & &cpu 1 的跟踪设备
& & & & & & & & & &...
195 char & & & &nvidia 图形设备(比如显卡)
& & & & & & & & &0 = /dev/nvidia0 & & & & & & & &第1个 nvidia 卡
& & & & & & & & &1 = /dev/nvidia1 & & & & & & & &第2个 nvidia 卡
& & & & & & & & & &...
& & & & & & & &255 = /dev/nvidiactl & & & & & & & &nvidia 卡控制设备
202 char & & & &特定于cpu模式的寄存器(model-specific register,msr)
& & & & & & & & &0 = /dev/cpu/0/msr & & & & & & & &cpu 0 的 msrs
& & & & & & & & &1 = /dev/cpu/1/msr & & & & & & & &cpu 1 的 msrs
& & & & & & & & & &...
203 char & & & &cpu cpuid 信息
& & & & & & & & &0 = /dev/cpu/0/cpuid & & & & & & & &cpu 0 的 cpuid
& & & & & & & & &1 = /dev/cpu/1/cpuid & & & & & & & &cpu 1 的 cpuid
& & & & & & & & & &...
代 码:===================================================================
这 部分详细说明一些应该或可能存在于 /dev 目录之外的文件。
链接最好使用与这里完全相同的格式(绝对路径或相对路径)。
究竟是使用硬 链接(hard)还是软连接(symbolic)取决于不同的设备。
& & & &必须的链接
必须在所有的系统上都存在这些连接:
链 接 & & & & & & & &目标 & & & & & & & &链接类型 & & & &简要说明
/dev/fd & & & & & & & &/proc/self/fd & & & &symbolic & & & &文件描述府
/dev/stdin & & & &fd/0 & & & & & & & &symbolic & & & &标准输入文件描述府
/dev/stdout & & & &fd/1 & & & & & & & &symbolic & & & &标准输出文件描述符
/dev/stderr & & & &fd/2 & & & & & & & &symbolic & & & &标准错误文件描述符
/dev/nfsd & & & &socksys & & & & & & & &symbolic & & & &仅为 ibcs-2 所必须
/dev/x0r & & & &null & & & & & & & &symbolic & & & &仅为 ibcs-2 所必须
[注意] /dev/x0r 是 --
& & & &推荐的链接
推荐在所有的系统上都存在这些连接:
链接 & & & & & & & &目标 & & & & & & & &链接类型 & & & &简要说明
/dev/core & & & &/proc/kcore & & & &symbolic & & & &为了向后兼容
/dev/ramdisk & & & &ram0 & & & & & & & &symbolic & & & &为了向后兼容
/dev/ftape & & & &qft0 & & & & & & & &symbolic & & & &为了向后兼容
/dev/bttv0 & & & &video0 & & & & & & & &symbolic & & & &为了向后兼容
/dev/radio & & & &radio0 & & & & & & & &symbolic & & & &为了向后兼容
/dev/i2o* & & & &/dev/i2o/* & & & &symbolic & & & &为了向后兼容
/dev/scd? & & & &sr? & & & & & & & &hard & & & & & & & &代替 scsi cd-rom 的名字
& & & &本地定义的链接
下面的 链接很可能需要根据机器的实际硬件配置创建其中的一部分甚至全部。
这些链接仅仅是为了迎合习惯用法,它们既非必须也非推荐。
链接 & & & & & & & &目标 & & & & & & & &链接类型 & & & &简要说明
/dev/mouse & & & &mouse port & & & &symbolic & & & &当前鼠标
/dev/tape & & & &tape device & & & &symbolic & & & &当前磁带
/dev/cdrom & & & &cd-rom device & & & &symbolic & & & &当前cd-rom
/dev/cdwriter & & & &cd-writer & & & &symbolic & & & &当前cd-writer
/dev/scanner & & & &scanner & & & & & & & &symbolic & & & &当前扫描仪
/dev/modem & & & &modem port & & & &symbolic & & & &当前调制解调器
/dev/root & & & &root device & & & &symbolic & & & &当前根文件系统所在设备
/dev/swap & & & &swap device & & & &symbolic & & & &当前swap所在设备
/dev/modem 不应当用于能够同时支持呼入和呼出的modem,因为往往会导致锁文件问题。
如果存在 /dev/modem ,那么它应当指向一个恰当的主 tty 设备。
对于scsi设备,
/dev/tape 和 /dev/cdrom 应该分别指向"cooked"设备 /dev/st* 和 /dev/sr* ;
而 /dev/cdwriter 和 /dev/scanner 应当分别指向恰当的 /dev/sg* 。
/dev/mouse 可以指向一个主串行 tty 设备、一个硬件鼠标、
或 者一个对应鼠标驱动程序的套接字(例如 /dev/gpmdata)。
& & & &套接字和管道
持久套接字和命名管道可以存在于 /dev 中。常见的有:
/dev/printer & & & &socket & & & & & & & &lpd 本地套接字
/dev/log & & & &socket & & & & & & & &syslog 本地套接字
/dev/gpmdata & & & &socket & & & & & & & &gpm 鼠标多路复用器(multiplexer)
/dev/gpmctl & & & &socket & & & & & & & &(lfs-livecd中出现)
/dev/initctl & & & &fifo pipe & & & &init 监听它并从中获取信息(用户与 init 进程交互的通道)
& & & &挂载点
以下名称被保留用于挂载特殊的文件系统。
这 些特殊的文件系统只提供内核界面而不提供标准的设备节点。
/dev/pts & & & &devpts & & & & & & & &pty slave 文件系统
/dev/shm & & & &tmpfs & & & & & & & &提供对 posix 共享内存的直接访问
===================================================================
终 端(或tty)设备是一种特殊的字符设备。终端设备是可以在会话中扮演控制终端角色的任何设备,
包括:虚拟控制台、串行接口(已废弃)、伪终端 (pty)。
所有的终端设备共享一个通用的功能集合:line discipline,
它既包含通用的终端 line discipline 也包含slip和ppp模式。
所有的终端设备的命名都很相似。这部分内容将解释命名规则和各种类型的tty(终端)的使 用。
需要注意的是这些命名习惯包含了几个历史遗留包袱。
其中的一些是linux所特有的,另一些则是继承自其他系统,
还有一些反 映了linux在成长过程中抛弃了原来借用自其它系统的一些习惯。
井号(#)在设备名里表示一个无前导零的十进制数。
虚拟控制台 (virtual console)和控制台设备(console device)
虚拟控制台是在系统视频监视器上全屏显示的终端。
虚拟 控制台被命名为编号从 /dev/tty1 开始的 /dev/tty# 。
/dev/tty0 是当前虚拟控制台。
/dev/tty0 用于在不能使用帧缓冲设备(/dev/fb*)的机器上存取系统视频卡,
注意,不要将 /dev/console 用于此目的。
/dev/console 由内核管理,系统消息将被发送到这里。
单用户模式下必须允许 login 使用 /dev/console 。
串行接口(已废弃)
这 里所说的"串行接口"是指 rs-232 串行接口和任何模拟这种接口的设备,
不管是在硬件(例如调制解调器)还是在软件(例如isdn驱动)中 模拟。
在linux中的每一个串行接口都有两个设备名:
主设备或呼入(callin)设备、交替设备或呼出(callout)设备。
设 备类型之间使用字母的大小写进行区分。
比如,对于任意字母x,"tty"设备名为 /dev/ttyx# ,而"cu"设备名则为 /dev/cux# 。
由于历史原因,/dev/ttys# 和 /dev/ttyc# 分别等价于 /dev/cua# 和 /dev/cub# 。
名称 /dev/ttyq# 和 /dev/cuq# 被保留为本地使用。
伪终端(pty)
伪终端用于创 建登陆会话或提供其它功能,
比如通过 tty line discipline (包括slip或者ppp功能)来处理任意的数据生成。
每 一个 pty 都有一个master端和一个slave端。按照 system v/unix98 的 pty 命名方案,
所有master端共 享同一个 /dev/ptmx 设备节点(打开它内核将自动给出一个未分配的pty),
所有slave端都位于 /dev/pts 目录下,名为 /dev/pts/# (内核会根据需要自动生成和删除它们)。
一旦master端被打开,相应的slave设备就可以按照与 tty 设备完全相同的方式使用。
master设备与slave设备之间通过内核进行连接,等价于拥有 tty 功能的双向管道(pipe)。
===============================
你 可能会很奇怪,为什么没有 /dev/hda 这样的设备,难道不常用么?
原因在于从 2.6.19 开始,内核引入了新的ata驱动,将sata/ide硬盘同意使用 /dev/sd? 来表示了,所以 /dev/hd? 就没有存在的必要了
阅读(...) 评论()

我要回帖

更多关于 linux查看设备号 的文章

 

随机推荐