如何以靜態名稱綁定 USB 設備?
我有一個 Arduino,有時會綁定到 ,有時會綁定到
/dev/ttyUSB0
,/dev/ttyUSB1
導致我的腳本失敗。我不想列舉我的設備可能在哪裡的所有可能性,但我寧願將它綁定在某個靜態的地方,例如
/dev/arduino
.我該如何做到這一點?
按照建議,您可以添加一些 udev 規則。我編輯了
/etc/udev/rules.d/10-local.rules
包含:ACTION=="add", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", SYMLINK+="my_uart"
您可以通過執行檢查設備的變數
udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB0)
您可以在http://www.reactivated.net/writing_udev_rules.html上閱讀更深入的指南
上面的規則語法可能適用於某些發行版,但不適用於我的(Raspbian)。由於我從未找到解釋所有來龍去脈的單一文件,因此我編寫了自己的文件,可以在此處找到。這就是歸結為。
- 找出 ttyUSB 上的內容:
dmesg | grep ttyUSB
- 列出設備的所有屬性:
udevadm info --name=/dev/ttyUSBx --attribute-walk
(當然,使用您的設備編號而不是 x)。挑選出一個唯一標識符集,例如 idVendor + idProduct。如果您有多個具有相同 idVendor 和 idProduct 的設備,您可能還需要 SerialNumber。每個設備的序列號應該是唯一的。 3. 創建一個包含以下內容的文件
/etc/udev/rules.d/99-usb-serial.rules
:SUBSYSTEM=="tty", ATTRS{idVendor}=="1234", ATTRS{idProduct}=="5678", SYMLINK+="your_device_name"
假設您不需要序列號,當然還有您在步驟 2 中找到的 idVendor 和 idProduct 的編號。 4. 載入新規則:
sudo udevadm trigger
**2021 年 7 月 6 日編輯:**雖然這在當時(2015 年)的所述發行版、Archlinux 以及其他發行版上執行良好,但如果自動載入失敗,您可能需要先執行此操作。
sudo udevadm control --reload
5. 驗證發生了什麼:ls -l /dev/your_device_name
將顯示符號連結的 ttyUSB 編號。如果是
/dev/ttyUSB1
,則驗證誰擁有它以及它屬於哪個組:ls -l /dev/ttyUSB1
- 然後只是為了好玩:
udevadm test -a -p $(udevadm info -q path -n /dev/your_device_name)