gpt4 book ai didi

c++ - 用于创建/注册虚拟存储设备的 IOKit 驱动程序

转载 作者:行者123 更新时间:2023-11-28 04:31:02 25 4
gpt4 key购买 nike

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

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

谢谢你对我的包容

最佳答案

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

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

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

将其实现为文件系统驱动程序可能是更好的方法。 FUSE 可能是一个很好的起点;如果你发现限制太多,你总是可以把它变成一个“真正的”基于内核的 VFS kext。

关于c++ - 用于创建/注册虚拟存储设备的 IOKit 驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52903771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com