首页 文章

卸载仍然有实例的kext

提问于
浏览
4

我正在更新我的一个设备的驱动程序,并希望kextunload旧驱动程序和kextload新的驱动程序,因此不再需要重新启动 .

安装后我尝试:

sudo kextunload /System/Library/Extensions/Driver.kext

发生的错误如下所示:

(内核)无法卸载kext com.driver.Driver;类有实例:(内核)Kext com.driver.Driver类com_driver_Driver_USBAudioDevice有1个实例 . 无法卸载com.driver.Driver - (libkern / kext)kext正在使用或保留(无法卸载) .

ioreg中不存在该设备 . 如何找出阻止我卸载驱动程序的实例?

1 回答

  • 7

    如果你调用命令 kextstat ,它将显示所有已加载的内核扩展的列表,其中包含以下信息: -

    115 3 0xffffff7f814f4000 0x32000 0x32000 com.apple.iokit.IOAudioFamily(1.8.9fc11)<114 5 4 3 1>

    第一个数字(115)是内核扩展的id .

    最后,数字集<114 5 4 3 1>是此特定kext引用的其他内核扩展ID .

    如果你将kext的id与另一个中列出的任何一个匹配,那么这就是kextunload引用的引用 .

    还要注意,当在内核中编写任何代码时,全局变量在整个内核中是全局的,所以如果你声明任何可能没有唯一名称并被另一个kext使用的,我发现这会导致类似的问题 . 这里的解决方案是使用反向公司URI(例如com_apple_globalVarName)预先添加任何全局变量 .

相关问题