Ubuntu系统 USB设备端口绑定
前言
在Ubuntu中,有時使用多個USB設備時,出現USB端口號混亂;
比如:A設備本來對應?/dev/ttyUSB0,B設備對應?/dev/ttyUSB1;
發現重啟系統后,A設備本來對應?/dev/ttyUSB1,B設備對應?/dev/ttyUSB0,兩個設備的分配的端口號不固定的情況。
Linux是按照插入順序對設備進行編號的;這種不穩定因素,使得編寫驅動時麻煩,于是本文參考了linux社區和博客文章的方法,綁定各個USB設備的端口號。
一、不同串口設備綁定
1.1、查看USB設備端口信息
將串口設備插入USB口,通過lsusb查看端口信息。例如:
接入了兩個新的USB設備,如下圖紅色框中的信息;一個是FT232(ID是0403:6001)、一個是HL-340(ID是1a86:7523);
ID 0403:6001?表示usb設備的ID(這個ID由芯片制造商設置,可以唯一表示該設備)
0403? usb_device_descriptor.idVendor
6001? usb_device_descriptor.idProduct
1.2、創建配置文件
在/etc/udev/rules.d/下創建任意名稱的規則配置文件,如:usb.rules。命令如下
sudo vi /etc/udev/rules.d/usb.rules
?編輯信息:
KERNEL=="ttyUSB*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", MODE:="0777", SYMLINK+="gnss"
KERNEL=="ttyUSB*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE:="0777", SYMLINK+="ultrasound_serial"
匹配sys中內核名為ttyUSB*的設備,屬性匹配依據生產商編號idVendor和產品號idProduct, 設定讀寫權限為0777,;
符號鏈接名為gnss 對應FT232 USB, ultrasound_serial 對應 HL-340串口USB。
1.3、查看綁定情況
idVendor和idProduct由 lsusb? -vvv 命令查看
sudo udevadm control --reload-rules
sudo udevadm trigger
重新拔插兩個串口設備
ls -l /dev |grep ttyUSB
/dev/ultrasound_serial 指向/dev/ttyUSB1;在程序里打開/dev/ultrasound_serial 就可以一直準確的打開指定的串口設備了;可以使用了。
1.4、使用綁定后的USB設備
例如使用ultrasound_serial 設備;打開串口,python代碼:
u_serial ?=?serial.Serial('/dev/ultrasound_serial',?9600)??
直接使用/dev/ultrasound_serial ,相當于使用/dev/ttyUSB1
二、相同串口設備綁定
如果購買了兩個相同的串口設備,比如都是ch341(ID是1a86:7523),用上面的方法就無法區分和綁定了。我們可以通過“KERNELS”的差異來綁定。
2.1 查詢“KERNELS”
udevadm info --attribute-walk --path=/sys/bus/usb-serial/devices/ttyUSB0看到如下信息:(ttyUSB0 的“KERNELS”)
?然后查詢另一個USB設備,比如他的端口是ttyUSB2,?ttyUSB2的“KERNELS”(我這里有三個串口,需要區分ttyUSB0、ttyUSB2 他兩是都是ch341)
udevadm info --attribute-walk --path=/sys/bus/usb-serial/devices/ttyUSB2?
?能看到 ttyUSB0 的“KERNELS”=="1-1:1.0"、 ttyUSB2?的“KERNELS”=="1-2:1.0" 它兩是有區別的。
?2.2、創建配置文件
在/etc/udev/rules.d/下創建任意名稱的規則配置文件,如:usb.rules。命令如下
sudo vi /etc/udev/rules.d/usb.rules
?編輯信息:
KERNEL=="ttyUSB*", KERNELS=="1-1:1.0", MODE:="0777", SYMLINK+="ultrasound_serial1"
KERNEL=="ttyUSB*", KERNELS=="1-2:1.0", MODE:="0777", SYMLINK+="ultrasound_serial2"
匹配sys中內核名為ttyUSB*的設備,根據KERNELS的號的不同進行綁定, 設定讀寫權限為0777,;
符號鏈接名為ultrasound_serial1 對應ttyUSB0, ultrasound_serial2 對應ttyUSB2。
1.3、查看綁定情況
idVendor和idProduct由 lsusb? -vvv 命令查看
sudo udevadm control --reload-rules
sudo udevadm trigger
重新拔插兩個串口設備
ls -l /dev |grep ttyUSB
/dev/ultrasound_serial1 指向/dev/ttyUSB0;在程序里打開/dev/ultrasound_serial1 就可以一直準確的打開指定的串口設備了;可以使用了。
1.4、使用綁定后的USB設備
例如使用ultrasound_serial 設備;打開串口,python代碼:
u_serial ?=?serial.Serial('/dev/ultrasound_serial1',?9600)??
直接使用/dev/ultrasound_serial1?,相當于使用/dev/ttyUSB0
參考
1)Ubuntu usb設備端口號綁定 - 一抹煙霞 - 博客園
2)Ubuntu USB設備端口號綁定_氫鍵H-H-CSDN博客
3)串口USB單一映射及重命名 - 文化苦旅1989 - 博客園
總結
以上是生活随笔為你收集整理的Ubuntu系统 USB设备端口绑定的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PACT: PARAMETERIZED
- 下一篇: 【C++实现】编译原理 免考小队 NFA