in /dev
和in中的设备表示有什么区别/sys/class
?
是一个比另一个更好的选择吗?有一个提供但另一个不提供的东西吗?
in /dev
和in中的设备表示有什么区别/sys/class
?
是一个比另一个更好的选择吗?有一个提供但另一个不提供的东西吗?
Answers:
其中的文件/dev
是UDEV在运行时创建的实际设备文件。该目录/sys/class
由内核在运行时导出,通过公开硬件的层次结构sysfs
。
摘抄
在Unix和类似Unix的系统上,可以通过/ dev目录中的特殊文件(也称为设备文件或节点)访问硬件设备。这些文件的读取和写入方式与普通文件相同,但是它们不是直接在磁盘上写入和读取数据,而是直接与内核驱动程序进行通信,然后再与硬件进行通信。有许多在线资源更详细地描述了/ dev文件。通常,这些特殊文件是在安装时由发行版使用mknod命令创建的。近年来,Linux系统开始使用udev在运行时管理这些/ dev文件。例如,udev将在检测到设备时创建节点,并在删除设备(包括运行时的热插拔设备)时将其删除。这条路,
另一个摘录
Sysfs中的目录包含设备的层次结构,因为它们已连接到计算机。例如,在我的计算机上,hidraw0设备位于以下位置:
/sys/devices/pci0000:00/0000:00:12.2/usb1/1-5/1-5.4/1-5.4:1.0/0003:04D8:003F.0001/hidraw/hidraw0
根据该路径,该设备将附加到设备1-5的端口号4(连接到USB控制器1(usb1))并连接到USB控制器1(usb1),并从设备的配置1(:1.0从头开始)。 PCI总线。尽管很有趣,但是此目录路径对我们没有多大帮助,因为它取决于硬件与计算机的物理连接方式。
幸运的是,Sysfs还提供了大量符号链接,可轻松访问设备,而不必知道它们连接到哪个PCI和USB端口。在/ sys / class中,每个不同类的设备都有一个目录。
通常,您使用规则/etc/udev/rules.d
来扩充系统。当存在各种硬件时,可以构造规则以运行脚本。
一旦系统启动,您就可以编写脚本来针对/dev
或进行处理/sys
,这实际上取决于个人喜好,但我通常会尝试进行处理/sys
并利用各种工具,例如udevadm
向UDEV查询各种系统资源的位置。
$ udevadm info -a -p $(udevadm info -q path -n /dev/sda) | head -15
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device '/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda':
KERNEL=="sda"
SUBSYSTEM=="block"
DRIVER==""
ATTR{ro}=="0"
ATTR{size}=="976773168"
ATTR{stat}==" 6951659 2950164 183733008 41904530 16928577 18806302 597365181 580435555 0 138442293 622621324"
ATTR{range}=="16"
...