设备文件

优质
小牛编辑
130浏览
2023-12-01

了解这些设备的最基本要求就是对每个设备文件的含义了如指掌,下面列出了 Linux-3.13.2 内核中常见的已注册设备及其含义(省略了生僻与罕见的设备)。

----------------------------------------------------------------------
主设备号     设备类型
          次设备号=文件名      简要说明
----------------------------------------------------------------------

  0         未命名设备(例如NFS之类非设备的挂载)
          0 = 为空设备号保留

          参见主设备号为144,145,146的块设备,以了解"扩展区域"(expansion area)


  1 char    内存设备
          1 = /dev/mem         物理内存的全镜像。可以用来直接存取物理内存。
          2 = /dev/kmem        内核看到的虚拟内存的全镜像。可以用来访问内核中的内容(查看内核变量或用作rootkit之类)。
          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的输出;而读取则得到printk的输出缓冲区内容。


  1 block   RAM disk   [已过时,请用TMPFS]
          0 = /dev/ram0        第1个 RAM disk
          1 = /dev/ram1        第2个 RAM disk
            ...

          [说明]将/dev/ram0用作initrd的做法已过时(因为它仅针对image-initrd格式),当下的主流是cpio-initrd格式。


  4 char    TTY(终端)设备
          0 = /dev/tty0        当前虚拟控制台
          1 = /dev/tty1        第1个虚拟控制台
            ...
         63 = /dev/tty63       第63个虚拟控制台
         64 = /dev/ttyS0       第1个UART串口
            ...
        255 = /dev/ttyS191     第192个UART串口

          [说明]"UART串口"是指 8250/16450/16550 UART串行控制芯片


  4 block   如果根文件系统以是以只读方式挂载的,那么就不可能创建真正的设备节点,
            此时就使用该设备作为动态分配的主设备的别名,并挂载为根文件系统。
          0 = /dev/root


  5 char    辅助 TTY 设备
          0 = /dev/tty         当前 TTY 设备
          1 = /dev/console     系统控制台(一般是/dev/tty0)
          2 = /dev/ptmx        所有 Unix98 PTY master 的复用器
          3 = /dev/ttyprintk   内核通过此设备使用printk发送内嵌的用户消息(依赖于CONFIG_TTY_PRINTK)
         64 = /dev/cua0        对应于 ttyS0 的呼出(Callout)设备
            ...
        255 = /dev/cua191      对应于 ttyS191 的呼出(Callout)设备


  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   回环设备(用一个普通的文件来模拟一个块设备)
          0 = /dev/loop0       第1个回环设备
          1 = /dev/loop1       第2个回环设备
            ...

          [提示]对回环设备的绑定由 mount(8) 或 losetup(8) 处理


  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个分区
         [提示]对于DOS分区来说,1-4是主分区,5-15是逻辑分区。但对于GPT分区来说,全是主分区,没有逻辑分区的概念。

         [提示]目前的内核将SATA/PATA/IED硬盘统一使用 /dev/sd* 来表示,已经不再使用 /dev/hd* 这种过时的设备文件了。


  9 block   Metadisk(RAID)设备
          0 = /dev/md0         第1组 metadisk
          1 = /dev/md1         第2组 metadisk
            ...

          [说明]MD驱动(CONFIG_BLK_DEV_MD)的作用是将同一个文件系统分割到多个物理磁盘上。


 10 char    各种杂项设备(含非串口鼠标)
          1 = /dev/psaux       PS/2鼠标
        128 = /dev/beep        能够让主板的蜂鸣器发出不同频率声音的设备(Fancy Beeper Daemon)
        130 = /dev/watchdog    看门狗(CONFIG_WATCHDOG)
        131 = /dev/temperature 机器内部温度
        135 = /dev/rtc         实时时钟(Real Time Clock)
        143 = /dev/pciconf     PCI配置空间
        144 = /dev/nvram       非易失配置RAM
        151 = /dev/led         发光二极管(LED)灯
        152 = /dev/kpoll       内核轮询(Poll)驱动
        156 = /dev/lcd         液晶(LCD)显示屏
        161 = /dev/userdma     用户空间DMA访问
        162 = /dev/smbus       系统管理总线(System Management Bus)
        164 = /dev/ipmo        Intel的智能平台管理(Intelligent Platform Management)接口
        165 = /dev/vmmon       VMware虚拟机监视器
        170 = /dev/thinkpad/thinkpad    Thinkpad设备
        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微代码更新接口(依赖于CONFIG_MICROCODE)
        186 = /dev/atomicps    进程状态数据的原子快照
        188 = /dev/smbusbios   SMBus(系统管理总线) BIOS
        189 = /dev/ussp_ctl    用户空间串口控制器
        200 = /dev/net/tun     TAP/TUN 网络设备(TAP/TUN以软件的方式实现了网络设备)
                               TAP模拟了以太网帧(第二层),TUN模拟了IP包(第三层)。
        202 = /dev/emd/ctl     增强型 Metadisk RAID (EMD) 控制器
        203 = /dev/cuse        用户空间的字符设备(Character device in user-space)
        212 = /dev/watchdogs/0 第一只看门狗
        213 = /dev/watchdogs/1 第二只看门狗
        214 = /dev/watchdogs/2 第三只看门狗
        215 = /dev/watchdogs/3 第四只看门狗
        220 = /dev/mptctl      Message passing technology (MPT) control
        223 = /dev/input/uinput         用户层输入设备
        224 = /dev/tpm         TCPA TPM driver
        227 = /dev/mcelog      X86_64 Machine Check Exception driver
        228 = /dev/hpet        高精度事件定时器(HPET)
        229 = /dev/fuse        Fuse(用户空间的虚拟文件系统)
        231 = /dev/snapshot    系统内存快照
        232 = /dev/kvm         内核虚构机(基于AMD SVM和Intel VT硬件虚拟技术)
        234 = /dev/btrfs-control        Btrfs文件系统控制设备
        235 = /dev/autofs      Autofs控制设备
        236 = /dev/mapper/control       设备映射(Device-Mapper)控制器
        237 = /dev/loop-control         回环设备控制器
        238 = /dev/vhost-net   用于 virtio net 的宿主内核加速器


 11 block   SCSI CD-ROM 设备
          0 = /dev/scd0        第1个 SCSI CD-ROM
          1 = /dev/scd1        第2个 SCSI CD-ROM
            ...


 13 char    核心输入设备
          0 = /dev/input/js0   第一个游戏杆(joystick)
          1 = /dev/input/js1   第二个游戏杆(joystick)
            ...
         32 = /dev/input/mouse0         第1个鼠标
         33 = /dev/input/mouse1         第2个鼠标
            ...
         63 = /dev/input/mice  所有鼠标的合体
         64 = /dev/input/event0         第1个事件队列
         65 = /dev/input/event1         第2个事件队列
            ...


 14 char    OSS(Open Sound System)兼容设备[已过时]
          0 = /dev/mixer       OSS混音控制器(CONFIG_SND_MIXER_OSS)
          1 = /dev/sequencer   OSS音序器(CONFIG_SND_SEQUENCER_OSS)
          3 = /dev/dsp         OSS数字音频波形输出设备(CONFIG_SND_PCM_OSS)
          8 = /dev/sequencer2  第二OSS音序器(CONFIG_SND_SEQUENCER_OSS)
         16 = /dev/mixer1      第二OSS混音控制器(CONFIG_SND_MIXER_OSS)
         19 = /dev/dsp1        第二OSS数字音频波形输出设备(CONFIG_SND_PCM_OSS)


 21 char    通用 SCSI 设备(通常是SCSI光驱)
          0 = /dev/sg0         第1个通用 SCSI 设备
          1 = /dev/sg1         第2个通用 SCSI 设备
            ...

           [说明]许多发行版还将这些设备命名为 /dev/sga, /dev/sgb, /dev/sgc ...


 29 char    通用帧缓冲(frame buffer)设备
          0 = /dev/fb0         第1个帧缓冲设备
          1 = /dev/fb1         第2个帧缓冲设备
            ...
         31 = /dev/fb31        第32个帧缓冲设备


 43 block   网络块设备(Network block devices)
          0 = /dev/nb0         第1个网络块设备
          1 = /dev/nb1         第2个网络块设备
            ...


 44 block   闪存转换层(Flash Translation Layer)文件系统
          0 = /dev/ftla        第1个MTD(Memory Technology Device)上的FTL
         16 = /dev/ftlb        第2个MTD(Memory Technology Device)上的FTL
         32 = /dev/ftlc        第3个MTD(Memory Technology Device)上的FTL
            ...
        240 = /dev/ftlp        第16个MTD(Memory Technology Device)上的FTL

          [说明]分区的表示方法与SCSI磁盘相同(最大15个)


 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 磁盘(整个磁盘)


 67 block   SCSI 磁盘(48-63)
          0 = /dev/sdaw        第49个 SCSI 磁盘(整个磁盘)
         16 = /dev/sdax        第50个 SCSI 磁盘(整个磁盘)
         32 = /dev/sday        第51个 SCSI 磁盘(整个磁盘)
            ...
        240 = /dev/sdbl        第64个 SCSI 磁盘(整个磁盘)


 81 char    video4linux
          0 = /dev/video0      第1个视频采集设备(摄像头)
            ...
         63 = /dev/video63     第64个视频采集设备(摄像头)
         64 = /dev/radio0      第1个无线电设备(收音机之类)
            ...
        127 = /dev/radio63     第64个无线电设备(收音机之类)
        224 = /dev/vbi0        第1个垂直中断(vertical blank interrupt)
            ...
        255 = /dev/vbi31       第64个垂直中断(vertical blank interrupt)


 89 char    I2C 总线接口
          0 = /dev/i2c-0       第1个 I2C 适配器
          1 = /dev/i2c-1       第2个 I2C 适配器
            ...


 90 char    内存技术设备(Memory Technology Device) (RAM, ROM, Flash)
          0 = /dev/mtd0        第1个 MTD (读写)
          1 = /dev/mtdr0       第1个 MTD (只读)
            ...
         30 = /dev/mtd15       第16个 MTD (读写)
         31 = /dev/mtdr15      第16个 MTD (只读)


 93 block   NAND闪存转换层(Flash Translation Layer)文件系统
          0 = /dev/nftla       第1个NFTL层
         16 = /dev/nftlb       第2个NFTL层
            ...
        240 = /dev/nftlp       第16个NFTL层

          [说明]分区的表示方法与SCSI磁盘相同(最大15个)


 98 block   用户模式下的虚拟块设备(分区处理方式与 SCSI 磁盘相同)
          0 = /dev/ubda        第1个用户模式块设备
         16 = /dev/udbb        第2个用户模式块设备
            ...


108 char    独立于特定设备的 PPP 接口
          0 = /dev/ppp         独立于特定设备的 PPP 接口(CONFIG_PPP)


117 block   企业卷管理系统(Enterprise Volume Management System)
          0 = /dev/evms/block_device   EVMS块设备
          1 = /dev/evms/legacyname1    第1个EVMS传统设备
          2 = /dev/evms/legacyname2    第2个EVMS传统设备
            ...
            两个范围都可以相互延伸(向上/向下)一直到它们相遇
            ...
        254 = /dev/evms/EVMSname2      第2个EVMS本地设备
        255 = /dev/evms/EVMSname1      第1个EVMS本地设备

           [说明]"legacyname"来源于普通的块设备名,
                 例如 /dev/sda5 将会变成 /dev/evms/sda5


119 char    VMware虚拟网路控制器
          0 = /dev/vnet0       第1个虚拟网路
          1 = /dev/vnet1       第2个虚拟网路
            ...


128-135 char    Unix98 PTY master

            这些设备不应当存在设备节点,而应当通过 /dev/ptmx 接口访问。


136-143 char    Unix98 PTY slave
          0 = /dev/pts/0    第1个 Unix98 PTY slave
          1 = /dev/pts/1    第2个 Unix98 PTY slave
            ...

            这些设备节点是自动生成的(伴有适当的权限和模式),不能手动创建。
            方法是通过使用适当的 mount 选项(通常是:mode=0620,gid=<"tty"组的gid>)
            将 devpts 文件系统挂载到 /dev/pts 目录即可。


144 block   用于更多非设备型挂载的扩展区域(Expansion Area)#1
          0 = mounted device 256
        255 = mounted device 511


145 block   用于更多非设备型挂载的扩展区域(Expansion Area)#2
          0 = mounted device 512
        255 = mounted device 767


146 block   用于更多非设备型挂载的扩展区域(Expansion Area)#3
          0 = mounted device 768
        255 = mounted device 1023


147 block   DRBD(Distributed Replicated Block Device)
          0 = /dev/drbd0       第1个 DRBD 设备
          1 = /dev/drbd1       第2个 DRBD 设备
            ...


153 block   EMD(Enhanced Metadisk RAID)存储单元(分区处理方式与 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个存储单元


179 block   MMC(MultiMeidaCard)块设备
          0 = /dev/mmcblk0     第1块 SD/MMC 卡
          1 = /dev/mmcblk0p1   第1块 SD/MMC 卡的第1个分区
          8 = /dev/mmcblk1     第2块 SD/MMC 卡
            ...

          [说明]每个MMC块设备保留的次设备号数量由 CONFIG_MMC_BLOCK_MINORS 决定(默认=8)。
               或者也可以通过内核引导参数 mmcblk.perdev_minors 进行修改。


180 char    USB字符设备
          0 = /dev/usb/lp0      第1个USB打印机
            ...
         15 = /dev/usb/lp15     第16个USB打印机
         48 = /dev/usb/scanner0 第1个USB扫描仪
            ...
         63 = /dev/usb/scanner15  第16个USB扫描仪
         96 = /dev/usb/hiddev0  第1个USB人机界面设备(鼠标/键盘/游戏杆/手写版等)
            ...
        111 = /dev/usb/hiddev15 第16个USB人机界面设备(鼠标/键盘/游戏杆/手写版等)
        132 = /dev/usb/idmouse  ID Mouse (指纹扫描仪)


180 block   USB块设备
          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
            ...


202 block   Xen 虚拟块设备
          0 = /dev/xvda        第1个 Xen 虚拟磁盘(整块磁盘)
         16 = /dev/xvdb        第2个 Xen 虚拟磁盘(整块磁盘)
         32 = /dev/xvdc        第3个 Xen 虚拟磁盘(整块磁盘)
            ...
        240 = /dev/xvdp        第16个 Xen 虚拟磁盘(整块磁盘)

          [说明]分区的表示方法与SCSI磁盘相同(最大15个)


203 char    CPU CPUID 信息
          0 = /dev/cpu/0/cpuid  CPU0的CPUID
          1 = /dev/cpu/1/cpuid  CPU1的CPUID
            ...


226 char    DRI(Direct Rendering Infrastructure)
          0 = /dev/dri/card0   第1个显卡
          1 = /dev/dri/card1   第2个显卡
            ...


232 char    生物识别设备
          0 = /dev/biometric/sensor0/fingerprint  第1个设备的第1个指纹传感器
          1 = /dev/biometric/sensor0/iris         第1个设备的第1个虹膜传感器
          2 = /dev/biometric/sensor0/retina       第1个设备的第1个视网膜传感器
          3 = /dev/biometric/sensor0/voiceprint   第1个设备的第1个声波传感器
          4 = /dev/biometric/sensor0/facial       第1个设备的第1个面部传感器
          5 = /dev/biometric/sensor0/hand         第1个设备的第1个手掌传感器
            ...
         10 = /dev/biometric/sensor1/fingerprint  第2个设备的第1个指纹传感器
            ...
         20 = /dev/biometric/sensor2/fingerprint  第3个设备的第1个指纹传感器
            ...