1. 程式人生 > >ubuntu中繫結USB串列埠的方法,包括同一型號的USB串列埠

ubuntu中繫結USB串列埠的方法,包括同一型號的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 /rules.d 這個資料夾下面 。

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

【方式一:通過檔案建立連結規則】

1.建立檔案

命令:sudo gedit /etc/udev/rules.d/ttyUSBLink.rules

2.根據查詢的資訊編寫連結規則

上面的ATTRS{devpath} 為USB埠的固定物理編號, MODE:= 為修改許可權,且生效之後不能被改變。

如果不繫結物理埠的話直接刪掉那個即可,如果不是每次都要求插固定的埠,肯定得刪掉。

使rules生效: 

建立之後儲存,重新插拔USB裝置即可生效,無論按照什麼進行插拔,都能準確地識別出裝置的埠號啦!

【方式二:通過指令碼建立連結規則】

可以一個指令碼如下:

echo  'KERNELS=="ttyUSB0", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE:="0666", GROUP:="dialout",  SYMLINK+="device_0"' >/etc/udev/rules.d/ttyUSBLink.rules

繫結 10c4:ea60的串列埠裝置,會在/etc/udev/rule.d 下 產生相應的規則檔案,ttyUSB0產生新的別名即為device_0。

 

【特殊情況:有相同的USB裝置時】

對於相同的兩根串列埠線,接到電腦上後在lsusb中顯示的id號則是一樣的,用上面的方法無法繫結,所以得先檢視裝置的kernel值,每個裝置的kernel(硬體埠號)是不一樣的。所以採用kernel來繫結。

【方式1】開啟檔案修改一下

【方式2】如下命令

echo  'KERNELS=="2-2.2:1",  MODE:="0666", GROUP:="dialout",  SYMLINK+="device_0"' >/etc/udev/rules.d/USBLink.rules  

會將硬體上屬於2-2.2的裝置號對映到device_0上 ,也就是該裝置的別名,可以通過以下命令 檢視硬體埠的核心裝置名 。

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

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

所以我們 在利用該值,如上在udev 新增埠裝置規則進行串列埠的繫結,只不過繫結的是具體的usb硬體對應的KERNELS值。


關於Ubuntu下檢視USB裝置的資訊,可以通過下面的方式進行檢視。

【方式一】檢視所有usb裝置的資訊

命令:lsusb

【方式二】檢視特定裝置的資訊

命令:udevadm info -a -n /dev/ttyUSB0

下面還有3頁的資訊,我就不貼出來了,總之很詳細,希望大家細心點都能一次成功哦!


【順便說明一下udev規則和chmod命令的用法】

[1]: udev的規則說明 http://blog.csdn.net/cokewei/article/details/8281239 
[2]ubuntu14 chmod命令列用法: 
  用Chmod命令,可以為每個使用者,每個資料夾指定不同的許可權,甚至可以為不同的使用者組指定不同的操作許可權 
  指令名稱 : chmod 
  使用許可權 : 所有使用者 
  使用方式 : chmod [-cfvR] [–help] [–version] mode file… 
  說明 : Linux/Unix 的檔案呼叫許可權分為三級 : 檔案擁有者、群組、其他。利用 chmod 可以藉以控制檔案如何被他人所呼叫。 
  引數 : 
  mode : 許可權設定字串,格式如下 : [ugoa…][[+-=][rwxX]…][,…],其中 
  u 表示該檔案的擁有者,g 表示與該檔案的擁有者屬於同一個群體(group)者,o 表示其他以外的人,a 表示這三者皆是。 
  + 表示增加許可權、- 表示取消許可權、= 表示唯一設定許可權。 
  r 表示可讀取,w 表示可寫入,x 表示可執行,X 表示只有當該檔案是個子目錄或者該檔案已經被設定過為可執行。 
  -c : 若該檔案許可權確實已經更改,才顯示其更改動作 
  -f : 若該檔案許可權無法被更改也不要顯示錯誤訊息 
  -v : 顯示許可權變更的詳細資料 
  -R : 對目前目錄下的所有檔案與子目錄進行相同的許可權變更(即以遞迴的方式逐個變更) 
  –help : 顯示輔助說明 
  –version : 顯示版本 
  範例 :將檔案 file1.txt 設為所有人皆可讀取 : 
  chmod ugo+r file1.txt 
  將檔案 file1.txt 設為所有人皆可讀取 : 
  chmod a+r file1.txt 
  將檔案 file1.txt 與 file2.txt 設為該檔案擁有者,與其所屬同一個群體者可寫入,但其他以外的人則不可寫入 : 
  chmod ug+w,o-w file1.txt file2.txt 
  將 ex1.py 設定為只有該檔案擁有者可以執行 : 
  chmod u+x ex1.py 
  將目前目錄下的所有檔案與子目錄皆設為任何人可讀取 : 
  chmod -R a+r * 
  此外chmod也可以用數字來表示許可權如 chmod 777 file 
  語法為:chmod abc file 
  其中a,b,c各為一個數字,分別表示User、Group、及Other的許可權。 
  r=4,w=2,x=1 
  若要rwx屬性則4+2+1=7; 
  若要rw-屬性則4+2=6; 
  若要r-x屬性則4+1=7。 
  如000表示三項許可權均無,而100表示只讀。這樣,我們就有了下面的對應: 
  0 [000] 無任何許可權 
  4 [100] 只讀許可權 
  6 [110] 讀寫許可權 
  7 [111] 讀寫執行許可權