Usb

如何在連接時為串列設備提供自定義名稱?

  • January 8, 2016

我正在Odroid XU3(ARM 開發板)上的Ubuntu 14.04下研究ROS 。

我將兩個 USB 設備連接到我的開發板,根據它們連接的時間,它們被辨識為ttyACM0ttyACM1 。

由於這些設備(Arduino 和 PixHawk)具有不同的 PID / VID,我想將它們綁定到某個“自定義名稱”tty,例如ttyController0ttyPosition0

根據這個主題,我們可以根據 PID 和 VID 將設備simlink 到ttyUSB0

我應該如何模擬連結到確定性名稱?/etc/udev/rules.d/99-custom.rulessimlink中的 4 條規則會起作用嗎?

ACTION=="add", ATTRS{idVendor}=="0123", ATTRS{idProduct}=="0001", RUN+="/bin/ln -s /dev/ttyACM0 /dev/ttyController"


ACTION=="remove", ATTRS{idVendor}=="0123", ATTRS{idProduct}=="0001", RUN+="/bin/rm /dev/ttyController"


ACTION=="add", ATTRS{idVendor}=="3210", ATTRS{idProduct}=="0002", RUN+="/bin/ln -s /dev/ttyACM0 /dev/ttyPosition"


ACTION=="remove", ATTRS{idVendor}=="3210", ATTRS{idProduct}=="0002", RUN+="/bin/rm /dev/ttyPosition"

或者我可以使用帶有自定義 PID 和 VID 的 Udev 嗎?

您的配置應該基本上可以工作,但我想提出一些建議:

首先,我認為您想使用ATTR,而不是ATTRS. ATTRS向上搜尋整個設備樹到匹配的(父)設備。這很可能不是您想要的。使用ATTR實際觸發事件的設備必須具有指定的屬性。

其次,由於創建到設備節點的符號連結是一項相當常見的任務,因此有一個專門的聲明來執行此操作,即SYMLINK+="newname". 這樣您就不會依賴“外部”命令。更重要的是,通過使用此指令,您只需要匹配“添加”事件,因為udevd當設備消失時會自動刪除關聯的符號連結。

因此,您的規則應該是

ACTION=="add", ATTR{idVendor}=="0123", ATTR{idProduct}=="0001", SYMLINK+="ttyController"
ACTION=="add", ATTR{idVendor}=="3210", ATTR{idProduct}=="0002", SYMLINK+="ttyPosition"

最後,我建議通過添加進一步的 SUBSYSTEM 約束來縮小匹配範圍,即添加SUBSYSTEM=="usb". 由於設備和供應商 ID 僅(希望)在其範圍內是唯一的,因此忽略子系統匹配可能會導致您的規則與其他設備類(如 PCI 設備)匹配。儘管這不太可能,但它通常被視為 udev 規則中的好樣式:

SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="0123", ATTR{idProduct}=="0001", SYMLINK+="ttyController"
SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="3210", ATTR{idProduct}=="0002", SYMLINK+="ttyPosition"

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