繁体   English   中英

Usb4java库,声明接口时出错

[英]Usb4java library, error while claiming an interface

在这里,我使用库usb4java来访问我的USB设备。

问题是,当我尝试声明USB设备的接口时出现错误。 错误在此行上:

int msg = LibUsb.claimInterface(deviceHandler,1);

错误:USB错误3:无法声明接口:访问被拒绝(权限不足)

有谁知道为什么我有这个错误或如何解决?

我遇到了同样的问题,我的环境是Mac OS X 10.9

在与google进行长时间搜索之后,我终于发现这只是获取连接到系统的USB设备的名称? 这帮助了我,现在我的代码就像魅力。

解决方案在这里 ,因为mac会自动声明设备,我们可以为其创建虚拟驱动程序。

这是步骤。

  1. /System/Library/Extensions/Proxmark3.kext/Contents中创建Info.plist,如果缺少,则应创建父文件夹,文件内容应如下所示:

  <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <!-- This is a dummy driver which binds to Proxmark. It --> <!-- contains no actual code; its only purpose is to --> <!-- prevent Apple's USBHID driver from exclusively --> <!-- opening the device. --> <plist version="1.0"> <dict> <key>CFBundleDevelopmentRegion</key> <string>English</string> <key>CFBundleIconFile</key> <string></string> <key>CFBundleIdentifier</key> <string>com.proxmark.driver.dummy</string> <key>CFBundleInfoDictionaryVersion</key> <string>6.0</string> <key>CFBundlePackageType</key> <string>KEXT</string> <key>CFBundleSignature</key> <string>????</string> <key>CFBundleVersion</key> <string>1.0.0d1</string> <key>IOKitPersonalities</key> <dict> <!-- The Proxmark3 USB interface --> <key>Proxmark3</key> <dict> <key>CFBundleIdentifier</key> <string>com.apple.kpi.iokit</string> <key>IOClass</key> <string>IOService</string> <key>IOProviderClass</key> <string>IOUSBInterface</string> <key>bConfigurationValue</key> <integer>1</integer> <key>bInterfaceNumber</key> <integer>0</integer> <key>idProduct</key> <integer>{your-usb-hardware-product-id}</integer> <key>idVendor</key> <integer>{your-usb-hardware-vendor-id}</integer> </dict> </dict> <key>OSBundleLibraries</key> <dict> <key>com.apple.iokit.IOUSBFamily</key> <string>1.8</string> </dict> </dict> </plist> 

注意 :{your-usb-hardware-product-id}和{your-usb-hardware-vendor-id}必须是您自己的硬件ID,可以从“ 关于本机 - 系统报告 - 硬件 -USB”获得

  1. 输入/ System / Library / Extensions ,然后以ROOT身份运行

须藤chown -R root:wheel Proxmark3.kext

须藤chmod -R 755 Proxmark3.kext

sudo kextcache-系统缓存

  1. 重新启动系统并查看结果。

对于Linux系统,听起来好像用户无权访问USB设备。

可以通过在/etc/udev/rules.d中添加规则(例如,名称为“ 50-usb-permissions.rules”)和内容的方式来更改此规则

SUBSYSTEM=="usb", ATTR{idVendor}=="1234", ATTR{idProduct}=="5678",
    MODE="0666",GROUP="users"

十六进制数字1234是连接的USB设备的供应商ID,5678是连接的USB设备的产品ID,可通过“ lsusb -v”找到。 该示例规则允许用户组“用户”访问指定的USB设备。 重新启动后,将应用该规则。

取决于Linux版本,路径可能有所不同。

当adb服务器在MacOS上运行时出现此错误。 重新启动计算机会释放该接口,以便我可以再次声明它。 但是,每当adb启动时,它将锁定USB接口,并再次要求重新启动计算机。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM