把Linux下外设的USB端口号映射到固定的名字

目录

1、 固定USB设备的端口号的原理

2、.rules文件的编写方法

3、映射结果查看 


1、 固定USB设备的端口号的原理

近期调试了一款云台,控制方面需要用到串口通信,调试过程中发现了一个问题,就是 Linux 分配给外设的 USB 端口号与端口的上电顺序有关,这就导致如果需要 USB 端口连接的外设多了之后,每次分配至云台的端口号不一致,因此就需要将云台的 USB 端口映射为一个固定的名字,这样每次程序调用这个固定的名字即可,就不需要每次根据实际的端口号改代码了。

可以通过 ls /dev/ttyUSB* 命令查看连接到 PC 上的 USB 的端口号。

$ ls /dev/ttyUSB*
/dev/ttyUSB0

说的就是这个 ttyUSB0 的这个 0 位置的数值很容易每次不一样。因此我们要给特定的设备设置一个固定的端口名,这样每次打开串口的时候都 open 这个固定的串口名即可,至于这个串口名到底绑定在了几号端口上的问题,Linux 它爱咋玩咋玩我们就不用管了~

我们知道,在 Linux 系统下一切皆文件,系统会把插入的 USB 设备统一当作文件来处理,Linux 把 USB 端口映射文件放在路径 /etc/udev/rules.d 中,可以 ls 查看该目录下的文件长啥样:

$ cd /etv/udev/rules.d
$ ls
10-kinova-arm.rules  70-snap.gimp.rules   70-snap.snap-store.rules
56-pan-tilt.rules    70-snap.snapd.rules  99-realsense-libusb.rules

这里的文件都是以 .rules 结尾的,因此我们也需要创建一个 .rules 的文件。

2、.rules文件的编写方法

.rules 文件怎么写?不要慌,虽然看不懂这是啥,但是对于本任务来说写起来很简单的!

我们可以根据 udev 规则来编写 rules 文件。udev 是 Linux kernel 2.6 系列的设备管理器,它主要的功能是管理 /dev 目录底下的设备节点。还看不懂?没事,那别看了,直接上手写吧~

首先可以使用 lsusb 命令查看USB 设备信息:

红色框中现实的就是我的云台设备的 USB 信息,如果不知道自己的硬件设备的信息是哪个,可以分别在插拔的状态下使用lsusb命令,然后找不同就好啦~

这里只需要关注一个信息即可,即设备的 ID 信息,这个ID由芯片制造商设置,可以唯一表示该设备,我这里是 ID 0403:6014,其中冒号前的 0403 代表设备生产商,后面的 6014 代表设备号。

因此我们就可以新建一个 .relus 文件,文件名前缀随便取,比如我这个:

$ sudo gedit dynamxel.relus

然后再打开的文件里填入下面的内容:

KERNEL=="ttyUSB*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6014", MODE:="0777", SYMLINK+="dynamixel-pantilt"
  • KERNEL代表设备的内核设备名称.常见的比如硬盘的sd*:sda、sdb...,USB 的 ttyUSB*:ttyUSB0、ttyUSB1...;
  • ATTRS{idVendor} 代表设备商ID;
  • ATTRS{idProduct} 代表设备号;
  • MODE 代表权限,777代表赋予可读可写可运行的权限,具体的原理可以参考这里:

Linux权限详解(chmod、600、644、700、711、755、777、4755、6755、7755)_林20的博客-CSDN博客_chmod700什么意思权限简介Linux系统上对文件的权限有着严格的控制,用于如果相对某个文件执行某种操作,必须具有对应的权限方可执行成功。Linux下文件的权限类型一般包括读,写,执行。对应字母为 r、w、x。Linux下权限的粒度有 拥有者 、群组 、其它组 三种。每个文件都可以针对三个粒度,设置不同的rwx(读写执行)权限。通常情况下,一个文件只能归属于一个用户和组, 如果其它的用户想有这个文件的权限......https://blog.csdn.net/u013197629/article/details/73608613

  • SYMLINK 代表映射的名称。保存文件,重新拔插USB即可。

以后打开设备是,可以使用 open("/dev/dynamixel-pantilt") 的方式打开了,再也不用担心端口号是多少咯~

3、映射结果查看 

可以使用命令 ls -l /dev |grep ttyUSB 查看设备名映射的情况:

$ ls -l /dev |grep ttyUSB
lrwxrwxrwx  1 root       root               7 7月  18 15:38 dynamixel-pantilt -> ttyUSB0
crwxrwxrwx  1 root       dialout   188,     0 7月  18 15:38 ttyUSB0

参考:

usb端口号绑定 - CAM& - 博客园

linux树莓派下绑定USB口,固定USB串口设备号,解决USB转串口ID相同情况,_蒋程扬的博客-CSDN博客

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

地球被支点撬走啦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值