/ dev和/ sys / class之间的区别?


Answers:


26

其中的文件/dev是UDEV在运行时创建的实际设备文件。该目录/sys/class由内核在运行时导出,通过公开硬件的层次结构sysfs

来自libudev和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"
...

不确定我是否正确理解您。因此,请进行一些澄清以确保。您是否决定通过在/ dev或/ sys中创建条目来与外部设备(例如,通过i2c或mipi)进行交互,完全是基于个人喜好?如果不是,在什么情况下/为什么要选择前者而不是后者(和反之亦然)?
LandonZeKepitelOfGreytBritn
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.