问题描述
我已经使用DriverKit和USBDriverKit编写了一个系统扩展程序,该扩展程序似乎运行良好(在开发人员模式开启,SIP关闭,...仍在等待授权的情况下运行)。
当我插入USB设备并在终端中键入ioreg | grep com.myinc.mydriver
时,我看到一个条目:
+-o IoUserServer(com.myinc.mydriver ... registered,matched,active,busy 0 (0ms),retain 13
我拔下设备的插头,再做一次ioreg
,我得到的还是一样,但保留9。
如果我插入设备,则另一个ioreg
现在会显示2个条目(上一个和一个新条目)。
这正常吗?为什么上一个仍然处于活动状态?
在我的右下角中,我检查了我的Stop和free函数是否被调用,并且我想不到我错过的任何东西。
有人可以向我解释一下,还是让我指出我可能忘记做的事情?保留9与我在代码中的工作有关系吗?
解决方法
我发现了自己的问题,将在这里留下答案,以防其他人...
我使用IOUSBHostInterface
(来自CopyInterface()
)获得了IOUSBHostDevice
对象。
然后在这个对象上我叫Open()
。
在我的Stop()
实现中,我在接口对象上调用了Close()
,但我忘记了调用release
。
现在,当我断开设备的连接时,一旦我所有的free()
函数都被调用,在控制台中,我会收到消息“没有服务,正在退出”。