最近遇到一个问题,就是由于我需要插多个串口设备在树莓派上进行读取数据,但是如果是先插上STM32上报数据的串口,得到的串口号为/dev/ttyUSB0,而再插激光雷达的串口,得到的串口号为/dev/ttyUSB1。But!反过来顺序插的话串口号就变了!!!每次修改配置文件太难受了!因此,如果有一种可以把我们的串口映射到一个别名上,那该多好啊!!!Don't worry!方法总比困难多!接下来记录下修改串口的具体步骤!

目录

一、查看串口号

二、编写规则文件

三、重加载和重启

四、其他问题


一、查看串口号

lsusb

Android 判断串口是否正常连接 安卓如何查看串口名_加载

 我们可以发现第二行就是我们插的CP2102串口芯片显示的相关信息~

Bus 001 Device 003: ID 10c4:ea60 Silicon Labs CP210x UART Bridge

二、编写规则文件

我们需要进入以下的路径创建规则文件:

cd /etc/udev/rules.d/

创建一个规则文件:

sudo vim robot_base.rules
KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE:="0777", SYMLINK+="robot_base"

Android 判断串口是否正常连接 安卓如何查看串口名_重启_02

KERNEL:设备在内核的名称(由于我们是串口芯片,总线名称为ttyUSB*)

ATTRS{idVendor}以及ATTRS{idProduct}:id号(我们刚刚查看的lsusb里面那一块ID号)

Android 判断串口是否正常连接 安卓如何查看串口名_加载_03

也可以运行以下命令查看:

udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB0)

Android 判断串口是否正常连接 安卓如何查看串口名_重启_04

 kernel写这样也可以滴!

Android 判断串口是否正常连接 安卓如何查看串口名_串口_05

 MODE:权限,(7代表设置读、写、执行权限,3个7代表给所有用户、群组用户、其他用户都设置可读可写可执行的权限)

r(读)

4

w(写)

2

x(执行)

1

SYMLINK:设置别名(我设置的为robot_base)

三、重加载和重启

重新加载udev

sudo service udev reload

重启udev

sudo service udev restart

查看下最终映射情况

ll /dev | grep ttyUSB

Android 判断串口是否正常连接 安卓如何查看串口名_人工智能_06

 我们可以看到robot_base 映射到 ttyUSB0

因此我们只需在我们设置串口端口时写为如下即可:

Android 判断串口是否正常连接 安卓如何查看串口名_重启_07

 之前是这样写的:

Android 判断串口是否正常连接 安卓如何查看串口名_加载_08

这样就好啦!

四、其他问题

还没有结束……设置完一个后,发现我TM两个串口芯片都是CP2102……芯片ID号都一致。裂开了……(如果是不同芯片上面的方法是可以区分开的!)这该咋整!

Android 判断串口是否正常连接 安卓如何查看串口名_Android 判断串口是否正常连接_09

通过查询USB具体信息,我发现一个地方可以区分开,那就是端口!!(这个端口就是我们字面的意思,不同的插口!)

udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB0)

Android 判断串口是否正常连接 安卓如何查看串口名_重启_10

 

Android 判断串口是否正常连接 安卓如何查看串口名_加载_11

Android 判断串口是否正常连接 安卓如何查看串口名_串口_12

 也就是我们只要记住我们的设备是固定插哪个端口,就能区分串口号啦!

接下来修改下我们的规则~

robot_base.rules:

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

rplidar.rules: 

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

然后重新加载和重启即可~!

我们测试一下~!

Android 判断串口是否正常连接 安卓如何查看串口名_加载_13

我再调转下插接先后顺序!

Android 判断串口是否正常连接 安卓如何查看串口名_串口_14

 我们可以发现,不管我们先后插哪个设备,都可以映射到我们想要的串口!!