linux libusb使用libusb_claim_interface失败(-6,Resource busy)解决方案

在知乎上发现了一篇博客,给了我很大的启发,也是resource的最终解决方案。

 

 

这里查看内核程序是否激活的函数是 libusb_kernel_driver_active,放在代码中如下所示

 

//check kernel active
  if (libusb_kernel_driver_active(dev_handle, 0) == 1)   //!!!@@@@@@!!! Interface Number
  {
    printf("USB Kernel Driver Active \n");

    if (libusb_kernel_driver_active(dev_handle, 0) == 0)
    {
      printf("Kernel Driver Detached \n");
    }
  }


  //Write----------------------------------


  //如果内核驱动程序是激活的,必须先调用这个函数,再调用libusb_claim_interface!!!!!
  libusb_detach_kernel_driver(dev_handle, 0);           //!!!@@@@@@!!! Interface Number


  char senddata[4] = { 'a','b','c','d' };       //!!!@@@@@@!!! 发送数据

  rst = libusb_claim_interface(dev_handle, 0);  //!!!@@@@@@!!! Interface Number
  if (rst < 0)
  {
    printf("%d \n", rst);  //LIBUSB_ERROR_BUSY
    printf("Cannot Claim Interface \n");
  }

 

本代码中先用libusb_kernel_active获取驱动是否被加载,如果有,则必须添加下方的libusb_detach_kernel_driver,随后使用claim_interface才可以正常工作。

 

如有疑问请留言。

 

 

 

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页