Linux 如何决定何时重用 USB 次要设备编号?

Linux 如何决定何时重用 USB 次要设备编号?

当 USB 设备在 Linux 中连接时,内核会为它们分配一个次设备号(即 中的 0 /dev/ttyUSB0)。似乎如果我有一个设备/dev/ttyUSB0,当我将其移除并插入新的 USB 设备时,新设备将获得一个不同的设备号。但是,如果我等待足够长的时间或添加足够的设备,最终将获得设备编号 0。内核如何决定何时重用设备编号 0?

有关更多上下文:我有大量 USB 设备连接到服务器,并且我使用次设备号来跟踪它们。我想检测何时添加新设备以及何时删除旧设备。我担心如果新设备可以分配与已删除的旧设备相同的设备编号,那么我将不知道该设备已被替换。

答案1

我将半回答我自己的问题:我找不到任何关于如何重用设备编号的明确文档,但我确实找到了一种为设备分配更唯一编号的方法。

诀窍是使用udevIMPORT语句来生成随机数,例如以下规则:

KERNEL=="ttyUSB*", IMPORT{program}="/bin/bash -c 'echo FOORAND=$RANDOM'", SYMLINK+="my-device-%n-%E{FOORAND}"

将创建到 ttyUSB 设备的符号链接,例如/dev/my-device-0-3853.当添加新设备时,它将获得一个新的随机数。

包含内核号 ( %n) 以及随机数,以确保任一时刻存在的符号链接都是总是独特的。

相关内容