linux固定串口别名的两种方法

在linux使用串口读写数据时,经常面临插拔串口后需要重新给权限,还有可能串口的名字发生了改变,由ttyUSB0,发现变为了ttyUSB1,这时候又需要修改程序,很让人难受,所以我们必须要想办法把我插入的设备固定为一个串口名字,同时给 上权限。

下面介绍两种固定设备别名的方法:

第一种方法:

根据设备芯片的设备ID来确定插入设备的名字,比如设备插入的时USB转串口的串口助手,芯片是CH340,那么CH340的设备ID是固定的,我们根据这个芯片的设备ID来固定串口号:
首先查看设备硬件设备的ID号:

$lsusb

如下所示:

Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 006: ID 046d:c31d Logitech, Inc. Media Keyboard K200
Bus 001 Device 005: ID 093a:2510 Pixart Imaging, Inc. Optical Mouse
Bus 001 Device 004: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x UART Bridge / myAVR mySmartUSB light
Bus 001 Device 007: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter
Bus 001 Device 002: ID 1a40:0201 Terminus Technology Inc. FE 2.1 7-port Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

找到自己的串口是

Bus 001 Device 004: ID 10c4:ea60 Cygnal Integrated Products, Inc.
CP210x UART Bridge / myAVR mySmartUSB light

Bus 001 Device 007: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial
adapter

我的两个串口一个是激光雷达rplidar A1,一个是USB转串口(CH340芯片)
我们可以看到雷达的ID是:10c4:ea60,USB转串口的ID是:1a86:7523
我们可以通过设备不同的ID来区分他们,只需在/etc/udev/rules.d/ 目录下创建usb规则文件即可
第一步:创建自定义rules,名字随便写,后缀是.rules

$sudo vim /etc/udev/rules.d/rplidar_port.rules

第二步:按照Udev规则写入rules

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

对上面的规则进行分析

KERNEL==”ttyUSB*”             kernel代表设备在内核的名称,ttyUSB*代表ttyUSB开头的USB端口总称
ATTRS{idVendor}==”10c4”      "10c4"对应激光雷达串口模块端口信息中ID 10c4:ea60中:前的地址
ATTRS{idProduct}==”ea60”     "ea60"对应激光雷达串口模块端口信息中ID 10c4:ea60中:后的地址
MODE:=”0777”                  MODE代表赋予串口端口的权限,"0777"是具体的权限
SYMLINK+=”rplidar”            SYMLINK代表别名,"rplidar"=是具体的别名

第三步:重新插拔串口,就可以使用激光雷达的别名rplidar
例如ROS,launch文件里的名字
type=“string” value="/dev/ttyUSB1"/>
改为
type=“string” value="/dev/rplidar"/>
第一个方法大功告成

第二钟方法:

linux设备的每个USB口的(KERNELS)是不同的且固定的,我们通过传感器接在固定USB口也可以避免串口号总是变动,比如雷达固定接USB1,IMU接USB2。
例如我的开发板有三个USB口,接下来我们分别看下三个USB对应的KERNELS分别是多少,这样我们就可以根据KERNELS来固定设备的名字了。假如使用电脑装的ubuntu时,每次只插入一个USB,会出现不同USB口KERNELS都一样的问题,需要注意。
第一步:只插入一个设备,随便插入到三个中的某一个。
第二步:查看设备插入后的名字

$ls -l /dev/ttyUSB*

如下所示:

zhao@ubuntu:~$ ls -l /dev/ttyUSB*
crw-rw---- 1 root dialout 188, 0 730 22:26 /dev/ttyUSB0

第三步:查看这个设备插入USB口的KERNELS

$udevadm info -a -n /dev/ttyUSB0
looking at parent device '/devices/pci0000:00/0000:00:15.0/0000:03:00.0/usb3/3-2':
KERNELS=="3-2"
SUBSYSTEMS=="usb"
DRIVERS=="usb"

可以看到 KERNELS==“3-2”
然后再依次查看其他USB口KERNELS分别为:
KERNELS==“3-3”
KERNELS==“3-1”
第四步:建立规则文件,给每个USB口取别名,USB口一一对应传感器

$sudo vim /etc/udev/rules.d/usb.rules
KERNELS=="3-2",  MODE:="0666", GROUP:="dialout",  SYMLINK+="RPLIDAR_A3"
KERNELS=="3-1",  MODE:="0666", GROUP:="dialout",  SYMLINK+="IMU"

重新加载udev规则

$service udev reload
$service udev restart

之后重新插拔USB
rule文件中#代表注释

备注USB常用操作
ls -l /dev |grep ttyUSB* 查看dev中所有的ttyUSB相关的
udevadm info -a -n /dev/ttyUSB0 方便查看到KERNELS
lsusb 查看所有的usb,但是应该查看的是插入的外设,查看范围较少,但是常用于查看usb的硬件设备地址
dmesg | grep ttyUSB* 查看dmesg中与ttyUSB相关的信息
dmesg查看所有的设备信息,包括内核的设备

  • 9
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在Linux中,可以通过修改udev规则来固定串口端口号。具体步骤如下: 1. 打开udev规则文件:sudo nano /etc/udev/rules.d/99-serial.rules 2. 添加以下规则: KERNEL=="ttyS0", SYMLINK+="ttyUSB0" KERNEL=="ttyS1", SYMLINK+="ttyUSB1" KERNEL=="ttyS2", SYMLINK+="ttyUSB2" KERNEL=="ttyS3", SYMLINK+="ttyUSB3" 其中,KERNEL指定了串口设备称,SYMLINK指定了固定的端口号。 3. 保存文件并退出。 4. 重新加载udev规则:sudo udevadm control --reload-rules 5. 重新插拔串口设备,查看固定的端口号是否生效:ls /dev/ttyUSB* 注意:以上规则适用于USB转串口设备,如果是其他类型的串口设备,需要根据实际情况修改规则。 ### 回答2: 在Linux下,固定串口端口号的方法有许多种,下面介绍几种较为常用的方法。 一、使用udev规则 udev规则可以用来管理Linux系统中的设备,包括串口。通过编写udev规则,可以实现将串口设备固定在同一个端口。具体步骤如下: 1. 编写udev规则文件 在/etc/udev/rules.d/目录下新建一个以为99-serial.rules的文件,并输入以下内容: KERNEL=="ttyS0", SYMLINK+="ttyusb0" 其中,KERNEL指定了设备的内核称,这里的ttyS0表示第一个串口设备。SYMLINK指定了设备的符号链接称,这里的ttyusb0表示将该串口设备固定在这个端口。 2. 重启udev服务 运行以下命令重启udev服务: $ sudo service udev restart 3. 检查串口设备称 执行以下命令查看串口设备称是否已经固定在ttyusb0: $ ls -l /dev/tty* 其中,如果看到ttyusb0符号链接,则说明已经成功将串口设备固定在了这个端口。 二、使用udevadm命令 udevadm命令可以用来显示、查询、控制和更新udev的设备数据库。通过udevadm命令,可以查询并修改设备的属性值,以达到固定串口端口号的目的。具体步骤如下: 1. 查询串口设备的属性值 执行以下命令查询串口设备ttyS0的属性值: $ sudo udevadm info -a -n /dev/ttyS0 其中,-a参数表示查询设备的所有属性值,-n参数表示查询的设备称。 2. 修改串口设备的符号链接称 执行以下命令将串口设备ttyS0的符号链接称修改为ttyusb0: $ sudo udevadm trigger --attr-match=subsystem=tty 其中,--attr-match参数指定了需要修改命令的设备子系统,这里是tty。 以上两种方法均可以实现在Linux系统中固定串口设备的端口号。选择哪种方法,取决于实际情况和需求。同时,由于系统版本、网络环境等因素的影响,需要具体情况具体分析,选择适合自己的方法。 ### 回答3: Linux系统中,串口设备的端口号通常为/dev/ttySx,其中x为串口设备的序号,从0开始。在系统启动时,Linux会自动检测所有的串口设备,并分配一个默认的端口号给它们。但是,由于系统硬件或其他因素的影响,这些设备的端口号可能会在每次启动时重新分配,给用户带来很大的不便。因此,我们需要将串口设备的端口号固定下来,以便我们在每次使用时都能准确地找到它们。 在Linux系统中,要想固定串口设备的端口号,有两种方法: 1.通过udev规则固定设备端口号 udev是Linux系统中的一种设备管理方式,它可以监测硬件的插入和拔出,自动加载驱动程序,分配设备节点等。我们可以通过添加udev规则的方式来指定串口设备的端口号。 具体操作步骤如下: 1)查看目前的串口设备信息: dmesg | grep tty 2)在/etc/udev/rules.d目录下新建一个以60-serial.rules结尾的文件,并添加如下内容: KERNEL=="ttyS0", SYMLINK+="serial0" KERNEL=="ttyS1", SYMLINK+="serial1" KERNEL=="ttyS2", SYMLINK+="serial2" KERNEL=="ttyS3", SYMLINK+="serial3" 上述规则表示将ttyS0~ttyS3设备的端口号分别映射到serial0~serial3,这样每次系统启动时都能固定分配这些端口号给相应的设备。 3)重新加载udev规则: sudo udevadm control --reload-rules 2.在grub配置文件中指定串口设备的端口号 另一种方法是在Linux系统启动时,通过在Grub引导器中指定串口设备的端口号。具体操作步骤如下: 1)修改/boot/grub/menu.lst 或 /etc/default/grub文件,在kernel行中加入参数console=ttyS0,115200(115200为波特率) 2)保存修改,执行命令grub-install /dev/sda(其中sda为你的硬盘设备) 3)执行update-grub2生成新的grub配置文件 以上两种方法均可以固定Linux系统中串口设备的端口号,提高了系统的稳定性和可靠性。但需要注意的是,如果系统中存在多个串口设备,需要根据实际情况进行配置,避免端口冲突导致系统出现异常。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值