设备文件简介摘至《Linux设备文件简介》版权声明本文作者是一位自由软件爱好者,所以本文虽然不是软件,但是本着GPL的精神发布。任何人都可以自由使用、转载、复制和再分发,但必须保留作者署名,亦不得对声明中的任何条款作任何形式的修改,也不得附加任何其它条件。您可以自由链接、下载、传播此文档,但前提是必须保证全文完整转载,包括完整的版权信息和作译者声明。其他作品本文作者十分愿意与他人共享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有作品的列表:金步国作品列表BUG报告,切磋与探讨由于作者水平有限,因此不能保证作品内容准确无误,请在阅读中自行鉴别。如果你发现了作品中的错误,请您来信指出,哪怕是错别字也好,任何提高作品质量的建议我都将虚心接纳。如果你愿意就作品中的相关内容与我进行进一步切磋与探讨,也欢迎你与我联系。联系方式:Email:csfrank@citiz.net;QQ:70171448;MSN:csfrank122@hotmail.comLinux中的设备有2种类型:字符设备(无缓冲且只能顺序存取)、块设备(有缓冲且可以随机存取)。每个字符设备和块设备都必须有主、次设备号,主设备号相同的设备是同类设备(使用同一个驱动程序)。这些设备中,有些设备是对实际存在的物理硬件的抽象,而有些设备则是内核自身提供的功能(不依赖于特定的物理硬件,又称为虚拟设备)。每个设备在/dev目录下都有一个对应的文件(节点)。可以通过cat/proc/devices命令查看当前已经加载的设备驱动程序的主设备号。内核能够识别的所有设备都记录在原码树下的Documentation/devices.txt文件中。在/dev目录下除了字符设备和块设备节点之外还通常还会存在:FIFO管道、Socket、软/硬连接、目录。这些东西没有主/次设备号。Linux内核所能识别的所有设备都记录在而内核原码树中的Documentation/devices.txt可能不是最新版本。了解这些设备的最基本要求就是对每个设备文件的含义了如指掌,下面就以列表的形式列出常见的设备文件以及相应的含义(比较偏僻的就省略了):代码:----------------------------------------------------------------------主设备号设备类型次设备号=文件名简要说明----------------------------------------------------------------------0未命名设备(例如:挂载的非设备)0=未空设备号保留1char内存设备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的输出1blockRAMdisk0=/dev/ram0第1个RAMdisk(initrd只能使用ram0)1=/dev/ram1第2个RAMdisk...200=/dev/ram200第200个RAMdisk4charTTY(终端)设备0=/dev/tty0当前虚拟控制台1=/dev/tty1第1个虚拟控制台...63=/dev/tty63第63个虚拟控制台4block如果根文件系统以是以只读方式挂载的,那么就不可能创建真正的设备节点,此时就使用该设备作为动态分配的主(major)设备的别名0=/dev/root5char其他TTY设备0=/dev/tty当前TTY设备1=/dev/console系统控制台2=/dev/ptmx所有PTYmaster的复用器7char虚拟控制台捕捉设备(这些设备既允许读也允许写)0=/dev/vcs当前虚拟控制台(vc)的文本内容1=/dev/vcs1tty1的文本内容...63=/dev/vcs63tty63的文本内容128=/dev/vcsa当前虚拟控制台(vc)的文本/属性内容129=/dev/vcsa1tty1的文本/属性内容...191=/dev/vcsa63tty63的文本/属性内容代码:7block回环设备(用一个普通的磁盘文件来模拟一个块设备)对回环设备的绑定由mount(8)或losetup(8)处理0=/dev/loop0第1个回环设备1=/dev/loop1第2个回环设备...8blockSCSI磁盘(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是逻辑分区。9blockMetadisk(RAID)设备0=/dev/md0第1组metadisk1=/dev/md1第2组metadisk...metadisk驱动用于将同一个文件系统分割到多个物理磁盘上。10char非串口鼠标,各种杂项设备和特性1=/dev/psauxPS/2鼠标131=/dev/temperature机器内部温度134=/dev/apm_biosAPM(高级电源管理)BIOS135=/dev/rtc实时时钟(RealTimeClock)144=/dev/nvram非易失配置RAM162=/dev/smbus系统管理总线(SystemManagementBus)164=/dev/ipmoIntel的智能平台管理(IntelligentPlatformManagement)接口173=/dev/ipmikcs智能平台管理(IntelligentPlatformManagement)接口175=/dev/agpgartAGP图形地址重映射表(GraphicsAddressRemappingTable)182=/dev/perfctr性能监视计数器183=/dev/hwrng通用硬件随机数发生器184=/dev/cpu/microcodeCPU微代码更新接口186=/dev/atomicps进程状态数据的原子快照188=/dev/smbusbiosSMBus(系统管理总线)BIOS200=/dev/net/tunTAP/TUN网络设备(TAP/TUN以软件的方式实现了网络设备)TAP模拟了以太网帧(第二层),TUN模拟了IP包(第三层)。202=/dev/emd/ctl增强型MetadiskRAID(EMD)控制器220=/dev/mptctlMessagepassingtechnology(MPT)control223=/dev/input/uinput用户层输入设备驱动支持227=/dev/mcelogX86_64MachineCheckExceptiondriver228=/dev/hpetHPETdriver229=/dev/fuseFuse(用户空间的虚拟文件系统)231=/dev/snapshot系统内存快照232=/dev/kvm基于内核的虚构机(基于AMDSVM和IntelVT硬件虚拟技术)11blockSCSICD-ROM设备0=/dev/scd0第1个SCSICD-ROM1=/dev/scd1第2个SCSICD-ROM...代码:13char核心输入设备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个事件队列21char通用SCSI设备(通常是SCSI光驱)0=/dev/sg0第1个通用SCSI设备1=/dev/sg1第2个通用SCSI设备...29char通用帧缓冲(framebuffer)设备0=/dev/fb0第1个帧缓冲设备1=/dev/fb1第2个帧缓冲设备...31=/dev/fb31第32个帧缓冲设备30chariBCS-2兼容设备0=/dev/socksys套接字访问接口1=/dev/spxSVR3本地X接口32=/dev/inet/ip网络访问接口33=/dev/inet/icmp34=/dev/inet/ggp35=/dev/inet/ipip36=/dev/inet/tcp37=/dev/inet/egp38=/dev/inet/pup39=/dev/inet/udp40=/dev/inet/idp41=/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代码:36charNetlink支持0=/dev/route路由,设备更新,kerneltouser3=/dev/fwmonitorFirewallpacket复制59charsf防火墙模块0=/dev/firewall与sf内核模块通信65blockSCSI磁盘(16-31)0=/dev/sdq第17个SCSI磁盘(整个磁盘)16=/dev/sdr第18个SCSI磁盘(整个磁盘)32=/dev/sds第19个SCSI磁盘(整个磁盘)...240=/dev/sdaf第32个SCSI磁盘(整个磁盘)66blockSCSI磁盘(32-47)0=/dev/sdag第33个SCSI磁盘(整个磁盘)16=/dev/sdah第34个SCSI磁盘(整个磁盘)32=/dev/sdai第35个SCSI磁盘(整个磁盘)...240=/dev/sdav第48个SCSI磁盘(整个磁盘)89charI2C总线接口0=/dev/i2c-0第1个I2C适配器1=/dev/i2c-1第2个I2C适配器...98block用户模式下的虚拟块设备(分区处理方式与SCSI磁盘相同)0=/dev/ubda第1个用户模式块设备16=/dev/udbb