加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – libusb基本的例子想要的

发布时间:2020-12-13 23:55:19 所属栏目:Linux 来源:网络整理
导读:我正在编写用户空间程序,旨在通过usb控制某些设备,所以我决定使用libusb(libusb-1.0)向该设备发送控制消息并从该设备接收响应. 但我不断从我的代码中收到以下一堆错误(即使它是使用’sudo’执行的): USB error: could not set config 0: Device or resource
我正在编写用户空间程序,旨在通过usb控制某些设备,所以我决定使用libusb(libusb-1.0)向该设备发送控制消息并从该设备接收响应.

但我不断从我的代码中收到以下一堆错误(即使它是使用’sudo’执行的):

USB error: could not set config 0: Device or resource busy
set configuration: failed
Check that you have permissions to write to 007/012 and,if you don't,that you set up hotplug (http://linux-hotplug.sourceforge.net/) correctly.
USB error: could not claim interface 0: Device or resource busy
claim interface: failed
USB error: error submitting URB: No such file or directory
bulk writing: failed
USB error: error submitting URB: No such file or directory
bulk reading: failed
response was:

代码是:

usb_dev_handle* find_device ();

int 
main (int argc,char *argv[])
{
    usb_dev_handle* udev;
    int status;
    char request[] = "K1"; // 'ping' command used to check communication
    char response[256];

    udev = find_device ();
    // udev is successfully found here

    status = usb_set_configuration (udev,0);
    printf ("set configuration: %sn",status ? "failed" : "passed");

    status = usb_claim_interface (udev,0);
    printf ("claim interface: %sn",status ? "failed" : "passed");

    status = usb_bulk_write (udev,3,request,sizeof (request),500);
    printf ("bulk writing: %sn",status ? "failed" : "passed");

    status = usb_bulk_read (udev,2,response,sizeof (response),500);
    printf ("bulk reading: %sn",status ? "failed" : "passed");

    printf ("response was: %sn",response);

    usb_close (udev);

    return 0;
}

代码有什么问题?它是如何修复的?

操作系统:Ubuntu 10.10

解决方法

回答这个问题,因为我在同一个操作系统上遇到了这个问题,并且能够以下列方式解决:

下载并编译最新的libusb源代码1.0.8.

以下是我用于声称USB接口0的一些API调用:

libusb_init(NULL);
libusb_open_device_with_vid_pid(NULL,vendor_id,product_id);
libusb_detach_kernel_driver(devh,0);
libusb_claim_interface(devh,0);
libusb_close(devh);
libusb_exit(NULL);

以上示例中的变量描述:

static struct libusb_device_handle *devh = NULL;
uint16_t vendor_id;
uint16_t product_id;

要获取供应商ID和产品ID,您可以运行以下命令(例如我的设备信息)

$lsusb

Bus 001 Device 013: ID 0930:6544 Toshiba Corp. Kingston DataTraveler 2.0 Stick (2GB)

粗体冒号分隔的字符串分别包含供应商和产品ID.

如何编译代码:

我使用以下命令编译我的代码:

/bin/bash libtool –silent –tag=CC –mode=link g++ -Wall -Wundef -Wunused -Wshadow -D_DEBUG -I../libusb -g -O2 -o read read.cpp ../libusb/libusb-1.0.la -lusb-1.0 -lrt

从提取的libusb-1.0.8目录将libtool复制到编译区域.

希望这可以帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读