设为首页 加入收藏

TOP

Linux工作原理3设备(六)
2023-07-23 13:29:49 】 浏览:102
Tags:Linux 设备
t;disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}"

你可以看到,这条规则要求ENV{ID_SERIAL}被设置,它有一个指令:

SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}"

这个指令告诉udevd为进入的设备添加一个符号链接。所以,现在你知道设备的符号链接是怎么来的了!
你可能想知道如何区分条件表达式和指令。条件表达式用两个等号(==)或砰的一声等号(!=)表示,指令用一个等号(=)、一个加号(+=)或一个冒号等号(:=)表示。

3.5.3 udevadm

udevadm程序是udevd的管理工具。 你可以重新加载udevd规则和触发事件,但udevadm最强大的功能可能是搜索和探索系统设备的能力,以及udevd从内核接收uevent时监控uevent的能力。不过,命令的语法可能有点儿复杂。大多数选项都有长短两种形式,我们在这里使用长的。
让我们从检查一个系统设备开始。回到第3.5.2节中的例子,为了查看所有的udev属性,以及与/dev/sda这样的设备的规则一起生成的属性,运行以下命令:

$ udevadm info --query=all --name=/dev/sda
P: /devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda
N: sda
S: disk/by-id/ata-WDC_WD3200AAJS-22L7A0_WD-WMAV2FU80671
S: disk/by-id/scsi-SATA_WDC_WD3200AAJS-_WD-WMAV2FU80671
S: disk/by-id/wwn-0x50014ee057faef84
S: disk/by-path/pci-0000:00:1f.2-scsi-0:0:0:0
E: DEVLINKS=/dev/disk/by-id/ata-WDC_WD3200AAJS-22L7A0_WD-WMAV2FU80671 /dev/disk/by-id/scsi
-SATA_WDC_WD3200AAJS-_WD-WMAV2FU80671 /dev/disk/by-id/wwn-0x50014ee057faef84 /dev/disk/by
-path/pci-0000:00:1f.2-scsi-0:0:0:0
E: DEVNAME=/dev/sda
E: DEVPATH=/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda
E: DEVTYPE=disk
E: ID_ATA=1
E: ID_ATA_DOWNLOAD_MICROCODE=1
E: ID_ATA_FEATURE_SET_AAM=1
--snip--

每行的前缀表示设备的一个属性或其他特征。在这个例子中,顶部的P:是sysfs设备路径,N:是设备节点(也就是给/dev文件起的名字),S:表示udevd根据其规则放在/dev中的设备节点的符号链接,E:是udevd规则中提取的额外设备信息。(这个例子中的输出远远超过了这里需要展示的内容;自己尝试一下这个命令,感受一下它的作用)。

3.5.4 设备监控

要用udevadm监视uevents,请使用monitor命令:

$ udevadm monitor
KERNEL[658299.569485] add /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2 (usb)
KERNEL[658299.569667] add /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0 (usb)
KERNEL[658299.570614] add /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/host15 
(scsi)
KERNEL[658299.570645] add /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/ 
host15/scsi_host/host15 (scsi_host)
UDEV [658299.622579] add /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2 (usb)
UDEV [658299.623014] add /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0 (usb)
UDEV [658299.623673] add /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/host15 
(scsi)
UDEV [658299.623690] add /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/
host15/scsi_host/host15 (scsi_host)
--snip--

在这个输出中,每条信息都有两份,因为默认行为是同时打印来自内核的传入信息(用KERNEL标记)和来自udevd的处理信息。 要想只看到内核事件,请添加--kernel选项,要想只看到udevd处理事件,请使用--udev。要看到整个传入的uevent,包括3.5.2节中显示的属性,使用--property选项。--udev和--property选项一起显示处理后的uevent。
你还可以按子系统过滤事件。例如,要想只看到与SCSI子系统的变化有关的内核信息,使用这个命令:

$ udevadm monitor --kernel --subsystem-match=scsi

关于udevadm的更多信息,请看udevadm(8)手册页。
udev的内容还有很多。例如,有一个叫做udisksd的守护进程,它监听事件,以便自动连接磁盘,并通知其他进程有新的磁盘可用。

3.6 深入了解: SCSI和Linux内核

在这一节中,我们将看一下Linux内核中的SCSI支持,作为探索Linux内核结构的一部分。你不需要为了使用磁盘而了解这些信息,所以如果你急于使用磁盘,请继续阅读第四章。此外,这里的材料比你到目前为止所看到的更高级,更具有理论性,所以如果你想保持动手能力,你肯定应该跳到下一章。
让我们从一点背景开始。传统的SCSI硬件设置是一个主机适配器通过SCSI总线与一连串的设备相连,如图3-1所示。主机适配器被连接到计算机上。主机适配器和设备都有一个SCSI ID,根据SCSI版本,每条总线可以有8或16个ID。一些管理员可能会用SCSI目标这个词来指代设备和它的SCSI ID,因为在SCSI协议中,会话的一端被称为目标。

图3-1:带有主机适配器和设备的SCSI总线

任何设备都可以通过SCSI命令集以点对点的关系与另一个设备进行通信。计算机没有直接连接到设备链上,所以它必须通过主机适配器才

首页 上一页 3 4 5 6 7 下一页 尾页 6/7/7
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇INFINI Labs 产品更新 | Console .. 下一篇shell 常用命令3

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目