【问题标题】:How to debug kernel panic on MAC OS Catalina, as Catalina is on Read-only File system如何在 MAC OS Catalina 上调试内核崩溃,因为 Catalina 位于只读文件系统上
【发布时间】:2020-03-21 12:17:41
【问题描述】:

在我们的自定义 kext 中访问 SMB 协议的“离线”属性时面临内核恐慌。如何在 MAC OS Catalina 上调试这些内核崩溃。

由于只读文件系统,Catalina 不支持调试内核扩展步骤。带有 IOKit.framework 的 kext 也不会在 MAC OS 10.14.x 上加载并出现错误

The super class vtable '__ZTV9IOService' for vtable '__ZTV23com_microfocus_cisiokit' is out of date. Make sure your kext has been built against the correct headers.
The super class vtable '__ZTV12IOUserClient' for vtable '__ZTV8cisiokit' is out of date. Make sure your kext has been built against the correct headers.

是否有任何文档指定如何在设置只读文件系统的 mac os catalina 上调试内核崩溃?

注意:禁用 SIP 也不起作用。

提前致谢。

【问题讨论】:

  • 你在这里问了 2 个完全不相关的问题 - please don't do that in future
  • "bc its read-only",你可以重新挂载它为读写并关闭啜饮。 2、你是要实时调试吗?否则/Library/Logs/Diagn..下自动生成的panic日志应该足够了

标签: macos macos-catalina iokit kernel-extension panic


【解决方案1】:

回答您关于 kext 加载的问题:

带有 IOKit.framework 的 kext 也无法在 MAC OS 10.14.x 上加载并出现错误

无法加载带有 IOKit 框架引用的 kext,在 MAC OS 10.14 上出现错误以进行调试:

The super class vtable '__ZTV9IOService' for vtable '__ZTV23com_microfocus_cisiokit' is out of date. Make sure your kext has been built against the correct headers.
The super class vtable '__ZTV12IOUserClient' for vtable '__ZTV8cisiokit' is out of date. Make sure your kext has been built against the correct headers.

线索在此处的错误消息中:确保您的 kext 已针对正确的标头构建。

当您使用比您尝试加载它的操作系统版本新的 macOS SDK 构建 kext 时会遇到此错误。所以在你的情况下,我假设你正在使用 macOS 10.15 SDK 来构建 kext 并期望它在 macOS 10.14 上加载。不要那样做,请使用 10.14 SDK,或与您希望通过 kext 支持的最旧 macOS 版本匹配的任何版本。

还要注意,kext 构建使用 Kernel.framework,而不是 IOKit.framework。后者用于构建访问 I/O Kit 的用户空间工具、库和应用程序。

【讨论】:

    【解决方案2】:

    为您解答有关调试 macOS 内核扩展的问题:

    文档中没有“/Volumes/KernelDebugKit/mach_kernel”

    1. 必须安装大约从 OS X 10.10 开始的内核调试工具包。当您下载并打开 KDK .dmg 时,您需要运行其中包含的安装程序。
    2. KDK 的内核随后将永久安装在您的系统上 /Library/Developer/KDKs/KDK_[[os-version]].kdk/System/Library/Kernels/
    3. 默认内核镜像不再命名为mach_kernel,而是简单命名为kernel

    例如/Library/Developer/KDKs/KDK_10.15_19A536g.kdk/System/Library/Kernels/kernel

    由于只读文件系统,Catalina 不支持调试内核扩展步骤。

    无法创建 PanicDumps 目录以通过 '/' 卷下的 kdump 守护进程收集恐慌,因为 Catalina 是只读文件系统 Ref: https://developer.apple.com/library/archive/technotes/tn2004/tn2118.html

    请注意,kdumpd 接受转储的位置作为其命令行参数,因此您可以选择可写位置。无论如何,您都需要在/Library/LaunchDaemons 下复制launchd plist,因为/System/Library/LaunchDaemons 下的原始文件不可写。但是,我不能 100% 确定内核转储在现代 macOS 版本上是否仍然可以正常工作。

    还请注意,您可以在技术上重新装载只读操作系统基本卷读写。但是,我不建议在测试系统以外的任何设备上使用它。

    【讨论】:

      猜你喜欢
      • 2020-02-16
      • 1970-01-01
      • 2021-01-04
      • 1970-01-01
      • 2020-02-28
      • 2020-01-20
      • 2020-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多