Ubuntu下USB权限问题以及udev规则文件笔记

2023-05-16

在ubuntu系统下使用传感器的时候,通常会遇到一些权限上的问题。比如我使用ROS驱动包来启动bluefox摄像头,如果没有任何关于权限上的处理就会提示权限问题导致无法正常启动该摄像头,如下图:


解决以上传感器权限问题的方法有很多,常用的有以下几种:


1. 解决的其中一个办法就是在终端中输入chmod指令,指定在当前终端下某个传感器挂载点的权限,指令如下:

$ sudo chmod 777 /dev/bus/usb/001/005

其中在输入该指令之前需要先弄清楚所开权限的传感器挂载点的位置,一般都在/dev/目录下面。有的是在/dev/目录的/bus/目录下,有的则是在/dev/目录下会直接出现。比如某些不需要驱动的usb摄像头,就位于/dev/目录位置名字为Video0。具体有两种方法可以查看传感器挂载点位置,一种是lsusb指令,如下图。


还有一种方法是直接进入/dev/目录下面,在里面可以查看USB摄像头的一些信息,如下图。


另外也可以不需要进入/dev/目录来列出挂载的传感器,如下:

$ ls /dev/ttyUSB*
$ ls /dev/ttyACM*


2. 上面的方式有个缺点就是每次关闭重新打开一个终端就会使得权限赋值失效并回归默认的权限状态。因此,每次使用传感器都需要提前采取赋权限操作,导致十分繁琐。所以可以采用以下的几种方式直接给传感器赋值永久的权限,这样每次使用就不需要再单独启动某个传感器的权限了。

一般默认情况下,只有root用户和dialout组的用户会有读写的权限,所以可以将用户加入到dialout组中获取串口读取权限。

$ sudo usermod -a -G dialout your_user_name
或者

$ sudo gpasswd -a your_user_name dialout
重启计算机,就可以使得配置生效。

3. 在udev下的添加用户自定义的设备挂载规则,这是本篇笔记中最为推荐的一种方式。因为手动编写规则一方面比较灵活,另一方面可以对多个传感器的情况下比较合理地实现映射挂载点。关于udev的规则原理在这里不在叙述,详细可以见我的另一篇专门介绍该设备管理器的博客,而具体的实现方式如下:

(1)进入/etc/udev/rules.d/目录下。

$ cd /etc/udev/rules.d/

(2)在该目录下创建对应传感器的规则文件,后缀为.rules,名字自己取。以rplidar为例子,创建rplidar.rules文件。

$ sudo touch rplidar.rules

(3)采用gedit打开新建的规则文件。

$ sudo gedit rplidar.rules
(4)规则文件下需要输入以下几个信息:KERNEL,SUBSYSTEMS,ATTRS{idVendor},ATTRS{idProduct},MODE和SYMLINK。他们分别表示内核设备名称、子系统、设备的VID、设备的PID、权限模式和符号链接。以上的几个配置参数表示传感器的内核设备名为KERNEL,而其设备的PID和VID为对应的值,然后会在/dev的目录下面产生一个符号链接设备并命名为SYMLINK对应的值,最后为该设备赋予MODE值对应的权限。

一般来说如果设备对应内核设备为ttyUSBx,那么KERNEL可以赋值为"ttyUSB*";ATTRS{idVendor}和ATTRS{idProduct}的值可以通过lsusb指令查看,如下图所示。


而MODE的值我们选择0777,该数值对应的权限为最高权限。而SYMLINK可以取rqlidar。当然除了这种方式查看设备对应的信息外,还有一种指令可以更详细地查看设备信息(推荐使用),具体方法如下:

udevadm info --attribute-walk --name=/dev/ttyUSB0
--attribute-walk表示指定设备的所有sysfs记录的属性,所以执行该指令会出现如下图一推信息。


然后通过lsusb显示的VID或者PID找到对应设备的信息。比如rplidar为10c4,那么找到该关键词所在的那一块就是rplidar对应的信息,如下图。


综上,如果是ttyUSB类型的设备,那么我们需要在规则文件中输入以下信息:

KERNEL=="ttyUSB*", SUBSYSTEMS=="usb", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE:="0777", SYMLINK+="rplidar"
如果是Video类型的,那么我们就在规则文件下输入以下信息:
KERNEL=="video*", SUBSYSTEMS=="usb", ATTRS{idVendor}=="07c7", ATTRS{idProduct}=="b1a2", SYMLINK+="pinhole"
KERNEL=="video*", SUBSYSTEMS=="usb", ATTRS{idVendor}=="07c7", ATTRS{idProduct}=="b1a2", SYMLINK+="fisheye"

(5)保存,退出规则文件。然后重启udev服务并重新插拔传感器的USB。

$ sudo service udev reload
$ sudo service udev restart
(6)如果要删除该rules也很简单,直接采用rm指令即可。但是删除对应的rules文件就会导致会到默认设置,即权限需要重新赋值,如下图。
$ sudo rm /etc/udev/rules.d/rplidar.rules
$
sudo service udev reload
$ sudo service udev restart

(7)当规则文件创建成功,可以通过ls指令查看创建的指向挂载点ttyUSB0的链接符号rplidar,如下。

$ ls -l /dev/rplidar

(8)当我们使用的传感器变多以后会出现多个传感器的VID和PID相同的情况。这时候我们需要采用另一种方式来区别传感器的类型,即增加新的匹配键来区分,具体处理方式如下。

在规则文件中,需要新加KERNELS匹配键,该属性可以区分相同设备ID的设备。具体的信息获取用上面已经提到过的指令打开系统属性信息列表,如下所示。

udevadm info --attribute-walk --name=/dev/ttyUSB0

将该信息添加到rules文件中即可,如下图。

(9)使用(8)中的方法来区分相同ID的传感器需要注意的KERNELS的值与现实物理USB接口有关,所以采用该方法以后不要随意更换传感器的USB接口。一旦更换USB接口,那么KERNELS的值会发现改变而导致无法找到该设备。所以更换USB接口以后要重新更新rules文件中的KERNELS的值。只要USB接口不变,那么不同顺序的插入都不影响Ubuntu识别传感器设备。

(10)根据udev规则来定义设备挂载点的其中一个好处就是可以将连接符应用到程序中。我们都知道一般计算机会根据插入先后顺序来分配设备的名字,比如ttyUSB通常是先插入的是0,然后是1、2和3等等。这样我们每次不同顺序插传感器都会使得设备名不相同,这会导致要对应这某种传感器去程序修改设备名非常麻烦。而利用规则文件就能够直接将连接符作为设备名写到程序中,这样即使下一次先插的传感器后插,设备名由ttyUSB0变成ttyUSB1都没有关系(udev会将对应的连接符映射到对应的设备名)。比如下面rplidar的ros驱动包。




参考博客

http://blog.csdn.net/linczone/article/details/48342419

微信公众号:ROS小课堂,微信号:ROS_Tutorials




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubuntu下USB权限问题以及udev规则文件笔记 的相关文章

随机推荐

  • Android布局常用

    1 控件隐藏 在XML 文件里设置属性隐藏 android visibility 61 34 invisible 34 android visibility 61 34 visible 34 android visibility 61 34
  • 乘法

    乘法 请仔细把下面的看懂 xff0c 看完后 xff0c 也许你能口算出 1 xff5e 199 之间数的平方 xff0c 或许能口算出多个数的结果 1 乘法的本质 xff1a 乘法的本质就是求和 从上面两张图片中 xff0c 你可以知道
  • Android Activity之间跳转与传值

    一 Activity 跳转与传值 xff0c 主要是通过 Intent 类来连接多个 Activity xff0c 通过 Bundle 类来传递数据 最常见最一般的页面跳转代码 xff0c 很简单 xff0c 如下 xff1a Intent
  • URLEncoder.encode和decode

    http www apkbus com forum php mod 61 viewthread amp tid 61 13853 amp fromuid 61 3402
  • JPCT-AE资料相关

    JPCT AE相关 1 网站参考 xff1a 官方网站 http www jpct net download html API http www jpct net jpct ae doc JPCT AE wiki http www jpct
  • 分享本人VSCode配色(如何修改VSCode各种颜色)

    按下Command 43 Shift 43 P打开命令面板输入settings Open Settings为用户自定义设置Open Default Settings为默认设置 xff08 只读 xff0c 不能修改的 xff09 选中Ope
  • ROS学习番外篇12—Mac M1(Pro+Max)安装ROS1或ROS2须知

    由于苹果换了芯片架构 xff0c 因此裸机安装ROS2或者源码安装ROS1和ROS2变得非常困难 使用Parallels Desktop或者其他虚拟机 xff08 比如UTM xff09 安装Ubuntu然后再在Ubuntu上安装ROS是目
  • stm32cubemx hal学习记录:PWR 低功耗停止模式

    一 低功耗停止模式 1 所有时钟都已经停止 2 进入方式 xff1a 配置PWR CR寄存器的PDDS 43 LPDS位 43 SLEEPDEEP位 43 WFI或WFE命令 3 唤醒方式 xff1a 任意外部中断 4 关闭所有1 8v区域
  • Ubuntu下查看文件、文件夹和磁盘空间的大小

    在实际使用ubuntu时候 xff0c 经常要碰到需要查看文件以及文件夹大小的情况 有时候 xff0c 自己创建压缩文件 xff0c 可以使用 ls hl 查看文件大小 参数 h 表示Human Readable xff0c 使用GB MB
  • stm32cubemx hal学习记录:FreeRTOS任务管理

    一 基本配置 1 配置RCC USART1 时钟84MHz 2 配置SYS xff0c 将Timebase Source修改为除滴答定时器外的其他定时器 xff0c 因为滴答定时器被用于时钟基准 xff0c 可以实现任务切换 Timebas
  • 【面试笔试-c/c++】2013年校园招聘创新工场笔试题(北邮场)

    2013年校园招聘创新工场笔试题 xff08 北邮场 xff09 及一面 题目节后补上 回家了 xff0c 上网不方便 面试题 一面 xff1a 1 手写二叉树的中序非递归遍历 xff0c 一步一步解释代码 xff0c 给个二叉树示范代码流
  • PX4驱动分析之MPU6000

    PX4驱动分析之MPU6000 前言 xff1a 首先分析PX4中MPU6000传感器驱动的注册 xff0c 调用 xff0c 实例的过程 xff0c 先要理解一个事情 就是PX4是使用了一个类Linux操作系统的Nuttx操作系统 也就是
  • PX4分析系列之添加北醒TOF传感器(使用UART)

    PX4分析系列之添加北醒TOF传感器 xff08 使用UART xff09 提示 xff1a 一个飞行器爱好者 xff0c 才疏学浅 通过自己学习PX4源码的过程 xff0c 进行分析和记录 欢迎各路大神讨论 xff0c 并指正文中错误 x
  • 产品化的理解

    我对产品化的理解 产品化的时机是看业务的需要 xff0c 不管是对前景的落实 xff0c 还是项目转化成产品 xff0c 这些都不是技术人员能考虑的 xff0c 业务的发展和策划 xff0c 如何进行市场细化等如果都由技术人员考虑 xff0
  • JS对象转insert语句

    function obj2Sql tablename obj var sqls 61 34 34 f 61 34 34 v 61 34 34 obj forEach o 61 gt f 61 34 34 v 61 34 34 for let
  • HTML5小试 双人贪吃蛇

    lt html gt lt head gt lt head gt lt body gt lt div style 61 34 float left 34 gt 当前速度1 xff1a lt button nclick 61 34 jianc
  • 九个Console命令,让js调试更简单

    九个Console命令 xff0c 让js调试更简单 一 显示信息的命令 lt DOCTYPE html gt lt html gt lt head gt lt title gt 常用console命令 lt title gt lt met
  • echarts自定义功能按钮图片 网络路径格式

    toolbox show true orient 39 vertical 39 x 39 left 39 top 39 20 39 feature myTool show true title 39 自定义扩展方法 39 icon 39 i
  • 上班摸鱼逛博客,逮到一个字节8年测试开发,聊过之后羞愧难当......

    老话说的好 xff0c 这人呐 xff0c 一旦在某个领域鲜有敌手了 xff0c 就会闲得某疼 前几天我在上班摸鱼刷博客的时候认识了一位字节测试开发大佬 xff0c 在字节工作了8年 xff0c 因为本人天赋比较高 xff0c 平时工作也兢
  • Ubuntu下USB权限问题以及udev规则文件笔记

    在ubuntu系统下使用传感器的时候 xff0c 通常会遇到一些权限上的问题 比如我使用ROS驱动包来启动bluefox摄像头 xff0c 如果没有任何关于权限上的处理就会提示权限问题导致无法正常启动该摄像头 xff0c 如下图 xff1a