我正在更新其中一台设备的驱动程序,并希望 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 中不存在该设备。
我怎样才能找出这个阻止我卸载驱动程序的实例是什么?
如果你调用命令kextstat,它将显示所有已加载的内核扩展的列表,其中包含如下信息:-
115 3 0xffffff7f814f4000 0x32000 0x32000 com.apple.iokit.IOAudioFamily (1.8.9fc11)
第一个数字 (115) 是内核扩展的 id。
最后,数字集 是此特定 kext 引用的其他内核扩展 id。
如果您将 kext 的 id 与另一个中列出的任何一个相匹配,那么这就是 kextunload 所引用的引用。
另请注意,在内核中编写任何代码时,全局变量在整个内核中都是全局的,因此,如果您声明了任何可能没有唯一名称并由另一个 kext 使用的变量,我发现这会导致类似的问题。这里的解决方案是在任何全局变量前面添加反向公司 URI(例如 com_apple_globalVarName)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)