Ubuntu USB设备端口号绑定
Ubuntu USB設備端口號綁定
- 1. 需求和來源
- 2. 查看端口信息
- 3. 規則配置
- 4. 單端口情況
- 5. 多端口情況
- 6. 相同ID情況
1. 需求和來源
ROS機器人開發過程中,需要通過USB口連接多個設備,如:下層執行器,雷達等
 而Linux是按照插入順序對設備進行編號的,例如ttyUSB0, ttyUSB1或者 ttyACM0, ttyACM1等等
 這樣的話,每次重新開機的時候容易出現設備不對應編號的情況
 這就無法在代碼中固定設備的端口號
 因此需要將設備的端口號固定
2. 查看端口信息
接下來以兩塊正點原子阿波羅開發板和一個RPLIDAR-A1激光雷達在 Ubuntu 16.04 環境下為例:
先不接設備,查看端口信息:
$ lsusb
 然后接上一塊正點原子阿波羅開發板,再查看端口信息:
 可以查看到新增加的正點原子阿波羅開發板設備端口
ID 1a86:7523 表示USB設備的ID
 這個ID由芯片制造商設置,可以唯一表示該設備
- 1a86 usb_device_descriptor.idVendor
- 7523 usb_device_descriptor.idProduct
3. 規則配置
在/etc/udev/rules.d/下創建任意名稱的規則配置文件,如:usb.rules并進行編輯
$ cd /etc/udev/rules.d/ $ sudo touch usb.rules $ sudo nano usb.rules
 編輯內容如下:
內容中匹配sys中內核名為ttyUSB*的設備
 依據生產商編號idVendor和產品號idProduct匹配屬性
 設定讀寫權限為0777
 符號鏈接名為alientek_apollo
重新配置生效規則:
$ sudo /etc/init.d/udev restart4. 單端口情況
現在,拔插設備,再查看映射結果:
$ ls -l /dev |grep ttyUSB
 現在訪問/dev/alientek_apollo就是訪問該設備了
利用Python進行簡單的測試:
 
5. 多端口情況
現在先拔出正點原子阿波羅開發板,插入RPLIDAR-A1激光雷達,查看端口信息:
$ lsusb
 可以查看到新增加的RPLIDAR-A1激光雷達設備端口 ID 10c4:ea60
 再查看端口:
 現在的ttyUSB0為RPLIDAR-A1激光雷達設備端口,而不是剛剛拔出的正點原子阿波羅開發板
 如果在相關的端口配置代碼中以ttyUSB0為端口名稱,那這樣搞混設備就炸裂了
那么對規則/etc/udev/rules.d/usb.rules 再次配置,增加以下內容:
KERNEL=="ttyUSB*",ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE:="0777", SYMLINK+="rplidar"重新配置生效規則:
$ sudo /etc/init.d/udev restart現在,拔插設備,再查看映射結果:
$ ls -l /dev |grep ttyUSB
 現在訪問/dev/rplidar就是訪問RPLIDAR-A1激光雷達設備了
利用Python進行簡單的測試:
 
 接下來,利用Python同時配置這兩個端口:
 
 可以看到,正點原子阿波羅開發板的設備端口應為連接而配置錯誤
 那么現在插上剛剛的正點原子阿波羅開發板
 再配置這兩個端口:
 
 這樣的配置就避免了設備不對應編號的情況,且在代碼中以ser0,ser1區分兩個設備
6. 相同ID情況
但需要注意的是:
 現在的規則,只適用于某個設備插上之后,其ID是唯一的,與其他設備不同
那么在相同ID情況下,如兩塊正點原子阿波羅開發板
 
 這樣的情況,以上的規則也無法避免設備不對應編號的情況
莫慌,查詢端口號:
ls -l /sys/class/tty
 注意到tyyUSB的前一位不相同,3-2:1.0 與 3-3.1:1.0
 那么對規則/etc/udev/rules.d/usb.rules 再次配置:
重新配置生效規則:
$ sudo /etc/init.d/udev restart現在,拔插設備,再查看映射結果:
$ ls -l /dev |grep ttyUSB謝謝!
總結
以上是生活随笔為你收集整理的Ubuntu USB设备端口号绑定的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Linux下的聊天软件
- 下一篇: C#的菜鸟
