我正在更新我的一个设备的驱动程序,并希望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 回答
如果你调用命令 kextstat ,它将显示所有已加载的内核扩展的列表,其中包含以下信息: -
第一个数字(115)是内核扩展的id .
最后,数字集<114 5 4 3 1>是此特定kext引用的其他内核扩展ID .
如果你将kext的id与另一个中列出的任何一个匹配,那么这就是kextunload引用的引用 .
还要注意,当在内核中编写任何代码时,全局变量在整个内核中是全局的,所以如果你声明任何可能没有唯一名称并被另一个kext使用的,我发现这会导致类似的问题 . 这里的解决方案是使用反向公司URI(例如com_apple_globalVarName)预先添加任何全局变量 .