如何解决运行Node.js的Raspberry Pi(Debian)上的LIBUSB_ERROR_BUSY

我在树莓派3(debian)上运行node.js

我有一个小型的原型项目,它从我的涡轮教练机上的ANT +发射机收集数据,该数据通过Suunto Movestick USBencryption狗发送。

我正在使用Ant-Plus节点模块来pipe理ANT +协议以及将数据输出到控制台并通过REST API发送到云存储的脚本。

无论如何,切换到追逐,这是一切工作正常,多个进程启动和停止没有问题,直到我无意中击中ctrl + z而不是按ctrl + c

现在,当我尝试运行我的脚本时,出现以下错误:

/home/pi/ant-plus/node_modules/usb/usb.js:168 this.device .__ claimInterface(this.id)^

 Error: LIBUSB_ERROR_BUSY at Error (native) at Interface.claim (/home/pi/ant-plus/node_modules/usb/usb.js:168:14) at GarminStick2.USBDriver.open (/home/pi/ant-plus/build/ant.js:287:20) at Object.<anonymous> (/home/pi/ant-plus/sample/cadence-sensor.js:39:12) at Module._compile (module.js:409:26) at Object.Module._extensions..js (module.js:416:10) at Module.load (module.js:343:32) at Function.Module._load (module.js:300:12) at Function.Module.runMain (module.js:441:10) at startup (node.js:139:18) 

看来,由于节点进程没有被正常closures,有些进程仍然连接到USB。

我已经尝试了各种方法来杀死这个过程:

 ps | grep <something> kill <somepid> killall node 

但不知怎的,我不认为这是我需要杀死的节点进程,我“感觉”就像我需要以某种方式清理USB接口,但我不知道如何做到这一点。

该项目使用node-usb库,但我不确定是否可以用某种方式来清理。

我对此做了一些研究:原因是Raspberry Pi将内核驱动程序附加到连接的设备上。 您需要检查内核驱动程序并在声明该接口之前将其分离。

看到你正在使用node-usb ,这里有一些伪代码:

 device.open() const deviceInterface = device.interfaces[0] let driverAttached = false if (printerInterface.iscoreelDriverActive()) { driverAttached = true deviceInterface.detachcoreelDriver() } deviceInterface.claim() // ... use the device interface deviceInterface.release(() => { if (driverAttached) { deviceInterface.attachcoreelDriver() } device.close() })