Linux
Linux 如何決定何時重用 USB 次要設備號?
在 Linux 中連接 USB 設備時,核心會為它們分配一個次要設備號(即 0 中的 0
/dev/ttyUSB0
)。似乎如果我有一個設備/dev/ttyUSB0
,當我刪除它並插入一個新的 USB 設備時,新設備將獲得一個不同的設備編號。但是,如果我等待足夠長的時間或添加足夠多的設備,最終將給一個設備號 0。核心如何決定何時重用設備號 0?有關更多上下文:我有大量 USB 設備連接到伺服器,並且我正在使用次要設備編號來跟踪它們。我想檢測何時添加新設備以及何時刪除舊設備。我擔心如果可以為新設備分配與已移除的舊設備相同的設備編號,那麼我將不知道該設備已被替換。
我會回答一半我自己的問題:我找不到任何關於如何重用設備編號的明確文件,但我確實找到了一種方法來為設備分配一個更獨特的編號。
訣竅是使用
udev
’IMPORT
語句來生成一個隨機數,例如這個規則:KERNEL=="ttyUSB*", IMPORT{program}="/bin/bash -c 'echo FOORAND=$RANDOM'", SYMLINK+="my-device-%n-%E{FOORAND}"
將創建指向 ttyUSB 設備的符號連結,例如
/dev/my-device-0-3853
. 添加新設備時,它將獲得一個新的隨機數。核心號 (
%n
) 以及隨機數都包含在內,以確保在任何時候存在的符號連結始終是唯一的。