对于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