内核管理设备(顺序阅读二)

一、设备的概括

(一)

1、设备就是文件

发人员操作设备就像操作文件。普通用户也可以操作设备。如,Unix标准命令(如cat)可以访问设备。然而件接口对文所能执行的操作是有限制的。

2、设备的某一种分类

块设备(b)1、:程序从块设备中按固定的块大小读取数据。2、进程能够通过内核访问磁盘上的任意区块。因为磁盘的容量是固定的,索引起来也很方便。
字符设备(c)1、:字符设备处理流数据,只能对字符设备读取和写入字符数据。字符设备没有固定容量,2、当对字符设备进行读写时,内核对相应的设备进行读写操作。
管道设备(p):命名管道设备和字符设备类似,不同的是输入输出端不是内核驱动程序,而是另一个进程。
套接字设备(s):套接字设备是跨进程通信经常用到的特殊接口,它们经常存放在/dev目录之外


(二)/dev与/sys

1、/dev目录:

1)它为用户进程与使用内核支持的设备进行引用。问题1,但是它简单,2,内核根据其找到设备的顺序为设备文件命名,所以系统每次重新启动,设备文件名有可能不同。

2)此目录中文件是供用户进程使用设备,用户可以通过此目录了解它们包含和代表的内容。

2、sysfs:

1)sysfs界面根据硬件属性统一显示设备信息。Linux内核通过一个文件目录系统提供sysfs界面,

2)/sys/devices目录:此目录中的文件是用来查看设备信息和管理设备用的。文件和子目录一般都是供程序而不是用户访问的,

3)如/dev/sda代表的SATA硬盘在sysfs中路径可能是:/sys/devices/pci0000:00/0000:001f.2/host0/target0:0:0/0:0:0:0/block/sda


$ ls -l /sys/block                                        //可以显示指向sysfs的实际路径
$ udevadm info --query=all  --name=/dev/sda               //在/dev目录中查看设备文件的sysfs路径:使用udevadm命令查看路径和其他属性

(三)创建设备文件

1、不需要自己创建设备文件,由devtmpfs和udev来完成的,了解过程,mknod命令用来创建设备

#mknod /dev/sda1 b 8 2
mknod命令来创建临时的命名管道很方便,也可以用于系统恢复的时候创建丢失的设备文件

2、udev和devmpfs

1)udevd:系统内核在检测到新设备的时候(如发现一个USB存储器),会向用户进程发送消息,称为udevd。

udevd守护进程工作:

A、内核通过一个内部网络链接向udevd发送一个通知事件(uevent)

B、udevd加载uevent中的所有属性信息,如udevd获得了sysfs的设备路径和一些属性信息。

C、udevd执行规则解析(规则文件位于/lib/udev/rules.d和/etc/udev/rules.d目录中),决定执行哪些操作和增加哪些属性信息。

*undevam程序时udevd的管理工具,可以重新加载udevd规则,触发消息,搜索和浏览系统设备以及监控udevd从内核接受的消息。

$ udevadm info --query=all  --name=/dev/sda     //查看设备(如/dev/sda)的udev属性和规则

$ udevadm monitor                               //监控uevent

2)devmpfs:内核根据需要创建设备文件,并且在新设备可用时通知udevd。udevd在收到通知后并不创建设备文件,进行设备初始化以及发送消息通知,还在/dev目录中为设备创建符号链接文件。


*注意:

dd命令和设备:从输入文件和输入流读取数据,然后写入输出文件和输出流,主要用在块设备和字符设备。

$dd if=/dev/zero of=new_file bs=1024 count=1
if =file :代表输入文件,默认是标准输入。 of = file :代表输出文件,默认是标准输出。

bs=size : 代表数据块大小。ibs = size,obs = size :代表输入和输出块大小,相同用bs,不同用这个。

count = num :代表复制块的总数。在处理大文件或者无限数据流(/dev/zero)的时候,需要在某个地方停止dd 复制。skip = num : 代表跳过前面的num个块,不将它们复制到输出



二、设备名:

(一)硬盘( /dev/sd* ):

1、sd代表SCSI disk。

2、USB存储设备使用SCSI协议进行通信。SATA硬盘在Linux内核仍然在某些场合使用SCSI命令和它们通信。


(二)CD和DVD(/dev/sr*):

1、大多数光驱识别为SCSI设备。如果光驱使用的是老接口的话,可能会被识别为PATA设备。

2、/dev/sr*设备是只读的,它们只用于从光盘上读取数据。/dev/sg0(g代表generic)设备是可读写。


(三)PATA硬盘(/dev/hd*)

1、这是基于主从设备接口0和1固定设置方式

2、SATA设备有时候也会被这样识别:SATA设备在兼容模式中运行,会造成性能损失。检查BIOS设置,能否将SATA控制器切换到它原有的模式。


(四)终端设备(/dev/tty/*、/dev/pts/*和/dev/tty)
1、终端设备负责在用户进程输入输出设备之间传送字符,通常是在终端显示屏上显示文字。
2、伪终端设备模拟终端设备的功能,由内核为程序提供I/O接口。如,shell终端。

3、常见的两个终端设备是:/dev/tty1(第一虚拟控制台)   /dev/pts/0(第一虚拟终端)  

/dev/pts目录中有一个专门的文件系统  /dev/tty代表当前进程正在使用的终端设备,虽然不是每个进程都连接到一个终端设备。


(五)串行端口(/dev/ttyS*)
1、Windows 上的COM1端口在Linux中表示为/dev/ttyS0,COM2表示为/dev/ttyS1。

2、可插拔USB串行适配器在USB和ACM模式下分别为:/dev/ttyUSB0、/dev/ttyACM0、/dev/ttyUSB1、/dev/ttyACM1等。

并行端口(/dev/lp0 和 /dev/lp1)

单向并行端口设备(被USB广泛取代的一种接口类型):/dev/lp0 和 /dev/lp1,分别代表Windows中的LPT1和LPT2。双向并行端口:/dev/parport0和/dev/parport1。


(六)音频设备(/dev/snd/* 、/dev/dsp、/dev/audio和其他)

Linux系统有两组音频设备,分别是高级Linux声音架构(ALSA)/dev/snd和开放声音系统/dev/dsp


三、




猜你喜欢

转载自blog.csdn.net/qq_27397357/article/details/53256495
今日推荐