ubuntu 串口设备名称重映射

ubuntn 系统连接USB转串口设备,如果设备比较多串口号会冲突或在需要是不是的修改启动文件,为了设备能够自动识别自身的串口就需要对设备进行重映射

设置设备端口信息:

1. 查看设备

ls -l /dev/ttyUSB*

终端打印出:

2.修改USB权限,若USB状态权限不够,需要更改权限否则无法读取传感器的信息

sudo chmod 777 /dev/ttyUSB*

3.启动启动文件若出现以下错误:fatal:could not find proper mt device

出错原因:在Linux中当前用户没有打开串口权限问题,需把当前用户加到串口用户组,我们需要把root用户或者普通用户加入到dialout组

解决方法:

在终端中输入以下命令

grep 'dialout' /etc/group

若结果为: “dialout:x:20:”,则说明root用户或者普通用户没有加入到dialout组中,接下去我们需要把root用户或者自己的用户加入到dialout组

在终端中输入:

sudo usermod -a -G dialout root
 
sudo usermod -a -G dialout fairy

说明:fairy用户是我自己系统的普通用户组,每个系统自定义的普通用户组名称不一样,需根据实际情况更改最好把root和普通用户组都加入到dialout组中

若不知道用户组名称可以在终端中输入:whoami 命令查看

执行上述命令之后在终端中输入:

grep 'dialout' /etc/group

 若结果为:dialout:x:20:root,fairy  则说明加载成功

设备能够成功打开之后为了使用方便需对设备号进行重映射,具体实现过程如下:

1.终端输入lsusb打印出设备的详细信息

lsusb

打印出设备信息:

从终端中打印出上述信息,主要需要关注该信息的ID号,例如Bus 001设备中的ID号10c4:ea60,其中10c4就是usb设备的idVendor,ea60就是设备的idProduct

这两个编号分别代表一个usb设备的 厂商编号 产品编号 ,也就是常说的Vid Pid而且是唯一的。

2.编写串口映射文件

首先创建一个rplidar.rules后缀的文件

touch rplidar.rules

然后在文件中加入以下内容并保存:

KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE:="0777", SYMLINK+="rplidar"

该内容中idVendor和idProduct值为lsusb命令打印出来对应ID的信息

方法一:

创建create_udev_rules.sh

touch create_udev_rules.sh

在create_udev_rules.sh文件中加入以下内容并保存:

#!/bin/bash

echo "remap the device serial port(ttyUSBX) to  rplidar"
echo "rplidar usb connection as /dev/rplidar , check it using the command : ls -l /dev|grep ttyUSB"
echo "start copy rplidar.rules to  /etc/udev/rules.d/"
echo "`rospack find rplidar_ros`/scripts/rplidar.rules"
sudo cp `rospack find rplidar_ros`/scripts/rplidar.rules  /etc/udev/rules.d
echo " "
echo "Restarting udev"
echo ""
sudo service udev reload
sudo service udev restart
echo "finish "

注:本文所创建的文件都是在ROS空间下面,所以create_udev_rules.sh文件才会用到rospack find rplidar_ros命令, rplidar_ros为功能包。如果不是在ROS工作空间下那么就需要修改上述文件

然后运行create_udev_rules.sh文件,如下所示:

添加成功之后输入:ls -l /dev | grep ttyUSB 出现 rplidar - > ttyUSB1 表明重映射添加成功,重启设备并且把设备端口改成/dev/rplidar就可以对设备进行读写。

方法二:

不需要创建create_udev_rules.sh文件,直接在/etc/udev/rules.d路径下面添加rplidar.rules规则文件

然后进入root模式依次运行以下命令:

service udev reload
service udev restart

创建生效后重新插拔USB,再次输入命令:"ls -l /dev |grep ttyUSB"查看是否设置成功,若出现 rplidar - > ttyUSB1 表明重映射添加成功,重启设备并且把设备端口改成/dev/rplidar就可以对设备进行读写。

3.设备号相同的映射方法

在作项目时我们可能会使用到多个相同的USB转串口设备,而同一个设备有可能出现ATTRS{idVendor}和ATTRS{idProduct}编号一模一样,这时候如果采用上述的方法就无法区分不同的设备,所以我们需加上其他关键的编号区分。

在终端中输入:

udevadm info --attribute-walk --name=/dev/ttyUSB1

上述这个命令是打印出ttyUSB1设备的详细信息,其打印出来的信息如下:

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/devices/pci0000:00/0000:00:14.0/usb2/2-4/2-4:1.1/ttyUSB1/tty/ttyUSB1':
    KERNEL=="ttyUSB1"
    SUBSYSTEM=="tty"
    DRIVER==""

  looking at parent device '/devices/pci0000:00/0000:00:14.0/usb2/2-4/2-4:1.1/ttyUSB1':
    KERNELS=="ttyUSB1"
    SUBSYSTEMS=="usb-serial"
    DRIVERS=="xsens_mt"
    ATTRS{port_number}=="0"

  looking at parent device '/devices/pci0000:00/0000:00:14.0/usb2/2-4/2-4:1.1':
    KERNELS=="2-4:1.1"
    SUBSYSTEMS=="usb"
    DRIVERS=="xsens_mt"
    ATTRS{authorized}=="1"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bInterfaceClass}=="ff"
    ATTRS{bInterfaceNumber}=="01"
    ATTRS{bInterfaceProtocol}=="00"
    ATTRS{bInterfaceSubClass}=="00"
    ATTRS{bNumEndpoints}=="02"
    ATTRS{supports_autosuspend}=="1"

  looking at parent device '/devices/pci0000:00/0000:00:14.0/usb2/2-4':
    KERNELS=="2-4"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{authorized}=="1"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bDeviceClass}=="02"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bMaxPacketSize0}=="8"
    ATTRS{bMaxPower}=="200mA"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bNumInterfaces}==" 2"
    ATTRS{bcdDevice}=="0000"
    ATTRS{bmAttributes}=="80"
    ATTRS{busnum}=="2"
    ATTRS{configuration}==""
    ATTRS{devnum}=="3"
    ATTRS{devpath}=="4"
    ATTRS{idProduct}=="0017"
    ATTRS{idVendor}=="2639"
    ATTRS{ltm_capable}=="no"
    ATTRS{manufacturer}=="Xsens"
    ATTRS{maxchild}=="0"
    ATTRS{product}=="MTi-G-700 GPS/INS"
    ATTRS{quirks}=="0x0"
    ATTRS{removable}=="fixed"
    ATTRS{rx_lanes}=="1"
    ATTRS{serial}=="077015B9"
    ATTRS{speed}=="12"
    ATTRS{tx_lanes}=="1"
    ATTRS{urbnum}=="9"
    ATTRS{version}==" 1.10"

  looking at parent device '/devices/pci0000:00/0000:00:14.0/usb2':
    KERNELS=="usb2"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{authorized}=="1"
    ATTRS{authorized_default}=="1"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceProtocol}=="01"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{bMaxPower}=="0mA"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bcdDevice}=="0504"
    ATTRS{bmAttributes}=="e0"
    ATTRS{busnum}=="2"
    ATTRS{configuration}==""
    ATTRS{devnum}=="1"
    ATTRS{devpath}=="0"
    ATTRS{idProduct}=="0002"
    ATTRS{idVendor}=="1d6b"
    ATTRS{interface_authorized_default}=="1"
    ATTRS{ltm_capable}=="no"
    ATTRS{manufacturer}=="Linux 5.4.0-72-generic xhci-hcd"
    ATTRS{maxchild}=="9"
    ATTRS{product}=="xHCI Host Controller"
    ATTRS{quirks}=="0x0"
    ATTRS{removable}=="unknown"
    ATTRS{rx_lanes}=="1"
    ATTRS{serial}=="0000:00:14.0"
    ATTRS{speed}=="480"
    ATTRS{tx_lanes}=="1"
    ATTRS{urbnum}=="70"
    ATTRS{version}==" 2.00"

  looking at parent device '/devices/pci0000:00/0000:00:14.0':
    KERNELS=="0000:00:14.0"
    SUBSYSTEMS=="pci"
    DRIVERS=="xhci_hcd"
    ATTRS{ari_enabled}=="0"
    ATTRS{broken_parity_status}=="0"
    ATTRS{class}=="0x0c0330"
    ATTRS{consistent_dma_mask_bits}=="64"
    ATTRS{d3cold_allowed}=="1"
    ATTRS{dbc}=="disabled"
    ATTRS{device}=="0x9c31"
    ATTRS{dma_mask_bits}=="64"
    ATTRS{driver_override}=="(null)"
    ATTRS{enable}=="1"
    ATTRS{irq}=="44"
    ATTRS{local_cpulist}=="0-3"
    ATTRS{local_cpus}=="f"
    ATTRS{msi_bus}=="1"
    ATTRS{numa_node}=="-1"
    ATTRS{revision}=="0x04"
    ATTRS{subsystem_device}=="0x7270"
    ATTRS{subsystem_vendor}=="0x8086"
    ATTRS{vendor}=="0x8086"

  looking at parent device '/devices/pci0000:00':
    KERNELS=="pci0000:00"
    SUBSYSTEMS==""
    DRIVERS==""

从这段信息中我们可以看出设备中有很多 ATTRS{  }的信息,从这些信息中作对比我们可以得出结论:即使完全一模一样的设备其中ATTRS{devpath}=="4" 的值也是不一样,所以我们可以利用该关键值来区分相同的设备,我们在原有

***.rules文件中加入该关键值,如下所示:

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

然后保存文件,接下去的方法跟上述方法2一样,把该文件存到/etc/udev/rules.d路径下面然后输入以下命令:

service udev reload
service udev restart

 创建生效后重新插拔USB,再次输入命令:"ls -l /dev |grep ttyUSB"查看是否设置成功,若出现 motor1 - > ttyUSB1 表明重映射添加成功,重启设备并且把设备端口改成/dev/motor1就可以对设备进行读写。

4.如果要把设置重映射的设置删除掉

首先删除路径/etc/udev/rules.d里面对应的规则文件rplidar.rules

rm   /etc/udev/rules.d/rplidar.rules

然后在输入以下命令:

sudo service udev reload
sudo service udev restart

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值