Board logo

标题: linux设备号详解 [打印本页]

作者: yuyang911220    时间: 2017-1-25 21:07     标题: 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个帧缓冲设备




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0