在ubuntu上,綁定usb串口的幾種方式(udev)

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。


但是有時候, 很多廠商由於特殊原因,在串口芯片上,寫入的設備號的名字 都是一樣的。


所以要用到 另外一個辦法,就是通過綁定設備的硬件端口號 ,如下命令 

echo  'KERNELS=="3-1.1",  MODE:="0666", GROUP:="dialout",  SYMLINK+="usb_0"' >/etc/udev/rules.d/usb.rules  

會將硬件上屬於 3-1.1 的設備號映射到USB_0上 , 可以通過以下命令 查看 板子上的硬件端口的內核設備名 。

udevadm info --attribute-walk --name=/dev/ttyACM0 ;  

該條命令會將 ttyACM0所對應的硬件端口的kernel設備名 顯現出來, 得到KERNEL== '1-5.5.4', 而不是之前的ttyUSB0,因爲這個在linux上插拔的時候,會根據先後順序來產生usb/acm0 ,usb/acm1 ,

所以我們 在利用該值 , 如上 在udev 添加端口設備規則進行串口的綁定,只不過綁定的是 具體的usb硬件對應的 KERNELS值。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章