在我们的自定义kext中,在访问SMB协议的“脱机”属性时使内核陷入恐慌。如何在MAC OS Catalina上调试这些内核崩溃。
由于只读文件系统,Catalina不支持调试内核扩展步骤。同样,带有IOKit.framework的kext无法在MAC OS 10.14.x上加载,并显示错误
根据文档https://developer.apple.com/library/archive/documentation/Darwin/Conceptual/KEXTConcept/KEXTConceptDebugger/debug_tutorial.html#//apple_ref/doc/uid/20002367-CHDIHFDI,没有“ / Volumes / KernelDebugKit / mach_kernel”,gdb -arch i386 /Volumes/KernelDebugKit/mach_kernel
由于Catalina是只读文件系统,因此无法创建PanicDumps目录以通过'/'卷下的kdump守护程序收集恐慌。参考:https://developer.apple.com/library/archive/technotes/tn2004/tn2118.html
无法通过IOKit框架引用加载kexts,但在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.
是否有任何文档指定了如何在设置了只读文件系统的Mac OS Catalina上调试内核崩溃?
注意:禁用SIP也不起作用。
提前感谢。
根据文档,没有“ / Volumes / KernelDebugKit / mach_kernel”
/Library/Developer/KDKs/KDK_[[os-version]].kdk/System/Library/Kernels/
mach_kernel
,而只是命名为kernel
。例如/Library/Developer/KDKs/KDK_10.15_19A536g.kdk/System/Library/Kernels/kernel
由于只读文件系统,Catalina不支持调试内核扩展步骤。
由于Catalina是只读文件系统,因此无法创建PanicDumps目录以通过'/'卷下的kdump守护程序收集恐慌,因为Catalina是只读文件系统,参考号:https://developer.apple.com/library/archive/technotes/tn2004/tn2118.html
注意kdumpd
接受转储的位置作为其命令行参数,因此您可以选择一个可写位置。无论如何,您都需要在/Library/LaunchDaemons
下复制启动的plist,因为/System/Library/LaunchDaemons
下的原始文件不可写。但是,我不是100%确定内核转储在现代macOS版本上是否仍然可以正常工作。
还要注意,从技术上讲,您可以读写只读OS基本卷。但是,我不建议在测试系统以外的任何设备上使用。