- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
目标:我正在尝试将 4 个 RFID 读取器连接到 Pi,并且需要区分每个读取器的端口。
我做了什么:我输入lsusb
进入终端,只插入一个读卡器。它返回:
Bus 001 Device 004: ID 0c27:232a RFIDeas, Inc
这是我的读者。所以我的供应商 ID 应该是 0c27
我的产品 ID 应该是 232a
现在我需要序列号,因为我的所有读者都显示相同的供应商和产品 ID。
我的设备位于端口 ttyACM0
,因此在终端中我搜索序列属性并通过输入以下内容来验证我的产品 ID 和供应商 ID:
udevadm info --name=ttyACM0 --attribute-walk | grep -i "serial" -e "product" -e "vendor"
这将返回:
ATTRS{idProduct}=="232a"
ATTRS{idVendor}=="0c27"
ATTRS{product}=="USB Serial"
ATTRS{idProduct}=="9514"
ATTRS{idVendor}=="0424"
ATTRS{idProduct}=="0002"
ATTRS{idVendor}=="1d6b"
ATTRS{product}=="DWC OTG Controller"
ATTRS{serial}=="3f980000.usb"
问题:返回 3 个产品 ID 和 3 个供应商 ID。而只有一个序列号返回。
问题:
当仅连接一台设备时,为什么会返回 3 个产品 ID 和 3 个供应商 ID?
我应该在 udev 规则中使用哪些来创建持久设备名称?
如果我遗漏了某些内容,请告诉我,以便我更新问题。
编辑:我已使用首先提到的产品 ID 和供应商 ID 成功创建了 udev 规则:
SUBSYSTEM=="tty", ATTRS{idVendor}=="0c27", ATTRS{idProduct}=="232a", SYMLINK+="reader1"
这会创建一个有效的 udev 规则,但是当我添加序列号 # ATTRS{serial}=="3f980000.usb"
时它停止工作。我需要一个唯一的标识符。
最佳答案
虽然从您的角度来看,您只是将一个设备插入计算机,但 Linux 内核对正在发生的情况有更复杂的看法。内核跟踪设备的层次结构,每个设备都有自己的属性、驱动程序和子设备。层次结构的根通常是代表 CPU 的某种根设备,然后连接(可能间接)到 USB Controller 设备,USB Controller 设备连接到“根集线器”,然后连接到您插入的物理 USB 设备,而该物理 USB 设备又可能具有用于 USB 设备公开的每个功能/接口(interface)的子设备。
您可以运行man udevadm
详细了解该命令的作用。它说:
-a, --attribute-walk
Print all sysfs properties of the specified device that can be used
in udev rules to match the specified device. It prints all devices
along the chain, up to the root of sysfs that can be used in udev
rules.
因此存在这样的设备链,从 ttyACM0(USB 设备的一个函数)开始,向上到达物理 USB 设备,然后是根集线器,然后是 USB Controller ,直到到达层次结构的根。 --attribute-walk
选项沿着该链向上走,并打印出沿途每个设备的属性。
您正在将该命令的输出通过管道传输到 grep
所以你没有看到完整的输出,这可能是你感到困惑的原因。该命令的完整输出实际上信息量很大:它打印出一个很好的段落来解释它的作用,并且当它从打印一个设备的属性切换到打印其父设备的属性时,有一些有用的句子可以让情况变得清晰。以下是我在检查 Raspberry Pi 上的 USB 设备时得到的一些输出:
$ udevadm info --name=sda2 --attribute-walk
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/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1:1.0/host0/target0:0:0/0:0:0:0/block/sda/sda2':
KERNEL=="sda2"
SUBSYSTEM=="block"
[snip]
looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1:1.0/host0/target0:0:0/0:0:0:0/block/sda':
KERNELS=="sda"
SUBSYSTEMS=="block"
[snip]
looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1:1.0/host0/target0:0:0':
KERNELS=="target0:0:0"
SUBSYSTEMS=="scsi"
[snip]
looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1:1.0':
KERNELS=="1-1.2.1:1.0"
SUBSYSTEMS=="usb"
[snip]
looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2.1':
KERNELS=="1-1.2.1"
SUBSYSTEMS=="usb"
[snip]
[... and so on, up to the root device]
不幸的是,从你的 udevadm
的输出来看命令,您的 RFID 适配器似乎没有 USB 序列号,因此将其与相同型号的其他设备区分开可能会很棘手。要确认它没有序列号,我建议您运行 lsusb -v -d 0c27:232a | grep iSerial
。如果 iSerial
之后的数字为0,表示没有序列号。
我建议查看 Linux 在 /dev/serial/by-id
中为您创建的符号链接(symbolic link)。 ;也许这些符号链接(symbolic link)的名称中有足够的详细信息,因此您无需创建新的 udev 规则。 (提示:运行 ls -lR /dev/serial/by-id
。)
如果您仍然需要更多帮助来查找或创建稳定的符号链接(symbolic link),我认为您应该插入所有四个 RFID 读取器,然后发布每个命令的完整输出:
ls -lR /dev/serial/by-id
ls /dev/ttyACM*
udevadm info --name=ttyACM0 --attribute-walk
关于linux - 为什么我有多个产品和供应商 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52847664/
我需要按不同类别过滤我网站上的产品。例如,如果您选择“DRINKS”类别,它将向我显示属于该类别的产品。 为了更好地解释自己。 我需要按类别过滤我网站的出版物 [产品],例如,在选择一个类别时说“饮料
我有 orders 集合,其中包含 products 集合。我将一些产品 ID 作为列表传递给该方法。我需要返回与任何匹配的产品列表input 列表中的 id。 我需要像这样使用 foreach 循环
我已经为临时分发进行存档好几个月了,但今天突然我无法这样做,因为“存档”菜单项已被禁用。我没有改变任何东西。我完成了该项目的配置设置,看起来没问题。 我的临时个人资料即将在 14 天后过期。这可能是问
我正在尝试找出产品和产品属性之间的关系。我有一个 product 表和一个 product_attributes 表。产品可以具有多种属性。我需要查询来查找具有一个特定属性和另一个属性之一的所有产品。
我正在使用 MySQL Workbench 创建 EER 图。 实现产品、类别和公司表之间关系的最佳方式是什么? 我正在考虑这种关系,但考虑到我想让公司的客户管理自己的产品/类别,这是最好的方式吗?如
我正在使用 itertools 包,并尝试在具有 900 个值的数组中创建 1、2 和 3 的所有可能组合,然后将其转换为 30 x 30 矩阵。我必须执行此操作的代码在下面并且工作正常。 for d
我有几个关于 Cartridge 启动器的问题: 我的产品不需要评级或发布日期。他们永远不会出售。一些产品是可下载的,因此“num_in_stock”不相关或本质上是无限制的。没有颜色选项,只有尺寸。
在 MySQL 中,存储产品价格(或一般货币)的首选列类型是什么?谷歌知道我经常使用 DECIMAL of FLOAT,但我想知道哪个更好。 我存储的价格范围是 0.01 到 25.00。当然更高的值
在软件开发过程中,尤其是在准备将新功能或修复后的版本上线之前,进行详尽的自测和上线前检查是至关重要的。以下是一个从多个维度综合考量的上线升级检查清单(Checklist),旨在帮助团队确保软件质量、稳
我正在创建一个闪购网站,并且我已经在主页和商店页面上根据日期范围显示产品。但我也想根据其他地方的日期范围显示产品,因此使用简码。 这是我的代码: function testt($meta_query)
可以在 WooCommerce 上批量创建产品吗?我正在使用 wp-cli Product 命令,但似乎我必须一个一个地创建。 'My product 1'), array('title'
我有一个带有数量和价格列的 excel 文件,我用它来为插件 WooCommerce Dynamic Pricing 创建必要的输出的定价规则。 我几乎想通了,但是 WooCommerce 进口商正在
我刚刚继承了一个woocommerce项目,我需要将主页更改为仅显示特定品牌。他们设置了 Product-Data => Attribute => pa_brand。 如果我打印 pa_brand 数
在插件中如何使用 wc_get_products() 获取产品。或者有其他方法可以做到吗? if ( in_array( 'woocommerce/woocommerce.php', apply_fi
我正在做一个无法从公司网络外部访问的内部网,他们希望在 Plone 中显示一些关于文件下载和最常查看的页面的不错的统计数据。 由于网络限制,我无法使用谷歌分析或任何类型的外部服务,那么是否有任何产品可
我正在就以下问题寻求建议: 保留哪些产品 key 属于哪个客户端的列表。例如,如果我的产品 key 为 8456-7894-4567-7894,则应该这样设计,以便将列表写入数据库而不是文件。 如何将
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
尝试将产品搜索栏添加到 Wordpress 管理栏后端,以进行 Woocommerce 产品搜索。它将位于后端管理菜单栏的顶部,这样无论您在后端的哪个位置,都可以搜索 woo 的产品。我很接近但在小绊
这让我抓狂.. 我正在尝试根据特定属性查询和输出 WooCommerce 产品。例如,我设置了一个名为 on 的属性,可能的值为 yes或 no . 我使用以下查询: $args = array(
我正在尝试从 Shopify 商店获取所有产品的 JSON。我一直在向 {STORE URL}/products.json 端点。但这最终只显示了商店提供的部分产品(很多,但不是全部)。当我将参数更改
我是一名优秀的程序员,十分优秀!