对多个同厂相同ID的USB转串口绑定端口同时解决usb device读写permission denied
ubuntu下USB设备号从0开始,接入第二个为1,再接入为2 ,我们使用了3个usb转串口的模块,设备号不固定;而且总是会出现读写权限的问题,提示为:Permission denied
解决办法:利用udev的规则 [1] , 将端口重映射到自定义的名称,并修改权限
$ lsusb
查看usb端口信息
Bus 001 Device 002: ID 8087:8000 Intel Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 002 Device 004: ID 5986:026a Acer, Inc
Bus 002 Device 003: ID 8087:07dc Intel Corp.
Bus 002 Device 005: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
Bus 002 Device 006: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
Bus 002 Device 007: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
可以看到 Device 5\6\7 ID 号完全相同, 这种情况下无法使用ID号来区分,只能将设备绑定到固定端口。
通过udevadm命令查看设备信息:
udevadm info -a -n /dev/ttyUSB*
……
udev的规×
$kernel, %k:设备的内核设备名称,例如:sda、cdrom。
ID 10c4:ea60 表示usb设备的ID(这个ID由芯片制造商设置,可以唯一表示该设备)
10c4 usb_device_descriptor.idVendor
ea60 usb_device_descriptor.idProduct
创建设备udev规则:
sudo vim /etc/udev/rules.d/device_0.rules
将下面的代码写如 .rules 文件中:
KERNEL=="ttyUSB*", ATTRS{devpath}=="0", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", MODE:="777", SYMLINK+="device_0", GROUP="users"
上面的ATTRS{devpath} 为USB端口的固定物理编号, MODE:= 为修改权限,且生效之后不能被改变。[2]
使rules生效:
sudo udevadm trigger
sudo udevadm control –reload-rules && sudo service udev restart && sudo udevadm trigger
创建生效后重新插拔USB, 查看
$ ls -l /dev |grep ttyUSB
lrwxrwxrwx 1 root root , 7 Nov 29 14:03 device_0 -> ttyUSB0
crwxrwxrwx 1 root users, 1 Nov 29 14:03 ttyUSB1
之后,这个USB转串口模块插入这个USB口,就可以直接使用设备名称来调用: /dev/device_0
—————————————————————-
[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] 读写执行权限