在Mac OS X Mountain Lion上,libusb_claim_interface失败

7

我已经搜索了几个小时,但没有结果。我在很多地方都看到说libusb_detach_kernel_driver不支持Mac OS X,但是我还没有找到修补程序或替代方法。

libusb_claim_interface返回以下内容:libusb: 0.863377 error [darwin_claim_interface] USBInterfaceOpen:另一个进程已经独占访问该设备

如何从内核中分离USB设备?


嗨,乔治!你解决过这个问题吗?我在Mac OS X Mavericks上遇到了相同的USBInterfaceOpen错误。无论我尝试什么,都无法声明我的CDC设备接口。 - josef.van.niekerk
很遗憾,我没有。如果你有什么想法,请在这里告诉我们! - George Morgan
我得到的最接近的解决方案是有人告诉我编写自己的.kext驱动程序文件。此外,您可能会在我的StackOverflow问题中找到一些帮助:https://dev59.com/OHnZa4cB1Zd3GeqPsqWe 最好的方法是尝试串行通信路线,我正在这里尝试:http://www.microchip.com/forums/tm.aspx?high=&m=762247&mpage=1#762269 - josef.van.niekerk
是的,那正是我最终所做的。如果你写了那个 kext,请告诉我。如果你需要帮助,也许我们可以想出一些解决方案。 - George Morgan
1个回答

3

许多设备自动附带驱动程序,因此在OSX中识别它们为USB设备时,您将无法声明该设备,除非您在运行代码和声明设备之前手动强制系统分离该设备。例如,如果它将AppleUSBCDC设备连接到某个您插入的独特USB设备上,则必须执行以下操作:

sudo kextunload -b com.apple.driver.AppleUSBCDC

在运行试图声明该接口的应用程序之前。

在我的情况下,是sudo kextunload -b com.apple.driver.AppleUSBFTDI解决了问题。有没有办法知道哪个驱动程序实际上正在占用设备? - Ákos Vandra-Meyer
我正在使用Arduino Nano进行实验,并希望通过Mac上的Android模拟器与USB通信。遇到了类似的错误,发现操作系统将Nano识别为FTDI设备,因此我使用以下命令解决了问题: sudo kextunload -b com.apple.driver.AppleUSBFTDI - Eurospoofer
对于macOS Mojave: sudo kextunload -b com.apple.driver.usb.cdc.acm - Gamadril
1
在Mojave 10.14.6 (18G87)上找不到以上任何扩展名。 - Vadim Filin
这是libusb文档中讨论的三种方法之一:https://github.com/libusb/libusb/wiki/FAQ#How_can_I_run_libusb_applications_under_Mac_OS_X_if_there_is_already_a_kernel_extension_installed_for_the_device - Matt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接