Linux的设备管理,主设备号和次设备号

http://blog.tianya.cn/blogger/post_show.asp?BlogID=2564939&PostID=21296368

Linux的设备管理是和文件系统紧密结合的,各种设备都以文件的形式存放在/dev目录下,称为设备文件。应用程序可以打开、关闭和读写这些设备文件, 完成对设备的操作,就像操作普通的数据文件一样。为了管理这些设备,系统为设备编了号,每个设备号又分为主设备号和次设备号。主设备号用来区分不同种类的 设备,而次设备号用来区分同一类型的多个设备。对于常用设备,Linux有约定俗成的编号,如硬盘的主设备号是3。
   Linux为所有的设备文件都提供了统一的操作函数接口,方法是使用数据结构struct file_operations。这个数据结构中包括许多操作函数的指针,如open()、close()、read()和write()等,但由于外设 的种类较多,操作方式各不相同。Struct file_operations结构体中的成员为一系列的接口函数,如用于读/写的read/write函数和用于控制的ioctl等。打开一个文件就是 调用这个文件file_operations中的open操作。不同类型的文件有不同的file_operations成员函数,如普通的磁盘数据文件, 接口函数完成磁盘数据块读写操作;而对于各种设备文件,则最终调用各自驱动程序中的I/O函数进行具体设备的操作。这样,应用程序根本不必考虑操作的是设 备还是普通文件,可一律当作文件处理,具有非常清晰统一的I/O接口。所以file_operations是文件层次的I/O接口。
  设备以文件的形式出现在目录 /dev 中。它们可读、可写,如果你有权限这么做的话。文件列表能够揭示设备的一些重要细节:ls –l /dev/ttys3
  
  我的系统给出如下的输出:crwxr-xr-x 1 root tty 4, 67 Mar 13 22:59 ttyS3
  
  最左边的“c”表明这是一个字符设备。如果是“b”则意味着“块设备”,“p”=先入先出设备(FIFO),“u”=非缓冲字符设备,“d”=目 录,“l”=符号链接。数字“4,67”的意思是主设备为4,次设备好为67。为了使你系统中所有用户能使用某些设备,你需要设置正确的权限。
  
  例如:
  
  ls –l /dev/usb/scanner0
  chmod 666 /dev/usb/scanner0
  
  这里有一个常见设备的清单:
  
  /dev/ttyS0 – 第一个串行口。鼠标通常接在这里。
  /dev/ttyS1 – 第二个串行口。你的调制解调器很可能接在这里。
  /dev/ttyS2 和 /dev/ttyS3 是第三和第四个串行口(一般不存在,但你的内置调制解调器可以被设置成使用其中之一)。
  /dev/modem – 串口调制解调器。通常是一个指向 /dev/ttyS1、/dev/ttyS2 或 /dev/ttyS3 的符号链接,具体取决于你的调制解调器接在那个串行端口。
  /dev/mouse – 鼠标。通常是一个指向 /dev/ttyS0 或相似设备(见上)的符号链接,具体取决于你的鼠标接在哪个串行端口。
  /dev/lp0 – 接在第一个并行口的打印机。通常你的打印机接在这里。
  /dev/lp1 – 接在第二个并行口的打印机(一般不存在)。
  /dev/fd0 – 第一个软盘驱动器(一般都有)。
  /dev/fd0H1440 – 第一个软盘驱动器的高密度模式驱动程序。一般情况下,这个驱动程序(或其他有相似名字的设备驱动程序)在以特定密度格式化一张软盘的时候被调用。 Slackware 还有支持将一张3.5英寸软盘格式化为最大1.7MB的驱动程序。默认情况下,RedHat 和 Mandrake 没有这些驱动程序。
  /dev/fd1 – 第二个软盘驱动器。
  /dev/hda – 第一个 IDE 硬盘(整个硬盘)。大多数 IBM 兼容 PC 的硬盘是 IDE 设备。
  /dev/hdb – 第二个 IDE 硬盘(整个硬盘)。很多计算机中,IDE 光驱接在这里。
  /dev/hdc – 第三个 IDE 硬盘(整个硬盘)。很多计算机中,IDE 光驱接在这里。
  /dev/cdrom – 指向相应设备的链接,通常是 /dev/hdc 或 /dev/hdb(CDROM)或/dev/scd0(CD-R/RW)。
  /dev/hda1 – 第一个 IDE 硬盘的第一个分区。/dev/hda2 时第一个 IDE 硬盘的第二个分区。不难猜测,/dev/hdd8 将会是第四个IDE硬盘的第八分区。
  /dev/tty1 – 第一个字符终端。/dev/tty2 时第二个字符终端,以此类推。
  /dev/dsp – 数字音频,例如声卡。“dsp”是“digital signal processing(数字信号处理)”的缩写。
  /dev/sndstat – 用 cat /dev/sndstat 来更多地了解你的声卡状态。
  /dev/null – 当你不想要输出的时候就送到这里。
  /dev/random – 用来读伪随机数。用 cat /dev/random 来在屏幕上显示一对乱七八糟的字符。还有一个 /dev/urandom 设备用来生成低质量的随机数序列。
  /dev/sda – 第一个 SCSI 硬盘(整个硬盘)。在一台家用计算机中,不太可能有 SCSI 设备(昂贵)。
  /dev/sdb – 第二个 SCSI 硬盘(“sdc”是第三个 SCSI 硬盘,以此类推。一个系统中可以有多个 SCSI 硬盘)。
  /dev/sda1 – 第一个 SCSI 硬盘的第一个分区。
  /dev/sr0 – 第一个 SCSI 光驱(有时叫做/dev/scd0)。如果你有一个 ATAPI CD Writer,也可能在这里。
  /dev/sr1 – 第二个 SCSI 光驱(有时叫做 /dev/scd1)。(/dev/sr2 是第三个 SCSI 光驱,以此类推。系统中可以有多个 SCSI 光驱)
  /dev/usb/scanner0 – 一个 usb 扫描仪。
  试用 less /usr/src/linux/Documentation/usb/scanner.txt 了解如何从头开始配置扫描仪。欲了解更多:
  
  less /usr/src/linux/Documentation/devices.txt
  man MAKEDEV
  
  象 /usr/src/linux/Documentation/devices.txt 解释的那样,我可能需要创建一些指向设备文件本身的符号链接来配置我的系统。这只是一个简单的实例,并不意味着通用的建议。当然,如果这些链接存在,它们应该有以下的:
  
  /dev/mouse 当前鼠标端口***
  /dev/tape 当前磁带设备
  /dev/cdrom 当前光驱设备***
  /dev/cdwriter 当前 CD-writer 设备(但是我的 RedHat 是 /dev/cdrecorder)
  /dev/scanner 当前扫描仪设备
  /dev/modem 当前拨出(调制解调器)端口
  /dev/root 当前 root 文件系统
  /dev/swap 当前 swap 设备
  *** 表示我的 Marndrake 系统中确实存在的符号链接。例如,如果鼠标有什么问题,我会做下面的事情(以 root):
  
  ls -l /dev/mouse (检查鼠标设备是否存在且指向哪里)
  ln -s /dev/ttyS0 /dev/mouse (创建一个符号链接 /dev/mouse 指向第一个串行端口)
  
  对于 SCSI(及ATAPI)设备,/dev/tape 和 /dev/cdrom 应该指向“熟”设备(/dev/st* 和 /dev/sr* 相应地),而 /dev/cdwriter 和 /dev/scanner 应该指向相应的普通 SCSI 设备(/dev/sg*)。非临时套接字和管道可能存在于 /dev。常见的有:
  
  /dev/printer socket lpd local socket
  /dev/log socket syslog local socket
  /dev/gpmdata socket gpm mouse multiplexer

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值