在ubuntu上,绑定usb串口的几种方式(udev)

15 篇文章 0 订阅

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值, 这样便可以像在windows一样将端口名与板子的硬件位置绑定。

总的命令如下:

1. 查看各个串口的编号(或者叫做识别码)

dmesg | grep ttyUSB

2. 进入 /etc/udev/rules.d 目录下

新建文件 如: com.rules

编辑文件内容为: 

KERNELS=="1-2.3:1.0",MODE:="0777",GROUP:="dialout",SYMLINK+="com"

保存退出,其中  1-2.3  即为编号

3. 重启服务

sudo service udev reload

sudo service udev restart

4.拔出串口重新插入

sudo service udev reload

sudo service udev restart

  • 32
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值