0

ベンダー固有のコマンドを実装するUSB​​接続のカスタムSCSIデバイス用のドライバーがあります。各USBデバイスは複数のSCSILUNをホストします。これは非常にうまく機能していますが、デバイスごとにSCSI LUNをグループ化する際に問題があります。IOSCSILogicalUnitNubレベルが下がると(ドライバーが継承します)、LUNをリンクする識別機能がありません(SCSI論理ユニット番号があります。ただし、これらはすべての新しいデバイスで衝突します。すべてのユニットは0x0です)。

USBフィールド(または他の一意のキー)に従ってそれらすべてをリンクするようなことをしたいのですが、一致するSCSIドライバーlocationIDのみを指定して親USBデバイスを取得する方法がわかりません。io_service_tこれは、ドライバーではなくアプリケーション側で実行する方が適切です。アプリケーションは、どのサービスにどのLUNがあり、ハンドラーのどのインスタンスによって開かれたかを追跡する必要があるためです。

IOレジストリの階層は次のとおりです。

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 に答える