以非 root 用户身份使用 libusb-1.0 访问 USB 设备

2024-04-12

我正在尝试以 RHEL5 上的非 root 用户身份连接 USB 设备。该设备是一个 GPIO 接口(其文档可以在http://www.xdimax.com/sub20/sub20.html http://www.xdimax.com/sub20/sub20.html)它使用 libusb-1.0。使用 API 打开设备的过程是:

sub_device d;
d = sub_find_devices(0);
sub_handle h = sub_open(d);

当我这样做时,sub_find_devices()通话有效,但在sub_open()调用时,我收到 libusb 错误 -3,这表明我没有权限打开设备进行写入。

我对这个问题做了一些研究,发现我应该创建一个 udev 规则。在设备的 sysfs 节点上使用 udevinfo,我得到:

looking at device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2':
KERNEL=="2-1.2"
SUBSYSTEM=="usb"
SYSFS{configuration}==""
SYSFS{serial}=="15F2"
SYSFS{product}=="SUB-20"
SYSFS{manufacturer}=="XDIMAX"
SYSFS{maxchild}=="0"
SYSFS{version}==" 1.10"
SYSFS{devnum}=="6"
SYSFS{speed}=="12"
SYSFS{bMaxPacketSize0}=="64"
SYSFS{bNumConfigurations}=="1"
SYSFS{bDeviceProtocol}=="00"
SYSFS{bDeviceSubClass}=="00"
SYSFS{bDeviceClass}=="ff"
SYSFS{bcdDevice}=="0001"
SYSFS{idProduct}=="ffc3"
SYSFS{idVendor}=="04d8"
SYSFS{bMaxPower}=="100mA"
SYSFS{bmAttributes}=="80"
SYSFS{bConfigurationValue}=="1"
SYSFS{bNumInterfaces}==" 1"

然后我在文件中创建了以下 udev 规则/etc/udev/rules.d/991-local.rules:

SYSFS{idVendor}=="04d8", SYSFS{idProduct}=="ffc3", NAME="sub20", GROUP="582", MODE="0660"

582是我的普通用户所属组的GID。我也尝试了使用组名称的规则,但它不起作用。创建此规则后,设备文件/dev/sub20使用正确的权限创建,但仅在插入设备时存在,这使我有理由相信 udev 规则在正确的设备上匹配。但是,我的代码仍然出现错误-3。

对代码进行 strace 发现了这个调用:

open("/dev/bus/usb/002/006", O_RDWR)    = -1 EACCES (Permission denied)

的权限/dev/bus/usb...节点仍然是 root:root,所以这可能表明我的 udev 规则有问题,尽管我不知道这可能是什么。

如果我尝试打电话给open("/dev/sub20", O_RDWR),我得到返回值ENXIO (No such device or address),udev 规则中另一个可能的错误指标,尽管/dev/sub20文件显然以某种方式与正确的设备相关联,因为它仅在设备插入时才存在。

我还能做些什么来尝试让它发挥作用?


我用来访问带有 libusb 的设备的 udev 规则如下所示:SUBSYSTEMS=="usb", ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="ffc3", SYMLINK+="sub20", GROUP="usb", MODE="660"。它应该只是向设备添加一个符号链接,但此后权限也适用于我(我是 usb 组的成员)。

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

以非 root 用户身份使用 libusb-1.0 访问 USB 设备 的相关文章

随机推荐

  • 如何打开我的 options.html?目前我得到 Cannot read property 'create' of undefined

    xhr onreadystatechange function if this readyState this HEADERS RECEIVED chrome tabs create url chrome extension kgllckj
  • 如何在运行时将图像插入到 WPF RichTextBox 的文本之间,以便文本漂浮在图像周围

    我正在尝试在运行时将图像插入到 WPF RichTextBox 中的文本之间 以便文本浮动 我尝试使用浮动框 但最终结果是图像旁边只能设置一行 其余内容会移到底部 这是我迄今为止用于插入图像的代码 private Image SelectI
  • Kotlin:如何让Android Studio在类底部实现接口的功能

    在 Kotlin 类中实现接口时 当我在 ClassName 上按 Alt Enter 时 我可以让 IDE 通过 实现成员 添加接口的功能 在 Kotlin 中 这些函数被添加到类的顶部 这有点烦人 我希望将它们添加到类的末尾 就像在 J
  • Python 中的简单用户名和密码应用程序

    我正在尝试使用字典构建一个简单的登录和密码应用程序 它工作正常 除了检查登录是否与密码匹配的部分 在底部显示 登录成功 如果我要创建登录名 a 和密码 b 然后创建登录名 b 和密码 a 那么如果我尝试使用登录名 a 和密码 a 登录 它就
  • 使用 blob 创建 json 文件

    我已经在字符串中编写了 json 代码 我想使用 xmlhttp 作为 json 文件发送它 可以用 blob 来做吗 var cleanScript type script api key api key data data inputs
  • 修改android中的光标列值

    我有一个从 SQLiteDataBase 对象返回的游标 我可以使用 getXXX 从光标获取列的内容 但在我的情况下 我想使用修改光标中的 更新 数据setXXX 方法 我知道没有setXXX 方法 但 CursorWindow 对象具有
  • 使用 strcpy 到 mmap 文件时出现总线错误(核心转储)

    我有一个简单的程序 int main void int fd const char text This is a test fd open tmp msyncTest O CREAT O TRUNC O RDWR S IRWXU S IRW
  • 如何使用 PHP 发送电子邮件?

    我在网站上使用 PHP 并且想添加电子邮件功能 I have Wamp服务器 https en wikipedia org wiki WampServer安装 如何使用 PHP 发送电子邮件 使用 PHP 是可以的mail http php
  • Google 图表调用 onmouseover 事件

    我一整天都在研究这个问题 但没有成功 我有一个显示一些数据的谷歌图表 工作得很好 我一直在研究更详细的图表 包括大约十几个图表图例项目 我想在图表下方显示我的图例 因此我将其位置设置为底部 但图表生成的 丑陋 分页对我的经理来说并不真正有吸
  • 何时使用 for 循环而不是 while 循环?

    我们可以使用 for 循环和 while 循环来达到相同的目的 如果我使用 for 而不是 while 它们会以什么方式影响我们的代码 if else 和 switch case 之间也会出现同样的问题吗 如何决定使用什么 例如 您更喜欢哪
  • 解决合并冲突:强制覆盖所有文件

    我正在开发 git 存储库我自己 所以是的 我知道这样做的含义和警告 并且不知何故 其中一棵树在不应该被推送后得到了提交 现在我试图撤回 它抱怨数百个合并冲突 有没有办法告诉 git强行地覆盖来自远程服务器的本地所有文件吗 有没有比这样做更
  • 带有 SVG 图像数据 URI 的背景图像中的 SCSS 变量

    在下面的SCSS中 我想使用fg color内的变量url background image属性 fg color ff6464 i icon back background image url data image svg xml cha
  • NGINX 添加两个变量/参数编号

    我正在尝试设置一个 Nginx 我想在其中将两个数字相加 server server name pr d review apps example com location set port 50000 1 proxy pass http l
  • 奇怪的旋转器。如何修复它?

    这是我填充微调器的代码 它看起来很奇怪而且丑陋 Override protected void onPostExecute final List
  • 忽略 ggplot2 geom_violin 中的异常值

    有没有办法忽略异常值geom violiny 轴图是否与 Q1 和 Q3 分位数相关 range 1 5以 R 为基数 如果这可以自动化 即不只是调用特定的 y 轴限制 那就太好了 我在这里看到使用 geom boxplot 的解决方案 忽
  • 在 GDI+ 中调整大小时出现幽灵边框(“响铃”)

    发生的情况 仅在某些图像上明显 是我会看到一个 1 像素白色边框 该边框插入一个像素 它似乎发生在明亮但不白色的区域 例如天空 这类似于某些东西过度锐化并且在高对比度边缘旁边可以看到重影边界 这是完美重现它的重现代码 我正在使用所有最高质量
  • 设置日期选择器的默认日期格式?

    我有一个页面可以跟踪各种日期 所以我最终通过 jquery 使用 datepicker 10 200 次 我想将日期选择器的所有情况的默认设置为 yy mm dd 但我似乎不知道如何设置 我最终通过 jquery 使用 datepicker
  • 从 .txt C 读取

    我在C语言方面遇到了一些麻烦 我有一个 txt 文件 其中包含以下形式的各行 F 65 S 4 1 139 56 3704 26 和我的程序 p fopen dados txt r if p NULL printf n nNao foi p
  • 保存EditText并自动检索

    您好 我正在尝试将 EditText 小部件值保存在手机 平板电脑的内部存储器中 以便应用程序关闭或活动停止时可以自动检索它们 所有这些都可以使用保存按钮进行 小部件的值由用户输入 您应该使用共享首选项 共享首选项用于将数据存储在本地应用程
  • 以非 root 用户身份使用 libusb-1.0 访问 USB 设备

    我正在尝试以 RHEL5 上的非 root 用户身份连接 USB 设备 该设备是一个 GPIO 接口 其文档可以在http www xdimax com sub20 sub20 html http www xdimax com sub20