- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在 Ubuntu 12.04.5 LTS,x86_64 上。
我有一个使用 libusb 与计算机通信的 USB 设备。将其插入计算机并运行通信程序后,出现以下错误:
libusb couldn't open USB device /dev/bus/usb/008/004: Permission denied.
libusb requires write access to USB device nodes.
libusb failed to find the Optotrak USB device. Are you sure you have set the udev permissions correctly?
所以如果我按如下方式修改/dev/bus/usb/008/004:
sudo chmod 777 /dev/bus/usb/008/004
再次运行通讯程序,设备正常运行。问题是每次我插入设备时,最后的数字都会改变,所以每次 USB 总线时我都必须 chmod,但由于并非所有用户都知道管理员密码,所以这是一个问题。
所以厂商建议编辑udev规则如下。在/etc/udev/rules.d 中创建一个 12-ndi-rules :
BUS=="usb", SYSFS{idVendor}=="0403", SYSFS{idProduct}=="da77", GROUP="plugdev"
(我已经用 lsusb 检查过 SYSFS 是正确的)
lsusb
Bus 008 Device 004: ID 0403:da77 Future Technology Devices International, Ltd
然后重新加载规则:
sudo udevadm control --reload-rules
但仍然没有正确设置总线 008/004 的权限。
如何使这些规则在每次重新启动时永久生效?如果我更改 USB 设备的端口,我也想让它们永久化。
最佳答案
好的,这里是让它工作的所有步骤。我在网上找到的所有回复都遇到了问题,到处都是点点滴滴,没有任何特定的顺序,也没有单一的工作解决方案,(运行 Android Studio、Jmonkey 3D 和 Ubuntu 14.04)
如果 adb devices 将 android 设备显示为 ??????????(无权限),请按照以下说明操作:
1) 创建文件/etc/udev/rules.d/51-android.rules
sudo gedit /etc/udev/rules.d/51-android.rules
2) 复制粘贴以下内容:
SUBSYSTEM=="usb", ATTRS{idVendor}=="0bb4", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0e79", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0502", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0b05", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="413c", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0489", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="091e", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0bb4", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="12d1", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="24e3", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="2116", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0482", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="17ef", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1004", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="22b8", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0409", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="2080", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0955", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="2257", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="10a9", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1d4d", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0471", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="04da", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="05c6", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1f53", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="04e8", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="04dd", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fce", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0930", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="19d2", MODE="0666", GROUP="plugdev"
3) 运行以下命令更改文件权限:
sudo chmod a+r /etc/udev/rules.d/51-android.rules
4) 通过usb连接手机并运行以下命令:
lsusb
查找您的设备示例 (Nexus 5):
Bus 003 Device 074: ID 18d1:4ee7 Google Inc.
对于 Nexus 5,供应商 ID 是 18d1,我的在总线“003”
5) 现在使用以下命令重新加载规则:
sudo udevadm control --reload-rules
sudo service udev restart
sudo udevadm trigger
6) 验证设备现在允许plugdev 用户组访问
ls -l /dev/bus/usb/<bus number from step 4>
例子:
ls -l /dev/bus/usb/003
crw-rw-rw- 1 root plugdev 189, 329 Jul 3 18:23 074
7) 运行adb devices 以确认权限正确并享受!
注意:如果您还没有创建 plugdev 组并添加您的用户名(如果权限被拒绝,请在前面加上“sudo”以下命令):
1) 添加plugdev组:
groupadd plugdev
2) 将您的用户名 添加到plugdev 组(useradd -G {group-name} 用户名):
useradd -G plugdev billy
3) 重新启动 udev(您可能需要注销并重新登录以更新用户组):
sudo service udev restart
关于linux - Udev 规则不适用于 Ubuntu 12.04 上的 libusb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25445178/
正在尝试安装 rtl-sdr (通过 git clone git://git.osmocom.org/rtl-sdr.git )感谢说明 here但不能超过 make在第一个指令序列中: cd rtl
好吧,我可能在做一些愚蠢的事情,但我无法让 libusb 让我终生将数据传输到我的设备。 代码: #include #include #include #include #include #
我运行这个 libusb_control_transfer(usb_handle,0xA1, 1, 0, 1, buf, 0x800, 1000); 并得到错误 libusb:error [submi
libusb 可让您通过设备的供应商和产品 ID 查找设备。但是,如果我有多个连接了相同 VID 和 PID 的设备,并且想通过知道其中一个的序列号来获取其中一个的句柄怎么办?有一个 libusb_o
我目前在Windows 7开发人员中。工作环境以获取使用libusbdotnet初始化的设备。 该设备(USB大容量存储设备)使用Windows的默认USB-MASS Storage驱动程序连接并运行
我正在尝试使用 libusb1.0.9 实现用户空间 USB 驱动程序。我有 lpc2148 蓝板(ARM7)。这个板由 Bertrik Sikken 先生加载了开源 USB 堆栈/固件。现在我的用户
我知道这件事太简单了,我会恨自己不得不问这个问题,但我的头因反复点击桌面而感到疼痛。我已经阅读了数十个 stackoverflow 和 google 结果,这些结果表明以下内容应该有效: $ ls /
我知道关于这个问题有很多问题,但具体来说我在 Ubuntu 上实现 libusb 库时遇到了问题。这是我的代码: struct usb_bus *busses; struct usb_bus *bus
我需要一些有关 Java 中 IllegalStateException 的帮助。我得到了一个应该从 USB 设备读取数据的源代码。 该代码尚未完成,但我已经收到以下错误报告 Exception in
我使用 libusb-1.0.9 和 NDK (Android 4.0.4+) 编写 Android 应用程序,它必须从 USB 声卡读取音频数据。来自 libusb 的 USB 设备成功打开,并且可
我正在编写的应用程序的一部分使用 libusb 与设备通信,我很难测试我的代码。是否有创建假 usb 设备的框架或其他模拟 libusb 的方法,以便更好地自动化测试、能够在 CI 上进行测试、重现边
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
我知道我的问题很基础,我有点不好意思问。所以我在我的 Oculus Rift 上使用 VRUI 时遇到了一些问题,而且我遇到了 USB 问题,所以为了进行完整性检查,我下载了 libusub-1.0.
我正在运行 Ubuntu 12.04 编译一个包含以下代码的 c++ 文件 #include #include using namespace std; int main(){ //poi
我正在尝试构建一个使用 libusb 的程序,但出现了很多错误,例如 i2cbrdg.c:84: error: implicit declaration of function ‘usb_init’
在 Linux 中使用 libusb 时是否有批量传输的最大长度? 例如,您可以传递任何正值作为函数 libusb_fill_bulk_transfer 的长度参数吗? 最佳答案 理论上它是目标系统上
我正在尝试使用 libusb-1.0 和 QtUsb 库访问 USB 设备。在我做一些更新之前,它是一个简单的批量设备。目前我在用 Linux nadhh.fritz.box 4.11.8-200.f
我正在编写一个简单的库,它使用 libusb 连接到我的自定义硬件,每 50 毫秒向主机设备发送一次信号。它旨在提供一个简单的抽象层,以便用户根本不会为 libusb 所困扰。我需要将指向非静态类成员
我使用 libusb 来枚举一些 USB 设备。现在我想获得“设备路径”。我认为它不叫 usb device-path,因为我用 google 没有成功。 如果我将 usb 设备与 linux 连接,
我正在使用此教程 link发送一个字符串以将其打印出来。然而,即使打印机显示“正在接收数据”,数据也不会被打印。在代码本身中,libusb_bulk_transfer 返回我想要打印的字符串中的字符数
我是一名优秀的程序员,十分优秀!