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"