设备绑定串口名称 Ubuntu

1. 概述

简单介绍在ubuntu下进行设备和串口名称绑定的操作,保证每次连接设备时可以直接使用,不需要更改。

2. 查看

 cd /etc/udev/

其中rules.d目录中就是设置的设备和串口名关系

/etc/udev$ ls -l
total 12
drwxr-xr-x 2 root root 4096 4月  12  2016 hwdb.d
drwxr-xr-x 2 root root 4096 7月  13 01:59 rules.d
-rw-r--r-- 1 root root  153 4月  12  2016 udev.conf

进入rules.d目录,可以看到已有的设备关系,每个rules文件中都包含对应的关系。

:/etc/udev$ cd ./rules.d/
robots@Robots-ubuntu1604:/etc/udev/rules.d$ ls -l
total 12
-rw-r--r-- 1 root root 360 7月   5 18:33 88-mvusb.rules
-rw-r--r-- 1 root root 109 5月  28 23:01 mynteye-d1000.rules
-rw-r--r-- 1 root root 101 7月  13 01:59 usb.rules

例如usb.rules中就是之前已经设定好的串口名和设备关系

gedit usb.rules 

usb.rules中的具体内容有

KERNEL=="ttyUSB*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE:="0777", SYMLINK+="nano" 

可以新建一个rules文件,注意权限问题可以在命令前加一个sudo

sudo touch myusb.rules

3. 配置

在需要配置的rules文件中需要添加信息,这个只适用于USB连接的设备ttyUSB*,注意两点

  • idVendor和idProduct可以标识一个设备,对于设备连接时通过这两个代码可以查找正确的设备
  • sbgN绑定的串口名称,可以设置一个比较容易记的名字。
  • 0777是设备权限,这里默认是所有人都有全部权限,根据需要可以自行更改,如果设置错误可能会出现不能读取数据的现象。
KERNEL=="ttyUSB*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", MODE:="0777", SYMLINK+="sbgN" 

关键点

比较重要的就是idVendor和idProduct如何获取,可以通过下面的命令快速得到。

  • 通过dmesg

下面显示了具体的信息New USB device found, idVendor=2639, idProduct=0017, bcdDevice= 0.00

[ 3019.003797] xsens_mt ttyUSB0: xsens_mt converter now disconnected from ttyUSB0
[ 3019.003851] xsens_mt 1-9:1.1: device disconnected
[ 3028.116303] usb 1-10: new full-speed USB device number 7 using xhci_hcd
[ 3028.270598] usb 1-10: New USB device found, idVendor=2639, idProduct=0017, bcdDevice= 0.00
[ 3028.270605] usb 1-10: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 3028.270609] usb 1-10: Product: MTi-G-700 GPS/INS
  • 使用lsusb

也可以在输出中找到对应的信息 2639:0017

robots@Robots-ubuntu1604:~/catkin_ws$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 017: ID 04f2:b59e Chicony Electronics Co., Ltd 
Bus 001 Device 034: ID f622:1041  
Bus 001 Device 002: ID 17ef:602d Lenovo 
Bus 001 Device 005: ID 8087:0aaa Intel Corp. 
Bus 001 Device 032: ID 2639:0017 Xsens MTi-G 7xx GNSS/INS
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

使用下面的命令使更改立即生效。

sudo udevadm trigger

使用命令ls -l查看设置是否生效,可以看到,这只是一种映射关系罢了,或者说给串口设置了别名。通过Vendor和product来找到对应的设备,设置限制在ttyUSB*的名称中。可以看到dev/sbgN和设备ttyUSB0连接在了一起

$ ls -l /dev/sbgN 
lrwxrwxrwx 1 root root 7 9月   3 17:15 /dev/sbgN -> ttyUSB0

4. 规则说明

具体的udev文件规则说明如下

键        含义

----------------------------------------

ACTION         事件 (uevent)的行为,例如:add( 添加设备 )、remove(删除设备 )。

KERNEL         在内核里看到的设备名字,比如sd*表示任意SCSI磁盘设备

DEVPATH       内核设备录进,比如/devices/*

SUBSYSTEM       子系统名字,例如:sda的子系统为 block。

BUS         总线的名字,比如IDE,USB

DRIVER         设备驱动的名字,比如ide-cdrom

ID           独立于内核名字的设备名字

SYSFS{ value}       sysfs属性值,他可以表示任意

ENV{ key}       环境变量,可以表示任意

PROGRAM       可执行的外部程序,如果程序返回0值,该键则认为为真(true)

RESULT         上一个PROGRAM调用返回的标准输出。

NAME         根据这个规则创建的设备文件的文件名。

注意:仅仅第一行的NAME描述是有效的,后面的均忽略。  

    如果你想使用使用两个以上的名字来访问一个设备的话,可以考虑SYMLINK键。

SYMLINK       为 /dev/下的设备文件产生符号链接。由于 udev只能为某个设备产生一个设备文件,

    所以为了不覆盖系统默认的 udev规则所产生的文件,推荐使用符号链接。

OWNER         设备文件的属组

GROUP         设备文件所在的组。

MODE         设备文件的权限,采用8进制

RUN         为设备而执行的程序列表

LABEL         在配置文件里为内部控制而采用的名字标签(下下面的GOTO服务)

GOTO         跳到匹配的规则(通过LABEL来标识),有点类似程序语言中的GOTO

IMPORT{ type}     导入一个文件或者一个程序执行后而生成的规则集到当前文件

WAIT_FOR_SYSFS   等待一个特定的设备文件的创建。主要是用作时序和依赖问题。

PTIONS         特定的选项:

last_rule 对这类设备终端规则执行;

ignore_device 忽略当前规则;

ignore_remove 忽略接下来的并移走请求。

all_partitions 为所有的磁盘分区创建设备文件。

运算符的规则如下

操作符     匹配或赋值t                         解释
----------------------------------------
==            匹配              相等比较
!=            匹配             不等比较
=            赋值              分配一个特定的值给该键,他可以覆盖之前的赋值。
+=          赋值              追加特定的值给已经存在的键
:=            赋值                  分配一个特定的值给该键,后面的规则不可能覆盖它。

5. 其他

5.1 常用的查看串口命令

查看usb简略信息

lsusb

查看每个usb详细信息

lsusb -v

查看系统启动以来的usb接口等设备信息,可以方便的看到设备是否已经连接,相对具体的设备信息。

dmesg

更详细信息的查看命令

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

5.2 其他设备

有的设备不是使用的ttyUSB*名称,这种时候需要单独考虑。
例如mindvision相机的挂载点不是ttyusb,注意一下,具体可以看官方有个配置文件88-mvusb.rules

KERNEL=="*", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ACTION=="add", ATTR{idVendor}=="f622", MODE="666", TAG="mvusb_dev",  A"
KERNEL=="*", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ACTION=="add", ATTR{idVendor}=="080b", MODE="666", TAG="mvusb_dev",  A"
KERNEL=="*", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ACTION=="remove", TAG=="mvusb_dev", R"

因此可以对应在我们自己的rules文件中进行修改得到

KERNEL=="*", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="f622", ATTRS{idProduct}=="1041", MODE:="0777", SYMLINK+="MdVn"

至于其他的设备,用到了再继续添加吧。

6. idProduct和idVendor相同的处理办法

有时候后会出现idProduct和idvendor相同的情况,这是很常见的。处理的方法如下
请注意idProduct和idvendor相同并不能区分不同设备,但是每个设备都有一个唯一的序列号,因此这里可以添加一个规则,序列号规则那么如何得到序列号呢
可以使用dmesg得到序列号

dmesg

也可以使用下面命令得到

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

当然,lsusb -v也可以得到呀

那我们看一下具体是怎么不同呢,可以看到,他们的kernel不同,表示这是两个接口上的设备,但是他们的idProduct和idvendor相同,都是6001:0403,那怎么办呢?进一步可以看到,他们的serial,也就是SerialNumber序列号是不一样,因此可以在原来的文件中添加规则就可以了,经过测试,完美!

ATTRS{serial}="AD0JFGI6"

在这里插入图片描述

7. 参考链接

udev的使用
Ubuntu 下绑定串口名称

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值