IOKit驱动程序,用于创建/注册虚拟存储设备

时间:2018-10-20 08:21:41

标签: c++ macos driver iokit

我目前正在学习如何用Xcode编写os x内核扩展,所以抱歉,如果我有任何错误的事实。我正在寻找一个示例,说明如何编写IOKit驱动程序,该驱动程序可以在系统中注册虚拟存储设备(例如USB硬盘驱动器,USB记忆棒或SD卡等)。查找程序,我相信它会在IOMedia区域周围并使用IOBlockStorageDevice类,但我不确定。我希望内核能够处理所有功能,例如读写操作,安装和弹出等...

最后,我想创建设备驱动程序以检测android设备(使用MTP)并将其安装为存储设备,以允许用户在finder中对其进行读写,而该驱动程序将处理发送的内容。数据到手机。 (我知道那里可能有其他驱动程序可以执行此操作,但我想自己做)。但是现在,我只想知道如何制作可以生成虚拟USB驱动器的驱动程序。

谢谢你支持我

1 个答案:

答案 0 :(得分:1)

例如虚拟磁盘的代码,由Ole Henry Halvorsen和Douglas Clarke撰写的example code from the book“ OS X和iOS内核编程”第14章中的“ Ramdisk”项目是一个合理的起点。

IOMedia类的实例通常由存储子系统自动创建。您通常不需要继承它。子类化IOBlockStorageDevice通常是块存储设备驱动程序的方法,无论它们是虚拟的还是物理的。 (例如,macOS的磁盘映像(dmg)处理是在IODiskImageBlockStorageDeviceOutKernel的子类IOBlockStorageDevice中实现的,而USB大容量存储驱动程序基于SCSI,因此IOSCSIPeripheralDeviceType00创建了一个IOBlockStorageServices,它又是IOBlockStorageDevice的子类

但是,我要指出,对于您的最终目标,块存储设备可能不是一个好的解决方案。据我所知,MTP是基于文件的,并不代表块设备。因此,要使应用程序在块设备上查看文件,您需要在虚拟块设备驱动程序内模拟某种文件系统后端,即使您选择了FAT之类的东西,也会变得不必要地复杂。

这可能是将其实现为文件系统驱动程序的更好方法。保险丝可能是一个很好的起点。如果发现限制过大,可以随时将其转换为基于“真正”内核的VFS kext。