2015-07-07 9 views
6

çalışmıyor libusb_attach_kernel_driver` (çekirdek arayüzü geri gelmez):`Ben <code>libusb</code> kullandığı temiz benim Linux uygulamasını kapatılıyor bir sorun var

int rc; 

rc = libusb_reset_device(handle_); 
if (rc < 0) { 
    cerr << "Error resetting the device: " << libusb_error_name(rc); 
} 

for (int ifnum = 0; ifnum < 2; ifnum++) { 
    rc = libusb_release_interface(handle_, ifnum); 
    if (rc < 0) { 
     cerr << "Error releasing interface: " << libusb_error_name(rc); 
    } 
    if (libusb_kernel_driver_active(handle_, ifnum)) { 
     cerr << "Reattaching CDC ACM kernel driver."; 
     rc = libusb_attach_kernel_driver(handle_, ifnum); 
     if (rc < 0) { 
      cerr << "Error reattaching CDC ACM kernel driver: " << libusb_error_name(rc); 
     } 
    } 
} 

libusb_close(handle_); 
libusb_exit(NULL); 

sorun olduğunu çekirdek sürücüsü reattaching çalışmıyor edilir . Aslında libusb_kernel_driver_active, 1 döndürmüyor ancak ben yorumluyorum ve her zaman libusb_attach_kernel_driver numaralı telefonu arayabilirsem, /dev/ttyACM0 cihazımı asla geri alamıyorum. Bu durumda LIBUSB_ERROR_NOT_FOUND'u alırım.

+0

lütfen, ayrıntı için libusb_set_debug() kullanın. –

cevap

1

linux cdc-acm sürücüsü ek kodunu ayıklarken hata buldum ve sorunun kökenini anladım. Yeniden bağlanmanın çalışmamasının nedeni, CDC ACM cihazının hem kontrol hem de veri arayüzlerini talep ettiğimdi. Yalnızca kontrol arayüzünü ayırırsam/eklerseniz (ifnum == 0), her şey beklendiği gibi çalışır. Bu bir yerlerde belgelenmelidir.

İlgili konular