与此处发布的问题类似: Can't Unload Kernel Extension; Classes Have Instances 我试图了解解决它需要做些什么。
使用我们的KEXT,我们有一个启动的launchctl守护进程,等待加载的kext,执行sysctl以加载KEXT的配置。
我们通过使用kext调用registerService()执行此操作:https://github.com/openzfsonosx/zfs/blob/master/module/zfs/zfs_osx.cpp#L192 而小“zconfigd”在这里等待它: https://github.com/openzfsonosx/zfs/blob/master/cmd/zconfigd/zconfigd.c#L186
相当一小部分代码,取自Apple的一个例子。所以我认为它会按预期发布一切?
如果我尝试卸载kext,它会拒绝(在Sierra上)由于Classes Have Instances。如果我杀了zconfigd(即使launchctl会启动一个新的)我可以kextunload它。据推测,一旦执行了sysctl,我就可以使它成为exit(0)
,但是在这个例子中弄清楚为什么它坚持使用Class会很好。大概这很简单。
我们还有另外一个类问题,但这是最简单的,我想从婴儿步骤开始。