相关文章推荐
纯真的领结  ·  http请求的中的 ...·  10 月前    · 
傻傻的大熊猫  ·  TS ...·  1 年前    · 

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
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博客

近期调试了一款云台,控制方面需要用到串口通信,调试过程中发现了一个问题,就是Linux分配给外设的USB端口号与端口的上电顺序有关,这就导致如果需要USB端口连接的外设多了之后,每次分配至云台的端口号不一致,因此就需要将云台的USB端口映射为一个固定的名字,这样每次程序调用这个固定的名字即可,就不需要每次根据实际的端口号改代码了。红色框中现实的就是我的云台设备的USB信息,如果不知道自己的硬件设备的信息是哪个,可以分别在插拔的状态下使用lsusb命令,然后找不同就好啦~.........
Linuxusb串口修改名称1 查看自己的串口号2 新建设备信息文件3 刷新串口4 重新查看串口 1 查看自己的串口号 fly@ubuntu:~/Desktop$ lsusb Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 003 Device 004: ID 0e0f:0002 VMware, Inc. Virtual USB Hub Bus 003 Device 003: ID 0e0f:0002 VMware, I
修改rules文件的PID和VID,通过lsusb命令查看PID和VID以及ls -l info /dev/laser查看是否修改成功。 sudo service reload sudo service restart 重新加载dev 参考连接:使用udev规则创建USB设备挂载点映射 – ROS小课堂 (corvin.cn)
网上方法很多,大多试过但是无效,该方法不完美但是亲测有效。 大致流程为获取对应usb的唯一信息,然后根据该唯一信息编写规则文件,在规则文件中依据唯一信息命名映射至真实usb口。 不完美之处在于唯一信息获取方式死板,无法批量,快速获得。 首先,树莓派usb真实名是树莓派按插入顺序自动命名的,USB串口设备的命名规则是 /dev/ttyUSB0 ,/dev/ttyUSB1,/dev/ttyUSB2。该...
由于ubuntu USB设备号为从零开始依次累加,所以多个设备每次开机后设备号不固定,机器人每次开机都要蛋疼的按顺序插, 在网上找到一种方法:udev的规则 udev的规则说明,可以参考博客说明:http://blog.csdn.net/cokewei/article/details/8281239 将端口映射到新的固定名字,并且设置其权限为可读。使用对应的id端口映射固定的...
由于usb串口号容易变,给程序的运行带来了些许不便,所以特此学习了一下固定设备usb串口号,主要有两种方法,各有利弊. 通过usb转串口的芯片不同,设串口名。 1.查看串口设备 lsusb (拔掉usb后,发现少了一行:Bus 001 Device 018: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port) 其中的“ID 067b:2303”就是我们需要用的(不同芯片会不一样,我这条是绿联的,最常见的
会报错 ls: 无法访问 ‘/dev/ttyUSB0’。 原因就是:这句命令只有当你的usb端口插上正确的usb转串口的设备后才能运行成功。 /dev/ttyUSB0指的就是USB转串口终端,要接USB转串口类型的设备,比如单片机等。 如上图,第一次没有插设备,报错。 插上设备后在输入命令才有正确输出。 附:各种tty接口型号 1、/dev/tty 大佬,对下面的内容不理解 5、drop_last (bool, optional): 如果设置为True:这个是对最后的未完成的batch来说的,比如你的batch_size设置为4,而一个epoch只有100个样本,那么训练的时候后面的2个因为不满足组成一个batch就被扔掉了。如果为False(默认),那么会继续正常执行,只是最后的batch_size会小一点 100÷4=25不是正好整除干净了吗?? 关于 GNURadio-OFDM 运行时掉帧问题的解决 ZYHH_: 博主您好,我现在在使用gnuradio 3.10.5,也遇到了丢帧的问题,请问通过您的这个方法可以解决吗