0

我有一个用于连接 USB 的自定义 SCSI 设备的驱动程序,它实现了一些特定于供应商的命令。每个 USB 设备承载多个 SCSI LUN。这工作非常愉快,但是根据设备对 SCSI LUN 进行分组存在问题,因为从IOSCSILogicalUnitNub级别向下(我的驱动程序继承自),没有将 LUN 链接在一起的识别功能(有 SCSI 逻辑单元号,但是这些对于每个新设备都会发生冲突;它们都有一个单元 0x0)。

我想做一些事情,比如根据 USBlocationID字段(或任何其他唯一键)链接它们,但我不知道如何在仅给出io_service_t匹配的 SCSI 驱动程序的情况下获取父 USB 设备。这也最好在应用程序端完成,而不是在驱动程序中完成,因为应用程序需要跟踪哪个服务具有哪些 LUN 以及由哪个处理程序实例打开。

IO Registry 中的层次结构是:

MyUSB-SCSI Device@fd130000
 |-IOUSBCompositeDriver
 |-Mass Storage Class Interface@0     (has location ID 0xfd130000)
   |-IOUSBMassStorageClass
     |-IOSCSILogicalUnitNub@0         (has SCSI LUN number, unique in this device, but not globally)
     | |-com_Company_driver_MyDriver  (my driver)
     |   |-IOBlockStorageServices
     |     |-Manuf Device Media       (these are strings from the device firmware)
     |       |-IOMediaBSDClient
     |
     |-IOSCSILogicalUnitNub@0
       |-com_Company_driver_MyDriver
         |-IOBlockStorageServices
           |-Manuf Device Media
             |-IOMediaBSDClient
4

1 回答 1

0

如果您设备的 io_service_t 在变量 _device 中,则代码如下所示:

CFTypeRef _thing_you_want = IORegistryEntrySearchCFProperty(_device, kIOServicePlane, CFSTR("locationID"), NULL, kIORegistryIterateParents);

去这里了解更多信息:

http://developer.apple.com/library/mac/#documentation/devicedrivers/conceptual/AccessingHardware/AH_IOKitLib_API/AH_IOKitLib_API.html

于 2012-09-24T16:25:28.360 回答