macOS V10.15+系统扩展和驱动工具包如何开发读盘驱动

Posted

技术标签:

【中文标题】macOS V10.15+系统扩展和驱动工具包如何开发读盘驱动【英文标题】:How to develop driver to read disk by System Extension and DriverKit for macOS10.15+ 【发布时间】:2020-10-09 12:20:16 【问题描述】:

我已经通过 IOKit 开发了一个内核扩展 (kext),但将来会被弃用。所以我想开发另一个使用 dext 的驱动程序来使用 DriverKit 替换 kext。但是我没有找到可执行的解决方案,就像我找不到某些类来替代 IOMedia。当我打算在我的代码中包含 IOKit 时,我发现 TARGET_OS_DRIVERKIT 是 1。 有人能帮我吗?非常感谢!

【问题讨论】:

分享一些代码示例会很有帮助 【参考方案1】:

IOMediaiostorage 的子类,也是IOStorageFamily 的一部分。从 macOS 11.2 SDK (Xcode 12.4) 开始,这还没有被移植到 DriverKit。

SCSIControllerDriverKit API 自 WWDC 2020 以来一直处于测试阶段。它未随 macOS 11.0.x-11.2 的发布版本一起提供。它包含在(撰写本文时)11.3 的当前测试版中。也许它会看到 macOS 11.3 的一般发布。这不是存储堆栈的直接端口;相反,它本质上是IOParallelSCSIController KPI 的一个端口。这使您可以为 SCSI 控制器实现驱动程序。这样的驱动程序可以告诉操作系统有关一个或多个 SCSI 设备(包括块设备)的信息,并将开始从系统接收 SCSI 命令,并将其转发到底层控制器设备。它不允许您实现“过滤”存储驱动程序,或向系统中的其他设备发出 SCSI 命令。

【讨论】:

感谢您的回复,也许这是唯一的办法! @Dirk 是的,存储 kext 是目前唯一的选择。 他们是否添加了对存储驱动程序的支持? @RhythmicFistman 我已经用最新情况更新了答案。目前没有任何公开发布的 macOS 版本支持 DriverKit 中的任何块存储功能。 SCSIControllerDriverKit 处于测试阶段,但它是一个相当严格的功能集,并不等同于 IOStorageFamily,后者位于更高级别。 @pmdj 你认为 SCSIControllerDriverKit 是否足以拥有基于 dext 的 RAID 驱动程序?我读了您的最后一句话“它不允许您实现“过滤”存储驱动程序,或向系统中的其他设备发出 SCSI 命令。”听起来还不可能。

以上是关于macOS V10.15+系统扩展和驱动工具包如何开发读盘驱动的主要内容,如果未能解决你的问题,请参考以下文章

使用向后兼容的 MacOS 10.15 (Catalina) 创建 Python C 扩展 (MacOS10.9+)

黑苹果 MacOS 10.15 Catalina安装教程

macos12.3降到12

黑苹果 MacOS 10.15 Catalina安装教程

教你如何解锁macOS10.15的系统分区

如何在Mac上安装可视化系统优化工具Sensei 1.0.0