我正在使用MacOS(后来的iPadOS)的DriverKit开发USB驱动程序.驱动程序匹配、加载并能够与我的设备通信.然而,我注意到,当我拔下设备时,驱动程序进程仍在运行(如活动监视器中所示).如果我再次将其插入,则会启动第二个进程(第三个、第四个,依此类推).我实现了Stop()方法,如下所示:

kern_return_t
IMPL(MyDriver, Stop)
{
    kern_return_t ret = kIOReturnSuccess;

    os_log(OS_LOG_DEFAULT, "Stopping");
    ret = ivars->device->Close(this, 0);
    if (ret != kIOReturnSuccess) {
        os_log(OS_LOG_DEFAULT, "Error closing device: 0x%08x", ret);
    }
    
    ret = Stop(provider, SUPERDISPATCH);
    if (ret != kIOReturnSuccess) {
        os_log(OS_LOG_DEFAULT, "Error closing device: 0x%08x", ret);
    }
    
    os_log(OS_LOG_DEFAULT, "Stop finished.");

    return ret;
}

我已经确认确实调用了Stop方法,返回值为kIOReturnSuccess.我的驱动程序类的free()方法也在被调用.可能还值得注意的是,没有客户端应用程序与驱动程序通信(还没有走到那一步).

我还需要做些什么来告诉系统可以停止运行驱动程序进程吗?它不终止是正常的吗?

推荐答案

原来问题是我忘了在我的驱动程序对象的Free方法中调用super::free().修复后,当设备拔出时,驱动程序进程终止.

Ios相关问答推荐

Jenkins node 无法运行fastlane命令-未找到命令

clang:错误:SDK 路径中不包含libarclite

如何在 Flutter 应用程序中测试来自 App/Play Store 的移动深层链接?

Swift中是否有一种方法可以为可选属性创建一个计算(computed)属性

垂直分页 UIScrollView 高度不正确

更改订单时如何保存商品的位置?

iOS 16.4 更新后 Xcode 14.3 构建错误:找不到 libarclite_iphoneos.a,链接器命令失败

.onChange(of: ) 一次用于多个 @State 属性?

满足条件时 SwiftUI 动画背景 colored颜色 变化

无法初始化 FirebaseApp - Flutter

如何在不支持并发的自动关闭中修复'async'调用?

我可以使用同一个 Firebase 应用将多个 Flutter 应用添加到一个 Firebase 数据库吗?

UICollectionView - 水平滚动,水平布局?

UICollectionView - 动态单元格高度?

iOS 中的 Crashlytics 不会继续通过 Fabric 应用程序中的构建您的项目

是否可以在 iOS 9 上让您的 iPad 应用退出多任务处理?

如何识别导航堆栈中的前一个视图控制器

在 iOS 上编写文件

闭包不能隐式捕获变异的 self 参数

如何为 UILabel 的背景 colored颜色 设置动画?