Ubuntu

用於為相同的 USB 串列設備分配已知符號連結的 udev 規則

  • May 16, 2021

我有兩個(將來可能還會更多)相同的 USB 串列設備(不幸的是,直到序列號)——它們實際上是 BTC 礦工。目前它們最終以ttyUSBXX 為 0、1 或 2 的位置結束,因為還有另一個不相關的 USB 串列設備(這裡不必擔心)。

我想編寫一個 udev 規則,它將在 中為它們分配可預測的名稱/dev,例如/dev/miner0零是遞增整數。我不在乎它們中的哪一個最終是哪個,但我確實需要它們在一個不會改變的可預測範圍內。

目前我有這個:

SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", SYMLINK+="miner%n"

這非常接近,因為我最終得到了我想要的名字。唯一的問題是,由於礦工和第三台設備有時會以隨機順序出現,我最終可能會得到兩個miner0,miner1miner2,但我永遠不知道哪兩個(無需手動查看)。如果我添加更多非礦工 USB 串列設備(這是可能的),它會加劇問題。

我找到了對%ewhich 的引用看起來就像我想要的那樣,但它似乎不再存在了

我如何給這些設備起可預測的名稱?如果可能的話,我也不希望將它們綁定到它們在 USB 匯流排上的位置。


更多資訊/背景

值得一提的是,我並不在意這些名稱是什麼,只是它們是已知的並且即使/當設備插入不同的 USB 插座時也不會改變。我會簡單地忘記整個 udev 的事情並使用 中的條目/dev/serial/by-id,但是由於它們具有相同的序列號,因此那裡只有一個!

還值得一提的是,這樣做的原因是需要告訴挖礦軟體一個要探測和查找的設備列表。我可以讓它做所有事情(它基本上只是找到ttyUSB*範圍內的所有有效礦工),但這會惹惱非礦工設備。所以我需要提前知道礦工的名字,這樣我就可以將其配置為只使用這些。可悲的是,它不接受萬用字元(所以只是告訴它使用/dev/miner*似乎是不可能的),因此出現了這個問題。

這是未經測試的組合:

IMPORT{program}="/usr/local/sbin/unique-num /run/miner-counter 0 MINER_NUM"為您的礦工添加 udev 規則。

然後你可以使用一個簡單的 shell 腳本,類似於這個經過測試的程序:

#!/bin/sh

if [ $# -ne 3 ]; then
   echo "Usage: $0 data-file initial var-name" >&2
   exit 1
fi

datfile="$1"
lockfile="$1.lck"
initial=$2
key="$3"

(
   flock -x 9
   num=$initial
   if [ -e "$datfile" ]; then
       read -r num < "$datfile"
   fi

   next=`expr $num + 1`;
   echo $next > "$datfile"

   echo "$key=$num"
) 9> "$lockfile"

然後,您可以使用該 udev 環境變數來命名您的礦工。

引用自:https://unix.stackexchange.com/questions/105144