在 macOS 11 Big Sur 后卸载 kext

问题描述 投票:0回答:1

Apple 开发者文章 安装自定义内核扩展 指出:

在 macOS 11 及更高版本上卸载 kext 需要调用 kmutil 或 kextunload,然后重新启动系统。 kmutil 工具会在没有指定 kext 的情况下构建新的 kext 集合,但它不会立即安装该集合。仅在计算机重新启动后,系统才会安装新的 kext 集合。因此,卸载的 kext 实际上保持活动状态并运行,直到用户重新启动系统。

有关更多详细信息,请参阅 kmutil(8) 手册页。

此实现是在

kmutil
/
kextunload
命令或内核本身中更改的吗?我尝试查看 XNU 源代码中 /libkern/c++/OSKext.cpp 中
OSKext::unload
方法的更改,但无法确定它是否已更改。我找不到
kmutil
命令的任何源代码。

我想知道是否还有一种方法可以在不重新启动的情况下卸载并停止运行 kext,可能通过使用不调用

kextunload
的旧
kmutil
命令?

macos macos-big-sur iokit kernel-extension xnu
1个回答
0
投票

内核实际上不再支持在运行时卸载 kext,就像运行时加载也不再支持一样。内核现在被预先链接到一个映像中,包括预期需要的所有 kext,并且所有这些都在启动时一次性加载,然后在内核运行之前密封在内存中。然而,虽然每个 kext 都被加载到内存中,但它的初始化代码只会运行,并且在实际需要时才会完全激活。

在这种安排下,既不可能加载额外的驱动扩展,也不可能在运行时从内存中删除加载的驱动扩展。更改 kext 集时,必须预先链接并启动新的内核映像。

© www.soinside.com 2019 - 2024. All rights reserved.