udev中的设备属性和设备属性有什么区别?

udev中的设备属性和设备属性有什么区别?

对于udev设备条目,“属性”和“属性”之间有什么技术区别?它们通常是如何创建(生成?)和使用的?哪一个是更好的事实来源?

我在 Raspberrypi Python 应用程序的上下文中询问,该应用程序应该检测任何热插拔的串行端口适配器并向用户显示“相关”设备信息(无论是什么),以使他们能够识别自己的设备。特别是,我使用图书馆pyudev与 接口libudev,我的计划是从子系统中搜索tty由子系统设备提供的设备usb-serial。我查看了我周围的一些测试设备的属性和属性,看看它们提供了什么值以及在哪里提供。到目前为止,它们的共同点是有一个与适配器相关的subsystem: tty->( subsystem: usb-serial->) subsystem: usb, device_type: usb_interface->subsystem: usb, device_type: usb_device设备祖先链(位于 USB 集线器下方),并且供应商、型号和序列号等值在各种属性中重复。以及四个设备(有时是三个,ACM*tty设备没有usb-serial)。那么我应该访问哪一个呢?这些设备附带的属性/特性是否有任何(书面)约定,我在哪里可以找到它?

我读过(或者至少浏览过)各种各样的 文档 页面,但它们主要描述如何编写自己的 udev 规则,这不是我所追求的。我从手册中了解到udev[1],[2])ATTR用于存储在设备的 sysfs 属性中的值,并ENV用于“设备属性”,但两者都可以匹配并且也可以写入。我想有一些默认规则将值从父设备继承到子设备,但是属性和属性都发生这种情况吗?

这个答案说“如果两者都ENV包含ATTR相同的信息 - 您可以使用其中任何一个,没有任何区别。”,这并没有让我变得更明智。

答案1

属性由 udev 规则设置,并且可以由其他规则修改。

udev 从 sysfs 节点读取属性。为 udev 规则中的属性分配一个值会导致将该值写入 sysfs 节点并影响设备行为。

您可以将属性视为简单变量。但是属性有 getter 和 setter,您可以考虑读取属性,例如 as$(cat /sys/devpath/name)并将值赋给属性 asecho value > /sys/devpath/name

相关内容