- 浏览: 89417 次
- 性别:
- 来自: 北京
最新评论
-
hpu423:
...
JAVA 字符串常量池 -
hpu423:
[c[flash=200,200][flash=200,200 ...
JAVA 字符串常量池 -
liubang201010:
Foglight 监控OC4j自2004年左右, Oracle ...
OC4J 10.0.3 安装 配置 详解
1.设备文件是什么?
操作系统与外部设备(例如,磁带驱动器,磁盘驱动器,打印机,终端,modern)是通过一种被称为设备文件的文件来进行通信。unix输入输出到外部设备的方式和输入输出到一个文件的方式是相同的。在UNIX 同一个外部设备进行通讯之前,这个设备必须首先要有一个设备文件存在。例如,每一个终端都有自己的设备文件来供UNIX写数据(出现在终端屏幕上),和读取数据(用户通过键盘输入)。
设备文件和普通文件不一样,设备文件中并不包含任何数据。
操作系统通过设备文件来与一个设备进行通讯。设备文件存在于/dev目录下。
注意:设备文件与特殊文件是同义词。你可以互换这两个术语。
由于UNIX操作系统为你创建所有的设备文件,所以在你存取一个外部设备的时候,你需要知道这个设备对应的设备文件名。有时候你会需要自己创建一个设备文件。如果你永久地去掉一个外部设备,你应该删除它对应的设备文件。
以下的例子说明了UNIX命令如何使用一个设备文件:
#tar -cvf /dev/rmt/0m /usr
tar应用使用-f选项来打开一个文件以供输出。然后tar会备份数据到那个文件。tar可以写到一个普通文件或者直接写到一个设备。tar并不需要知道它们之间的不同。
# echo hello >; /dev/tty0p1
在这个例子中,echo命令的标准输出通过被重定向到一个终端,其方式是通过这个终端的设备文件
使用ls -l列出设备文件
使用ls -l /dev列出设备文件名
brw-r----- 1 root sys 31 0x005000 Feb 10 1997 /dev/dsk/c0t5d0
brw-r----- 1 root sys 31 0x006000 Feb 10 1997 /dev/dsk/c0t6d0
crw-r----- 1 root sys 31 0x005000 Feb 10 1997 /dev/rdsk/c0t5d0
crw-r----- 1 root sys 31 0x006000 Feb 10 1997 /dev/rdsk/c0t6do
crw-r----- 2 root tty 17 0x000001 Jan 9 09:25 /dev/ttyp1
crw-r----- 2 root tty 17 0x000002 Jan 9 17:25 /dev/ttyp2
设备文件类型 主号 次号 设备文件名
设备文件通常都是在/dev目录下。你可以使用ls -l命令来列出这个目录下的文件,就像你列出其它目录下的文件一样。注意:ls -l列出的设备文件和其它文件有一点点的不同。
2.设备文件类型
设备文件名的第一个字符指明了这个设备文件的类型。
字符设备文件: 第一个字符为“c",表明这个文件是一个字符设备文件。
字符设备文件传送数据给设备的时候,一次传送一个字符。终端,打印机,绘图仪,modern等设备是一些典型的经过字符设备文件传送数据的设备。字符设备文件有时也被称为“raw” 设备文件。
块设备文件: 第一个字符为“b”的设备文件是一个块设备文件。系统通过块设备文件存取一个设备的时候,先从内存中的buffer中读或写数据。而不是直接传送数据到物理磁盘。这种方式能有效的提高磁盘和CD-ROMS的I/O性能。
终端,moderms,打印机,绘图仪和磁带设备是典型的只能使用字符设备文件的设备,磁盘和CD-ROMS既可以使用字符设备文件也可以使用块设备文件。
一些应用程序和工具选择使用字符设备文件直接存取磁盘。而其它工具要求使用一个块设备文件。阅读应用或者工具的说明文档来决定使用那一种设备文件。
设备文件主号
每一个设备文件都有一个“主号”,使用ls -l命令输出的内容的第五个字段即为主号。主号是表示系统存取这个设备的“内核驱动” 。内核驱动是UNIX内核中的一部分代码,其作用是用来控制一种特殊的设备的输入输出。大多数的unix操作系统都有多种设备驱动程序;每一个设备文件名中的设备主号就代表这个设备使用的是那个设备驱动程序。lsdev命令可以列出你的内核中配置的驱动程序,和这些驱动程序对应的主号。
设备文件次号
每一个设备文件都有一个次号。“次号”是一个24位的十六进制数字,其定义了:
这个设备在系统中的物理的位置。
设备存储选项。例如磁带,磁带有特殊的存取选项,使用/不使用硬件压缩,和定义写到磁带上的数据格式密度等。
设备文件名
设备文件名遵循一个标准的命名的约定。这种约定使分辩那一个设备文件关联那一个设备变得很容易。以下的章节会讨论命名规则的细节。
使用ioscan列出设备文件名
# ioscan -fun 列出所有的设备和对应的设备文件名
# ioscan -fun disk 列出所有的磁盘设备和设备文件名
# ioscan -funC tape 列出所有的磁带设备和磁带设备文件
虽然ls -l命令可以列出你的系统中的设备文件。但是它没有指明那一个设备文件对应那一个设备。
ioscan -fun命令提供了一种方便的机制来找到设备文件对应系统中的硬件的路径。在每一个硬件路径下,ioscan -fun列出了与每一个硬件路径相关联的设备文件。由于一些设备有多个存取选项,ioscan可以列出一个设备对应的多个设备文件。
例子:
#ioscan -fun 列出所有的设备和设备关联的设备文件名
# ioscan -funC disk 仅列出磁盘类的设备和关联的设备文件名
#ioscan -funC tape 仅列出磁带设备和关联的设备文件名
#ioscan -funH 2/0/1.6.0 仅列出在2/0/1.6.0位置的设备的设备文件名
使用lssf列出设备文件
列出设备文件的特征
语法:
/usr/sbin/lssf path [pah -]
例子:
# lssf /dev/rdsk/clt6d0
disc3 card instance 1 scsi target 6 scsi LUN 0
section 0 at address 52.6.0 /dev/rdsk/clt6d0
# lssf /dev/rmt/0mn
tape2 card instance 1 SCSI target 0 SCSI LUN at@t no
rewind best density available at address 52.0.0 /dev/rmt/omn
许多设备有多个相关联的设备文件。例如,上例中的磁带设备有八个设备文件。这是因为许多设备可以使用不同的存取选项来存取。每一个设备文件代表一个存取选项。
ioscan列出每一个设备的设备文件,但是不指明设备文件对应那一个设备。lssf命令可以选择用来判断每一个设备文件的特征。lssf 告诉你:
这个设备文件使用的哪一个驱动程序
设备的硬件地址信息
任何设备文件使用的设备存取选项。
3./dev目录的布局
这一部分会介绍系统对一个设备文件取名的命名规则。一个容易理解的命令规则会让你更容易地选择和使用你系统中的设备文件。
在多数UNIX系统中,所有的设备文件都是存在于/dev目录下的。一些设备文件事直接在/dev目录下,而另外一些被组织在/dev下的子目录下。一下是一些重要的设备文件目录的列表
/dev 包含所有的终端,moderm,lan和打印机的设备文件。
/dev/dsk 包含所有的块磁盘设备文件
/dev/rdsk 包含有所有的裸磁盘设备文件
/dev/rmt 包含有所有的磁带设备文件
设备文件命名规则
默认的情况。操作系统给一个设备文件取名的时候是依据一个标准的命名原则。虽然你可以任意对一个设备文件取名。但是使用一个标准的命名规则会使用定位你的设备文件十分容易。
界面卡号
内核自动对系统中的每个设备和界面卡赋予一个号码。这个号码在ioscan -f输出的“I"这个字段显示。
磁盘,磁带或者CD ROM的设备文件名中的"C"指明这个设备连接的界面卡的数字。ioscan命令显出的所有的磁盘都有一个相同的以”C0"开头的设备文件,这是因为SCSI卡的号码为"0"。
注意每一个设备文件都有一个号码,这个号码只是操作系统专用的一个号码,并不被用来对应设备文件名。
ioscan –fun
SCSI目标地址
设备文件的“t#”部分确定这个设备文件相关联设备的SCSI目标地址。这个SCSI目标地址是通过设备自身上的跳线或者DIP开关来设置的。一个SCSI设备的硬件路径的倒数第二个字符就是这个设备的SCSI目标地址。例如,在上例的ioscan输出中,在8/12.3.0的磁盘的SCSI地址为“3”。8/12.6.0这块磁盘的SCSI目标地址为“6”。
SCSI逻辑单元号
逻辑单元号(LUN)能够被用来识别一个磁带库的机器手,或者是一个磁盘阵列的一个逻辑单元。对大多数的SCSI设备来说,LUN号都是“0”。每一个SCSI设备的LUN号出现在设备硬件路径的最后一个小数点后。
设备存取选项
设备文件名的最后一部分是这个设备文件的存取选项。磁带机设备文件名可能有多个选项。设备和设备的选项是不同的。
磁盘设备文件名
每一个磁盘和CD-ROM都有两个设备文件:
一个块设备文件在/dev/dsk下面
一个字符设备文件在/dev/rdsk下面
磁带设备文件名
磁带设备文件在/dev/rmt目录下,遵循c#t#d#[选项]的命名规则。同磁盘和CD-ROM不同,磁带驱动器通常都支持多个选项。
4.如何创建一个设备文件
自动配置
insf
mksf
mknod
大多数情况,你不需要创建设备文件。当第一次安装操作系统的时候。insf在进行硬件探测的时候会自动创建所有发现的设备的设备文件。每一次系统重启动,insf会创建新连接到系统的设备的设备文件。
在一一些特殊的情况下,你会需要手工创建或是修改设备文件。
自动配置
什么是自动配置
在系统启动的时候,内核会执行一系列系统初始化的工作,包括探测所有的安装在系统中的硬件。在进行硬件探测的时候,内核会确认所有的设备-总线,适配器,设备适配器-这些能够被自动配置的设备。内核绑定一个合适的驱动程序给每一个检测到的设备。
在完成系统初始化后,内核会激活init命令。init进程回读取/etc/inittab文件来激活几个系统启动的命令,包括/sbin/ioinitrc。
第一步,initrc会读取/etc/ioconfig文件的内容,然后传送设备映射信息道内核的数据结构中,io_tree。下一步,ioinit执行insf。insf会为新的设备创建设备文件。它同样会更新/etc/ioconfig文件和内核树。
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=<"tty"组的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 是 <字母 X>-<数字 0>-<字母 R>
推荐的链接
推荐在所有的系统上都存在这些连接:
链接 目标 链接类型 简要说明
/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? 就没有存在的必要了
操作系统与外部设备(例如,磁带驱动器,磁盘驱动器,打印机,终端,modern)是通过一种被称为设备文件的文件来进行通信。unix输入输出到外部设备的方式和输入输出到一个文件的方式是相同的。在UNIX 同一个外部设备进行通讯之前,这个设备必须首先要有一个设备文件存在。例如,每一个终端都有自己的设备文件来供UNIX写数据(出现在终端屏幕上),和读取数据(用户通过键盘输入)。
设备文件和普通文件不一样,设备文件中并不包含任何数据。
操作系统通过设备文件来与一个设备进行通讯。设备文件存在于/dev目录下。
注意:设备文件与特殊文件是同义词。你可以互换这两个术语。
由于UNIX操作系统为你创建所有的设备文件,所以在你存取一个外部设备的时候,你需要知道这个设备对应的设备文件名。有时候你会需要自己创建一个设备文件。如果你永久地去掉一个外部设备,你应该删除它对应的设备文件。
以下的例子说明了UNIX命令如何使用一个设备文件:
#tar -cvf /dev/rmt/0m /usr
tar应用使用-f选项来打开一个文件以供输出。然后tar会备份数据到那个文件。tar可以写到一个普通文件或者直接写到一个设备。tar并不需要知道它们之间的不同。
# echo hello >; /dev/tty0p1
在这个例子中,echo命令的标准输出通过被重定向到一个终端,其方式是通过这个终端的设备文件
使用ls -l列出设备文件
使用ls -l /dev列出设备文件名
brw-r----- 1 root sys 31 0x005000 Feb 10 1997 /dev/dsk/c0t5d0
brw-r----- 1 root sys 31 0x006000 Feb 10 1997 /dev/dsk/c0t6d0
crw-r----- 1 root sys 31 0x005000 Feb 10 1997 /dev/rdsk/c0t5d0
crw-r----- 1 root sys 31 0x006000 Feb 10 1997 /dev/rdsk/c0t6do
crw-r----- 2 root tty 17 0x000001 Jan 9 09:25 /dev/ttyp1
crw-r----- 2 root tty 17 0x000002 Jan 9 17:25 /dev/ttyp2
设备文件类型 主号 次号 设备文件名
设备文件通常都是在/dev目录下。你可以使用ls -l命令来列出这个目录下的文件,就像你列出其它目录下的文件一样。注意:ls -l列出的设备文件和其它文件有一点点的不同。
2.设备文件类型
设备文件名的第一个字符指明了这个设备文件的类型。
字符设备文件: 第一个字符为“c",表明这个文件是一个字符设备文件。
字符设备文件传送数据给设备的时候,一次传送一个字符。终端,打印机,绘图仪,modern等设备是一些典型的经过字符设备文件传送数据的设备。字符设备文件有时也被称为“raw” 设备文件。
块设备文件: 第一个字符为“b”的设备文件是一个块设备文件。系统通过块设备文件存取一个设备的时候,先从内存中的buffer中读或写数据。而不是直接传送数据到物理磁盘。这种方式能有效的提高磁盘和CD-ROMS的I/O性能。
终端,moderms,打印机,绘图仪和磁带设备是典型的只能使用字符设备文件的设备,磁盘和CD-ROMS既可以使用字符设备文件也可以使用块设备文件。
一些应用程序和工具选择使用字符设备文件直接存取磁盘。而其它工具要求使用一个块设备文件。阅读应用或者工具的说明文档来决定使用那一种设备文件。
设备文件主号
每一个设备文件都有一个“主号”,使用ls -l命令输出的内容的第五个字段即为主号。主号是表示系统存取这个设备的“内核驱动” 。内核驱动是UNIX内核中的一部分代码,其作用是用来控制一种特殊的设备的输入输出。大多数的unix操作系统都有多种设备驱动程序;每一个设备文件名中的设备主号就代表这个设备使用的是那个设备驱动程序。lsdev命令可以列出你的内核中配置的驱动程序,和这些驱动程序对应的主号。
设备文件次号
每一个设备文件都有一个次号。“次号”是一个24位的十六进制数字,其定义了:
这个设备在系统中的物理的位置。
设备存储选项。例如磁带,磁带有特殊的存取选项,使用/不使用硬件压缩,和定义写到磁带上的数据格式密度等。
设备文件名
设备文件名遵循一个标准的命名的约定。这种约定使分辩那一个设备文件关联那一个设备变得很容易。以下的章节会讨论命名规则的细节。
使用ioscan列出设备文件名
# ioscan -fun 列出所有的设备和对应的设备文件名
# ioscan -fun disk 列出所有的磁盘设备和设备文件名
# ioscan -funC tape 列出所有的磁带设备和磁带设备文件
虽然ls -l命令可以列出你的系统中的设备文件。但是它没有指明那一个设备文件对应那一个设备。
ioscan -fun命令提供了一种方便的机制来找到设备文件对应系统中的硬件的路径。在每一个硬件路径下,ioscan -fun列出了与每一个硬件路径相关联的设备文件。由于一些设备有多个存取选项,ioscan可以列出一个设备对应的多个设备文件。
例子:
#ioscan -fun 列出所有的设备和设备关联的设备文件名
# ioscan -funC disk 仅列出磁盘类的设备和关联的设备文件名
#ioscan -funC tape 仅列出磁带设备和关联的设备文件名
#ioscan -funH 2/0/1.6.0 仅列出在2/0/1.6.0位置的设备的设备文件名
使用lssf列出设备文件
列出设备文件的特征
语法:
/usr/sbin/lssf path [pah -]
例子:
# lssf /dev/rdsk/clt6d0
disc3 card instance 1 scsi target 6 scsi LUN 0
section 0 at address 52.6.0 /dev/rdsk/clt6d0
# lssf /dev/rmt/0mn
tape2 card instance 1 SCSI target 0 SCSI LUN at@t no
rewind best density available at address 52.0.0 /dev/rmt/omn
许多设备有多个相关联的设备文件。例如,上例中的磁带设备有八个设备文件。这是因为许多设备可以使用不同的存取选项来存取。每一个设备文件代表一个存取选项。
ioscan列出每一个设备的设备文件,但是不指明设备文件对应那一个设备。lssf命令可以选择用来判断每一个设备文件的特征。lssf 告诉你:
这个设备文件使用的哪一个驱动程序
设备的硬件地址信息
任何设备文件使用的设备存取选项。
3./dev目录的布局
这一部分会介绍系统对一个设备文件取名的命名规则。一个容易理解的命令规则会让你更容易地选择和使用你系统中的设备文件。
在多数UNIX系统中,所有的设备文件都是存在于/dev目录下的。一些设备文件事直接在/dev目录下,而另外一些被组织在/dev下的子目录下。一下是一些重要的设备文件目录的列表
/dev 包含所有的终端,moderm,lan和打印机的设备文件。
/dev/dsk 包含所有的块磁盘设备文件
/dev/rdsk 包含有所有的裸磁盘设备文件
/dev/rmt 包含有所有的磁带设备文件
设备文件命名规则
默认的情况。操作系统给一个设备文件取名的时候是依据一个标准的命名原则。虽然你可以任意对一个设备文件取名。但是使用一个标准的命名规则会使用定位你的设备文件十分容易。
界面卡号
内核自动对系统中的每个设备和界面卡赋予一个号码。这个号码在ioscan -f输出的“I"这个字段显示。
磁盘,磁带或者CD ROM的设备文件名中的"C"指明这个设备连接的界面卡的数字。ioscan命令显出的所有的磁盘都有一个相同的以”C0"开头的设备文件,这是因为SCSI卡的号码为"0"。
注意每一个设备文件都有一个号码,这个号码只是操作系统专用的一个号码,并不被用来对应设备文件名。
ioscan –fun
SCSI目标地址
设备文件的“t#”部分确定这个设备文件相关联设备的SCSI目标地址。这个SCSI目标地址是通过设备自身上的跳线或者DIP开关来设置的。一个SCSI设备的硬件路径的倒数第二个字符就是这个设备的SCSI目标地址。例如,在上例的ioscan输出中,在8/12.3.0的磁盘的SCSI地址为“3”。8/12.6.0这块磁盘的SCSI目标地址为“6”。
SCSI逻辑单元号
逻辑单元号(LUN)能够被用来识别一个磁带库的机器手,或者是一个磁盘阵列的一个逻辑单元。对大多数的SCSI设备来说,LUN号都是“0”。每一个SCSI设备的LUN号出现在设备硬件路径的最后一个小数点后。
设备存取选项
设备文件名的最后一部分是这个设备文件的存取选项。磁带机设备文件名可能有多个选项。设备和设备的选项是不同的。
磁盘设备文件名
每一个磁盘和CD-ROM都有两个设备文件:
一个块设备文件在/dev/dsk下面
一个字符设备文件在/dev/rdsk下面
磁带设备文件名
磁带设备文件在/dev/rmt目录下,遵循c#t#d#[选项]的命名规则。同磁盘和CD-ROM不同,磁带驱动器通常都支持多个选项。
4.如何创建一个设备文件
自动配置
insf
mksf
mknod
大多数情况,你不需要创建设备文件。当第一次安装操作系统的时候。insf在进行硬件探测的时候会自动创建所有发现的设备的设备文件。每一次系统重启动,insf会创建新连接到系统的设备的设备文件。
在一一些特殊的情况下,你会需要手工创建或是修改设备文件。
自动配置
什么是自动配置
在系统启动的时候,内核会执行一系列系统初始化的工作,包括探测所有的安装在系统中的硬件。在进行硬件探测的时候,内核会确认所有的设备-总线,适配器,设备适配器-这些能够被自动配置的设备。内核绑定一个合适的驱动程序给每一个检测到的设备。
在完成系统初始化后,内核会激活init命令。init进程回读取/etc/inittab文件来激活几个系统启动的命令,包括/sbin/ioinitrc。
第一步,initrc会读取/etc/ioconfig文件的内容,然后传送设备映射信息道内核的数据结构中,io_tree。下一步,ioinit执行insf。insf会为新的设备创建设备文件。它同样会更新/etc/ioconfig文件和内核树。
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=<"tty"组的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 是 <字母 X>-<数字 0>-<字母 R>
推荐的链接
推荐在所有的系统上都存在这些连接:
链接 目标 链接类型 简要说明
/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? 就没有存在的必要了
相关推荐
字符设备在文件系统中表现为特殊的文件,它们有自己的i节点,文件类型标记表明它们是字符设备文件。这些设备文件可以像普通文件一样被打开、关闭、读取和写入。字符设备驱动主要负责以下三个方面的工作: 1. 定义`...
该文件"大型转载机变位焊接机.STEP"包含了整个设备的三维几何模型,用户可以通过专业的CAD软件如SolidWorks、CATIA或AutoCAD等打开,查看并分析设备的每一个零部件、装配关系以及整体结构。这些模型可以用来进行尺寸...
标题中的“大型转载机变位焊接机.rar”表明这是一个关于重型工业设备的文件,主要涉及的是转载机的变位焊接机。在焊接过程中,变位焊接机是一种常用于提高工作效率和焊接质量的设备,它能够调整工件的位置,使得焊工...
从给定文件信息中提取的知识点主要集中在煤矿大采高工作面的转载设备配套设计与应用,特别是关于带式输送机的设计与制造。具体知识点包括以下几个方面: 1. 成庄煤矿大采高工作面配套:文件中提到了成庄煤矿作为一...
【描述】:“AspC#用友华表V51制作的web自定义报表系统(转载)”揭示了在这一过程中可能使用到的一种特定工具。Asp.NET是微软开发的一个用于构建Web应用程序的框架,而C#是一种广泛使用的面向对象的编程语言。用友...
根据给定的文件信息,可以提取以下相关知识点: 1. 综采工作面开机率提升:在煤炭开采领域,综采工作面的开机率是衡量生产效率的重要指标。通过设计安装自移装置及改进集中开关架,可以有效提高综采工作面的开机率...
在工作面安装工程量章节中,文中列出了具体要安装的设备清单,包括转载机、破碎机、刮板输送机、采煤机、照明设备、液压泵等,并详细说明了每一种设备的型号和数量。这些信息对于制定工程计划、准备相应设备及材料、...
标题"A46 大型转载机变位焊接机.rar"暗示了这是一个关于重型机械设备的专题,特别是涉及到焊接工艺和转载机的设计。这个压缩包可能包含了该设备的三维模型数据,以便于设计、模拟或者维修过程中的参考。描述的简洁性...
在PC上,需要打开BlueSoleil界面,搜索蓝牙设备并完成配对,然后在BlueSoleil界面中点击“我的服务”—“属性”,确保“启用DHCP服务”的钩钩已被选上。 在PPC上,需要设置蓝牙个人局域网连接,点击“开始”—...
这个压缩包文件中的文档将为读者提供一个全面的视角,了解如何通过创新的卷帘式设计来提升转载机入料口的安全性,同时可能还包括了设计的细节、操作指南和技术参数,对于行业内的工程师、安全管理人员以及设备采购者...
标题中的“Arduino_CNC_Code_Firmware.ino”表明这是一个基于Arduino的CNC(计算机数字控制)设备的固件代码文件。Arduino是一种开源电子平台,常用于制作DIY项目,包括小型自动化机械,如写字机。"arduinocnc转载...
在这个特定的压缩包文件中,“接触网供电变压器整体转载装置”是电子政务领域的一个具体应用,涉及到电力系统与交通基础设施的结合。 接触网供电变压器是电气化铁路或城市轨道交通系统中的关键设备。它主要用于将...
"行业分类-设备装置-用于涂布吸烟制品包装纸的组合物.zip"和"行业分类-设备装置-用于铁芯分解自动装配机中的旋转转载支撑装置.zip"两个文件,分别涉及到烟草制品包装和电机制造过程中的关键设备。 首先,我们关注涂...
1. **综采面设备**:综合机械化采煤是指利用大型机械设备进行煤炭开采的一种现代化方法,包括液压支架、采煤机、刮板输送机、转载机、破碎机和带式输送机等主要设备。这些设备协同工作,实现煤炭的连续、高效开采。 ...
"系统注册表文件(转载)"可能是指一篇关于注册表操作或修复的文章,可能源自网络,被分享到www.pigkrtv.com这个网站。虽然这个网址看起来像是一个观看韩剧的平台,但这里的上下文可能是指该网站上的一篇技术文章,...
在生成ucore.img之前,需要使用dd设备级转换与拷贝工具生成一个内容都为0的磁盘文件ucore.img。然后,使用dd设备级转换与拷贝工具把bootblock覆盖到ucore.img的前512个字节空间中,使ucore.img成为一个可启动的硬盘...
以下是根据给定文件中的内容,整理出的机电设备检修安全技术的主要知识点: 1. **人员资质与安全规程**:所有工种必须经过专业培训并通过考试,持证上岗。必须严格遵守《煤矿安全技术操作规程》及矿上的相关规定。 ...
标题中的“Gerber CNC arduinocnc转载 cncarduino cnc ArduinoCNC”涉及到的是一个基于Arduino的CNC(计算机数字控制)项目,其中Gerber文件是电子制造中的标准格式,用于描述电路板的二维轮廓和层信息。这个项目...
《煤矿机电设备检修技术规范》是一份详细指导煤矿机电设备维护和检修的重要文件,旨在确保煤矿机电设备的安全、高效运行,防止事故的发生,延长设备寿命。该规范涵盖了多个方面,包括机械通用部分、电气通用部分、...