无法卸载内核扩展;类有实例

2023-11-23

我正在为音频设备驱动程序编写 OSX 内核扩展(它是软件,但模拟硬件设备)。

在开发过程中,完全卸载现有的旧版本,然后从头开始构建并安装新版本会很方便。但是,有时如果不重新启动系统,这似乎是不可能的。

程序本身没有运行,源文件已从/System/Library/Extensions/ dir.

But kextstat显示单个实例:

$ kextstat | grep 'com.foo.driver.bar'
219 0 0xfff123 0x5000 0x5000 com.foo.driver.bar (0.0.1) <102 5 4 3>

(...意义:)

Index Refs Address Size Wired Name (Version) <Linked Against>

所以我的驱动程序实例有 0 个引用,但是kextunload有时会失败,抱怨现有实例:

$ sudo kextunload -b com.foo.driver.bar
(kernel) Can't unload kext com.foo.driver.bar; classes have instances:
(kernel)     Kext com.foo.driver.bar class FooBarDriver has 1 instance.
(kernel)     Kext com.foo.driver.bar class com_foo_driver_bar has 1 instance.
Failed to unload com.foo.driver.bar - (libkern/kext) kext is in use or retained (cannot unload).

当发生这种情况时,没有办法“强制”卸载 kext(据我所知)。

我是否正确猜测这个单个实例仍然存在,因为正在运行的操作系统内核在内存中保存了引用?这似乎不对,因为那时kextunload总是会失败。那么为什么kextunload仅有时需要重新启动系统才能“完全”卸载所有驱动程序实例?


Running kextunload对于 IOKit kext 将(如果没有其他 kext 依赖它)导致内核尝试terminate()该 kext 中位于 I/O Kit 注册表中的类的任何实例。然后它会稍等一下并检查该 kext 的类中是否仍有实例。如果没有,它将卸载 kext。如果实例仍然存在,kextunload失败(不过,终止的实例保持终止状态;我的意思是 I/O 套件匹配不会在其提供程序上重新运行)。

所以不知何故,你仍然会得到实时实例。

  • 一种可能性是你的对象拒绝terminate()。如果他们的客户不会放弃控制权,则可能会发生这种情况,例如您无法卸载顶部已安装文件系统的磁盘的驱动程序。不响应终止消息的用户空间客户端是另一个示例。

  • 否则,实例将终止,但不会被释放。由于它们似乎属于您的两个主要驱动程序类别,因此如果您没有任何不会放弃其声明的用户客户端,我将冒险并建议您可能有一个循环引用。如果不是这样,你只需要寻找retain()s 与 a 不匹配release()。我给出了一些关于如何追踪这些的提示在这个答案中.

如果实例终止并取消注册,它们将不再出现在ioreg命令行工具,因此这是检查此处适用两种情况中哪一种的简单方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法卸载内核扩展;类有实例 的相关文章

  • 在C语言中如何清屏? [复制]

    这个问题在这里已经有答案了 我想清除屏幕上的所有文字 我尝试过使用 include
  • 为什么我的 PyGame 应用程序根本不运行?

    我有一个简单的 Pygame 程序 usr bin env python import pygame from pygame locals import pygame init win pygame display set mode 400
  • npm install 不起作用,抛出错误

    我正在尝试在 nodejs 中安装 yo 和其他一些软件包 但是我不断收到错误 我是节点新手 所以我有点迷失 我运行的是 Mac OS X 10 10 3 我正在使用的命令是 sudo npm install global yo 这样做会给
  • pip3:错误的解释器:没有这样的文件或目录

    我正在尝试使用安装依赖项pip3 command 当前场景 Dev which python Users Dev anaconda bin python Dev which python3 usr local bin python3 Dev
  • Docker 容器 - 如何配置使其在 vagrant 中运行时获得可行的 IP 地址?

    Docker www docker io 看起来棒极了 然而 安装 VirtualBox 后 Vagrant 最后是 Mac 上的 Docker 我发现无法从另一台计算机 或从 Mac 上的终端会话 访问 Docker 容器中运行的服务 我
  • 如果加载 dylib,垃圾收集工作队列会崩溃

    我们正在将应用程序从 10 6 移植到 10 8 我正在查看我们在应用程序中加载的 dylib 我面临着非常不寻常的崩溃垃圾收集工作队列并附有以下消息 malloc Thread suspend unable to suspend a th
  • 将 Armadillo C++ 库导入 Xcode

    我是 Mac 用户 正在尝试安装和导入 C Armadillo 库 以下是我到目前为止所采取的步骤 1 我从其网站下载了犰狳库 2 我仔细阅读了下载文件中的 Readme txt 文件 解释了如何安装它 3 我使用CMake将犰狳下载文件制
  • 开发者可以在 Windows 应用程序中使用 iCloud 吗?

    开发人员可以使用 Apple 的 iCloud API 在 Mac OS X 和 iOS 上的不同版本的应用程序之间同步应用程序数据 如果开发人员拥有 Windows 版本的应用程序 该版本是否也可以使用 iCloud 将应用程序数据与 M
  • .profile 无法从 Mac 终端运行

    我有一个 profile 文件 我正在终端中读取并使用别名 但在某些时候 别名由于没有明确的原因而停止工作 其他命令仍在工作 为了快速修复 我删除了 rm 并在用户目录中重新创建了 profile 文件 我可以看到 至少在该目录中没有 ba
  • 如何用 kevent() 替换 select() 以获得更高的性能?

    来自Kqueue 维基百科页面 http en wikipedia org wiki Kqueue Kqueue 在内核和用户空间之间提供高效的输入和输出事件管道 因此 可以修改事件过滤器以及接收待处理事件 同时每次主事件循环迭代仅使用对
  • 内核开发和 C++ [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 从我know https stackoverflow com questions 580292 what languages are windo
  • “pdo_mysql”已禁用,我无法启用它。我在 iMac 7.1 OSX 10.6.8 上安装了 MAMP v. 3.0.4

    pdo mysql 已禁用 我无法启用它 我在 iMac 7 1 OSX 10 6 8 上安装了 MAMP v 3 0 4 在我的 phpinfo 页面上 我可以看到唯一启用的 PDO 是 sqlite 如果我查看 php 5 5 10 扩
  • VLCJ 无法在 Mac 上运行 - 插件 libvlccore.5.dylib

    我正在尝试让 VLCJ 在 Mac 和 PC 上运行 它在 Windows 7 64 位 下运行良好 但当我尝试在 Mac 上运行它时 它崩溃了 我指向 VLC dylib 文件的正确目录 但收到 使用 libvlccore 5 dylib
  • MySQL 数据库无法在 XAMPP for Mac 上启动

    突然我在 mac 上遇到了这个问题 我无法启动我的 MySQL 数据库 我只能启动 ProFTPD 和 Apache Web Server 这是应用程序日志 Starting all servers Starting MySQL Datab
  • 超类与类SpecificationPolicy不匹配

    我得到了一个superclass mismatch for class SpecificationPolicy尝试安装或升级某些brew 软件包时出错 例如 更新安装 supabase CLI 时 brew install supabase
  • C#驱动开发?

    在我一头扎进 C 之前 我一直认为 C 或 C 最适合在 Windows 上开发驱动程序 我不喜欢在 NET 机器上开发驱动程序的想法 但 NET 似乎是 MS 应用程序开发的方向 所以我现在想知道 人们正在使用 C 来开发驱动程序吗 您是
  • iPad - 无法在框架内滚动

    我无法滚动 iPad Safari 中框架内调用的 pdf 我已经尝试过两件事 2 指滚动 使用对象 嵌入代替框架 但这是行不通的 事实上我已经尝试了很多东西 溢出 高度等等 请帮我 先感谢您 根据这篇文章http support appl
  • C++ 是否可以在 MacOS 上与 OpenMP 和 boost 兼容?

    我现在已经尝试了很多事情并得出了一些结论 也许 我监督了一些事情 但似乎我无法完成我想要的事情 问题是 是否有可能使用 OpenMP 和 boost 在 MacOS High Sierra 上编译 C 一些发现 如果我错了请纠正我 Open
  • 如何在 OSX 上安装 numpy 和 scipy?

    我是 Mac 新手 请耐心等待 我现在使用的是雪豹 10 6 4 我想安装numpy和scipy 所以我从他们的官方网站下载了python2 6 numpy和scipy dmg文件 但是 我在导入 numpy 时遇到问题 Library F
  • Mac 上用户“postgres”的密码身份验证失败

    我在创建新的 psql 用户时遇到问题 因为我无法以 postgres 身份登录 psql 我已尝试过 1 sudo u postgres psql 2 sudo u postgres createuser img site P s e 他

随机推荐

  • 莱文斯坦到达默劳-莱文斯坦

    我坐在这里 用 Java 为我的主程序编写一些算法 到目前为止是第一个 我对 levenshtein 算法进行了很好的编程 这要归功于 wiki 为新手提供的伪代码以及一个很好的教程 D 然后我决定升级到 Damerau 并添加额外的行 但
  • 将 Angular 6 应用程序部署到 github 页面时出现 404

    我的应用程序在本地运行时运行良好 我已经编译了构建 没有错误 网站链接在这里 https evilernie44 github io users index html 当我尝试通过 github 页面加载网站时 我的 get 请求收到 40
  • 如何在不锁定文本文件的情况下读取它?

    我有一个 Windows 服务以简单的格式将其日志写入文本文件 现在 我将创建一个小型应用程序来读取服务日志 并将现有日志和添加的日志显示为实时视图 问题在于 服务锁定文本文件以添加新行 同时查看器应用程序锁定文件以进行读取 服务代码 vo
  • 我无法使用 useLocation 从 React router Link 组件获取状态。那么我怎样才能通过呢?

    我正在尝试将 videoTitle 从链接状态传递到我的测验页面 但我无法通过 useLocation 传递它 它向我抛出此错误 TypeError 无法解构 位置 的属性 状态 因为它未定义 从这个链接组件 To this 这是视频页面的
  • 在 Rust 中创建向量的向量

    此代码将无法编译 fn main let m1 vec 1 2 3 let m2 vec m1 m1 m1 let m3 vec vec 1 2 3 vec 4 5 6 vec 7 8 9 for i in m2 for j in i pr
  • 委托用途:业务应用程序

    背景 鉴于 大多数 开发人员都是业务应用程序开发人员 我们最喜欢的编程语言的功能是在我们正在使用它们的上下文中使用的 作为一名 C ASP NET 应用程序开发人员 我倾向于仅在处理 UI 事件时使用委托 事实上 这是我缺乏经验的一部分 我
  • Selenium WebDriver - getCssValue() 方法

    我正在做一个练习 使用 cssGetValue 方法从特定 Web 元素的 CSS 属性中检索值 我有两个问题 为什么cssGetValue方法返回值13px 该方法实际引用了哪个Web元素 1a 我想获取标记为 按 ID 的部分的 CSS
  • 在组合框中设置默认项目

    我有一个在组合框中设置项目的功能 默认情况下会设置一个项目 例如 选择列表 public void SetOperationDropDown int cbSelectedValue null if cmbOperations Items C
  • 将日期和时间插入Mysql

    我正在尝试将日期和时间插入 mysql 日期时间字段 当用户选择日期和时间时 它将生成两个 POST 变量 我已经在互联网上搜索过 但仍然不知道该怎么做 My code date value is 05 25 2010 time value
  • 从 Assets 目录中获取文件夹名称

    我正在尝试获取 资产 中文件夹的名称 我可以使用 assetManager list 方法通过 AssetManager 获取文件的名称 但问题是它只返回文件名而不返回文件夹名 所以我尝试使用 listFiles 方法 但无法访问 Asse
  • 如何获取给定字体的上升/下降和 x 高度

    我需要得到一个ascender 下降部 and x height 通过使用以下代码 我可以找到下降部分和总高度 descender height paint descent total height descender height pai
  • Git索引和提交很慢

    我有一个本地 git 存储库并使用git add file1 file2 file3 将我的修改添加到 git 索引 然后我用普通的git commit 每个命令大约需要 3 到 6 秒 我的存储库有大约 150 000 次提交 我已经执行
  • 没有名为“matplotlib.artist”的模块

    我遇到了这个错误 No module named matplotlib artist 这是完整的错误 ModuleNotFoundError Traceback most recent call last
  • 通过原型对象或构造函数设置方法,有什么区别? [复制]

    这个问题在这里已经有答案了 您能解释一下构造函数中设置方法和通过原型对象设置方法之间的区别吗 以下代码显示了这两种设置方法的方式 say hello and say bye两者都工作正常 function MessageClass this
  • 将 Java 数组传递给 Scala

    尽管我已经使用 Scala 一段时间 并且之前也将其与 Java 混合使用 但我还是遇到了一个问题 如何将 Java 数组传递给 Scala 我知道相反的方法相当简单 然而从 Java 到 Scala 却并非如此 我应该在 Scala 中声
  • 使用 loadDataWithBaseURL 禁用 webview 中的链接

    我使用以下代码加载电子书的 html 内容 其中 templateString 包含连接到主文件中的样式表和图像的 html 内容 String itemURL file itemPath testWV loadDataWithBaseUR
  • 修改伪选择:after在javascript中[重复]

    这个问题在这里已经有答案了 我定义了一个像 slidingTag li after content z index 3 height 6px 我想从 JS 动态更改高度属性 我可以使用以下方式获得该财产 window getComputed
  • 在 Matlab 中使用 Java 泛型类

    是否可以在Matlab中构造一个参数化类 例如在Java中我可以说ArrayList
  • 如何在Android 2.1中实现Beluga或WhatsApp之类的消息系统

    我正在尝试在我的 Android 应用程序中开发一个消息应用程序 该消息将像 Whatsapp 和 beluga 一样 我用谷歌搜索了一下 发现 C2DM Android 2 2 可以将推送通知发送到设备 但是 这在 Android 2 1
  • 无法卸载内核扩展;类有实例

    我正在为音频设备驱动程序编写 OSX 内核扩展 它是软件 但模拟硬件设备 在开发过程中 完全卸载现有的旧版本 然后从头开始构建并安装新版本会很方便 但是 有时如果不重新启动系统 这似乎是不可能的 程序本身没有运行 源文件已从 System