linux设备编号,linux设备号详解

linux

中的设备有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? 就没有存在的必要了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值