我已经使用DriverKit和USBDriverKit编写了一个系统扩展,它似乎工作得很好(在开发人员模式下运行,SIP关闭,...仍在等待授权)。
当我插入我的USB设备并在终端中输入ioreg | grep com.myinc.mydriver时,我看到一个条目:
+-o IOUserServer(com.myinc.mydriver ... registered, matched, active, busy 0 (0ms), retain 13
我拔下设备的插头,再做一次ioreg,我得到了同样的结果,但用的是reve9。
如果我插入我的设备,那么另一个ioreg现在显示2个条目(以前的一个和一个新的)。
这是正常的吗?为什么前一个仍然处于活动状态?
在我的dext中,我检查我的Stop和free函数是否被调用,并且我不能想到我错过了任何东西。
有没有人能给我解释一下,或者告诉我我可能忘记做什么了?retain 9与我在代码中所做的事情有关系吗?
发布于 2020-10-20 09:21:51
我找出了我的问题,并将在这里留下一个答案,以防它有助于其他人……
我使用CopyInterface() (从IOUSBHostDevice)获得了IOUSBHostInterface对象。然后在这个对象上,我调用了Open()。
在我的Stop()实现中,我在接口对象上调用了Close(),但是我忘记了调用release。
现在,当我断开我的设备时,一旦我所有的free()函数都被调用了,在控制台中我就会得到消息“没有服务离开,正在退出”。
https://stackoverflow.com/questions/64396264
复制相似问题