Linux

如何以靜態名稱綁定 USB 設備?

  • February 10, 2022

我有一個 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)。由於我從未找到解釋所有來龍去脈的單一文件,因此我編寫了自己的文件,可以在此處找到。這就是歸結為。

  1. 找出 ttyUSB 上的內容:
dmesg | grep ttyUSB  
  1. 列出設備的所有屬性:
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   
  1. 然後只是為了好玩:
udevadm test -a -p  $(udevadm info -q path -n /dev/your_device_name)

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