linux系统下串口设备和串口号绑定

3.7 linux系统下串口设备和串口号绑定

3.7.1 问题由来

​在ROS小车的开发过程中,需要使用ROS通信串口模块、激光雷达的串口模块、IMU的串口模块等,为了防止每次开机这些设备的串口号发生变动,所以需要对串口号与串口设备绑定;为了更好的识别串口,我们也可以对串口号进行设置静态名称;为了更好的使用串口,我们也可以对串口进行权限设置。

一次设置,终身受益。

3.7.2 原理

在linux系统下,虽然每一个固定的端口可能由于外接设备启动的时间差异分配的ttyUSB*不同,但是对于每一个固定的端口,都有固定的 KERNELS、idProduct、idVendor,并且每一个端口的KERNELS都不相同。

所以,我们只要固定串口设备的安装位置,还是可以从端口物理性质的不同解决这个问题。

3.7.3 方法

第一步:如何查询每一个端口的KERNELS、idProduct、idVendor?

这里需要使用下面这条命令

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

并且当每次独立插入一个串口设备时,串口号总为/dev/ttyUSB0,若不放心,可以使用下面命令查询

ls /dev | grep ttyUSB

使用第一条命令,窗口将打印一堆设备信息,我们只需要KERNELS、idProduct、idVendor,我们向下滑找到类似下图的部分找到该端口的信息。

image-20200920220927095

注意查询端口信息时,请单独插入串口设备。

第二步:在/etc/udev/rules.d/目录下创建自己的99-*.rules文件

比如这里创建99-robot-usb.rules文件,使用如下命令

sudo vim /etc/udev/rules.d/99-robot-usb.rules

填入如下内容,保存,根据自己设备的信息填写

KERNELS=="3-2", ATTRS{
    
    idVendor}=="1a86", ATTRS{
    
    idProduct}=="7523", SYMLINK+="robot",MODE:="0777"

对上述的解释

==”:比较键、值,若等于,则该条件满足;
“+=”:为一个表示多个条目的键赋值。
“:=”:对一个键赋值,并拒绝之后所有对该键的改动。目的是防止后面的规则文件对该键赋值。
第三步:重启并查看配置是否生效

重启

sudo reboot

等待开机,查看端口

ll /dev | grep ttyUSB

中断打印出如下信息,设置成功

lrwxrwxrwx   1 root root           7 Sep 20 22:30 robot -> ttyUSB0
crwxrwxrwx   1 root dialout 188,   0 Sep 20 22:30 ttyUSB0

之后我们再使用该物理位置的端口时,它的串口号就固定为 /dev/robot,并且具有可读可写可执行的权限。

注意事项:

以上只是对一个端口设置的流程,大家在多数情况下都是多个设备。聪明的你,一定知道怎么举一反三。

每次独立插入一个串口设备,获得它的KERNELS、idProduct、idVendor值,记录下来;在/etc/udev/rules.d/目录下创建自己的99-*.rules文件,一次性填入这些设备的信息以及你需要的映射的名字;然后重启即可。

以往链接,点击访问。

上一篇搭建ROS小车编写启动功能包
系列文章从零搭建ROS机器人

如果你感觉,我的文章比较适合你,关注我,点个赞,给你不一样的惊喜。

稿定设计导出-20200810-205521
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zhao_ke_xue/article/details/108700080