位置:海鸟网 > IT > linux/Unix >

Linux设备文件简介

  版权声明

  本文作者是一位自由软件爱好者,所以本文虽然不是软件,但是本着 GPL 的精神发布。任何人都可以自由使用、转载、复制和再分发,但必须保留作者署名,亦不得对声明中的任何条款作任何形式的修改,也不得附加任何其它条件。您可以自由链接、下载、传播此文档,但前提是必须保证全文完整转载,包括完整的版权信息和作译者声明。

  其他作品

  本文作者十分愿意与他人共享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有作品的列表:

  金步国作品列表

  BUG报告,切磋与探讨

  由于作者水平有限,因此不能保证作品内容准确无误,请在阅读中自行鉴别。如果你发现了作品中的错误,请您来信指出,哪怕是错别字也好,任何提高作品质量的建议我都将虚心接纳。如果你愿意就作品中的相关内容与我进行进一步切磋与探讨,也欢迎你与我联系。联系方式:MSN: csfrank122@hotmail.com

  概述

  设备管理是linux中比较基础的东西,但是由于Linux智能程度的越来越高,Udev的使用越来越广泛,使得越来越多的Linux新用户对 /dev 目录下的东西变得不再熟悉。有时候遇见问题就会变得抓狂。

  Linux 中的设备有2种类型:字符设备(无缓冲且只能顺序存取)、块设备(有缓冲且可以随机存取)。每个字符设备和块设备都必须有主、次设备号,主设备号相同的设备是同类设备(使用同一个驱动程序)。这些设备中,有些设备是对实际存在的物理硬件的抽象,而有些设备则是内核自身提供的功能(不依赖于特定的物理硬件,又称为"虚拟设备")。每个设备在 /dev 目录下都有一个对应的文件(节点)。可以通过 cat /proc/devices 命令查看当前已经加载的设备驱动程序的主设备号。内核能够识别的所有设备都记录在原码树下的 Documentation/devices.txt 文件中。在 /dev 目录下除了字符设备和块设备节点之外还通常还会存在:FIFO管道、Socket、软/硬连接、目录。这些东西没有主/次设备号。

  设备文件

  Linux内核所能识别的所有设备都记录在

  

  而内核原码树中的 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 系统控制台(一般是/dev/tty0)

  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