1. 程式人生 > >ubuntu下繫結串列埠

ubuntu下繫結串列埠

檢視有哪些裝置連線在你的電腦上

lsusb

得到如圖:

檢視usb串列埠上連線的資訊,得到不一樣的資訊

dmesg | grep ttyS*

我使用了一個usb擴充套件器,這邊可以看到,被連線在ttyUSB0上的就是我的usb擴充套件器,我在上面連線了3個外接裝置,都是被連線在ttyUSB0上。

如何繫結裝置到具體的usb串列埠

udev 是通過核心產生裝置名增加別名的方式來達到 不管裝置連線的順序而維持一個統一的裝置名。核心通常會產生自定義的裝置名 如sda1 sdb1等

,但是udev可以通過裝置的其他資訊如匯流排 ,生產商等不同來區分不同的硬體裝置。在/etc的 目錄下。

例如 :ubuntu核心中,產生sda 裝置名,可以通過制定 udev規則,讓udev 除了產生/dev/sda/ 裝置檔案外, 另外建立    一個符號連結叫 /dev/name  ,這樣在ros串列埠處理的程式中,就 可以使用 產生的新的 裝置名。

通過lsusb  命令可以檢視到所有外接usb的介面裝置的描述列表,可以得到id product和id VENDOR的數值,來進行後續的繫結。  ls /dev 可以檢視所有 外接串列埠裝置的名字列表。

首先 ,所有制定的udev 規則最終 會在 /etc/ udev /rule.d 這個資料夾下面 。 

通過晶片的特定碼,來產生軟連結別名

可以一個指令碼如下: 

echo  'KERNEL=="ttyUSB*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE:="0666", GROUP:="dialout",  SYMLINK+="dashgo"' >/etc/udev/rules.d/ch34x.rules

繫結 1a86 7523 的串列埠裝置, 會在/etc/udev/rule.d 下 產生 相應的 規則檔案,ttyUSB產生新的別名即 dashgo。

---

使修改生效

sudo udevadm trigger

察看繫結是否成功

ls -l /dev/

 看看裡面是否存在一個叫做dashgo的硬體

如果有的話,那麼ros中通訊協議的時候硬體名稱就可以寫上dashgo來代替ttyUSB0等等。

如果想要開啟串列埠時不需要root許可權,建立檔案/etc/udev/rules.d/70-ttyusb.rules,寫入:

KERNEL=="ttyUSB[0-9]*",MODE="0666"