声明界面时出现错误的usb4java库

时间:2015-03-05 18:13:26

标签: java usb usb4java

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

问题是我在尝试声明我的USB设备的界面时出错了。错误在这一行:

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

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

是否有人知道我为什么会遇到此错误或如何修复错误?

3 个答案:

答案 0 :(得分:3)

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

经过长时间的谷歌搜索,我终于找到了这个帮助我的just get the names of USB devices attached to a system?,现在我的代码就像魅力一样。

解决方案是here,因为mac会自动声明设备,我们可以为它创建一个虚拟驱动程序。

以下是步骤如何操作。

  1. /System/Library/Extensions/Proxmark3.kext/Contents 中创建Info.plist,如果缺少,则应创建父文件夹,文件内容应该像这样的:
  2. 
    
        <?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>
    &#13;
    &#13;
    &#13;

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

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

      sudo chown -R root:wheel Proxmark3.kext

           

      sudo chmod -R 755 Proxmark3.kext

           

      sudo kextcache -system-caches

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

答案 1 :(得分:3)

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

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

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

虽然十六进制数1234是vendorid,而5678是附加USB设备的产品,可以通过“lsusb -v”找到。示例规则允许用户组“用户”访问指定的USB设备。重新启动后,将应用规则。

根据Linux版本的不同,路径可能会有所不同。

答案 2 :(得分:0)

adb服务器在MacOS上运行时出现此错误。重新启动计算机已释放界面,以便我可以再次声明它。但是,任何时候adb启动,它都会锁定USB接口,并且需要重新启动计算机。