我正在编写用户空间程序,旨在通过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: %s\n", status ? "failed" : "passed");
status = usb_claim_interface (udev, 0);
printf ("claim interface: %s\n", status ? "failed" : "passed");
status = usb_bulk_write (udev, 3, request, sizeof (request), 500);
printf ("bulk writing: %s\n", status ? "failed" : "passed");
status = usb_bulk_read (udev, 2, response, sizeof (response), 500);
printf ("bulk reading: %s\n", status ? "failed" : "passed");
printf ("response was: %s\n", 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复制到编译区域.
希望这可以帮助.
标签:linux,libusb 来源: https://codeday.me/bug/20190715/1471810.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。