在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值。



你可能感兴趣的:(ros)