kasbert / OS-X-SAT-SMART-Driver

Max OS X kernel driver for providing access to external drive SMART data
578 stars 74 forks source link

External Enclosures report SMART only with their IDs added to Info.plist on MacBook Pro 2010 #21

Closed tsynik closed 10 years ago

tsynik commented 10 years ago

All versions of SAT SMART Driver work fine with my external enclosures, Flash Drives, but only after I added their IDs to Info.plist by hand. They report SMART not supported with default Info.plist. I think it may be related to probe phase. On my MacBook Pro 2010 I always have Apple SD Card Reader in IOSCSIPeripheralDeviceNub Device Tree (Is it somehow affects other SCSI SMART capable devices on that bus?):

ProBooK:Debug nikk$ ioreg -r -c IOSCSIPeripheralDeviceNub +-o IOSCSIPeripheralDeviceNub <class IOSCSIPeripheralDeviceNub, id 0x1000007a3, registered, matched, active, busy 0 (18 ms), retain 7> { "IOProbeScore" = 0 "CFBundleIdentifier" = "com.apple.iokit.IOSCSIArchitectureModelFamily" "IOProviderClass" = "IOSCSIProtocolServices" "IOClass" = "IOSCSIPeripheralDeviceNub" "IOMatchCategory" = "SCSITaskUserClientIniter" "Peripheral Device Type" = 0 "TPGS Information" = 0 "Vendor Identification" = "SanDisk" "Protocol Characteristics" = {"Physical Interconnect"="USB","Read Time Out Duration"=30000,"Physical Interconnect Location"="External","Write Time Out Duration"=30000} "Product Identification" = "Extreme" "Product Revision Level" = "0001" }

+-o org_dungeon_driver_IOSATDriver <class org_dungeon_driver_IOSATDriver, id 0x1000007a5, !registered, !matched, active, busy 0 (5 ms), retain 8> +-o IOSATServices <class IOSATServices, id 0x1000007a9, registered, matched, active, busy 0 (5 ms), retain 6> +-o IOBlockStorageDriver <class IOBlockStorageDriver, id 0x1000007aa, registered, matched, active, busy 0 (4 ms), retain 9> +-o SanDisk SanDisk SSD U100 32GB Media <class IOMedia, id 0x1000007ac, registered, matched, active, busy 0 (4 ms), retain 11> +-o IOMediaBSDClient <class IOMediaBSDClient, id 0x1000007ad, registered, matched, active, busy 0 (0 ms), retain 6> +-o IOFDiskPartitionScheme <class IOFDiskPartitionScheme, id 0x1000007b0, !registered, !matched, active, busy 0 (0 ms), retain 6> +-o Untitled 1@1 <class IOMedia, id 0x1000007b2, registered, matched, active, busy 0 (0 ms), retain 10> +-o IOMediaBSDClient <class IOMediaBSDClient, id 0x1000007b3, registered, matched, active, busy 0 (0 ms), retain 7>

+-o IOSCSIPeripheralDeviceNub <class IOSCSIPeripheralDeviceNub, id 0x100000285, registered, matched, active, busy 0 (326 ms), retain 7> { "IOClass" = "IOSCSIPeripheralDeviceNub" "CFBundleIdentifier" = "com.apple.iokit.IOSCSIArchitectureModelFamily" "IOProviderClass" = "IOSCSIProtocolServices" "IOProbeScore" = 0 "Peripheral Device Type" = 0 "IOMatchCategory" = "SCSITaskUserClientIniter" "Protocol Characteristics" = {"Physical Interconnect"="USB","Read Time Out Duration"=30000,"Physical Interconnect Location"="Internal","Write Time Out Duration"=30000} "Vendor Identification" = "APPLE" "Product Revision Level" = "1.00" "Product Identification" = "SD Card Reader" "TPGS Information" = 0 "SCSI Device Characteristics" = {"IOMaximumBlockCountRead"=8192,"IOMaximumBlockCountWrite"=8192,"IOMaximumByteCountWrite"=4194304,"IOMaximumByteCountRead"=4194304} }

+-o com_apple_driver_AppleUSBCardReaderSBC <class com_apple_driver_AppleUSBCardReaderSBC, id 0x1000002a9, !registered, !matched, active, busy 0 (45 ms), retain 8> +-o IOBlockStorageServices <class IOBlockStorageServices, id 0x1000002b0, registered, matched, active, busy 0 (45 ms), retain 6> +-o IOBlockStorageDriver <class IOBlockStorageDriver, id 0x1000002b4, registered, matched, active, busy 0 (0 ms), retain 7>

tsynik commented 10 years ago

Here is log for SanDisk Extreme with default Info.plist: 03/06/14 03:18:33,000 kernel[0]: USBMSC Identifier (non-unique): AA011223130957223472 0x781 0x5580 0x10, 2 03/06/14 03:18:34,000 kernel[0]: IOSATDriver[0xffffff8031e0a800]::init 03/06/14 03:18:34,000 kernel[0]: IOSATDriver[0xffffff8031e0a800]::init result 1 03/06/14 03:18:34,000 kernel[0]: IOSATDriver[0xffffff8031e0a800]::attach 03/06/14 03:18:34,000 kernel[0]: IOSATDriver[0xffffff8031e0a800]::attach result 1 03/06/14 03:18:34,000 kernel[0]: IOSATDriver[0xffffff8031e0a800]::probe score 7006 03/06/14 03:18:34,000 kernel[0]: IOSATDriver[0xffffff8031e0a800]::probe result 0xffffff8031e0a800 score 7006 03/06/14 03:18:34,000 kernel[0]: IOSATDriver[0xffffff8031e0a800]::detach 03/06/14 03:18:34,000 kernel[0]: IOSATDriver[0xffffff8031e0a800]::free

xz4gb8 commented 10 years ago

I'm slightly confused by this. Which plist?

Thank you.

tsynik commented 10 years ago

SATSMARTDriver.kext/Contents/Info.plist After I added:

SanDisk Extreme
            <dict>
                <key>PassThroughMode</key>
                <string>auto</string>
                <key>Product Identification</key>
                <string>Extreme</string>
                <key>Vendor Identification</key>
                <string>SanDisk</string>
            </dict>

it reports SMART. So with any other SAT capable enclosures / HDD. They work only after I check IOSCSIPeripheralDeviceNub and add their IDs to SATSMARTDriver plist

xz4gb8 commented 10 years ago

Ah! Thank you.

kasbert commented 10 years ago

Maybe some other driver is claiming the device ? Try increasing the IOProbeScore value, for example 2006 -> 10000

tsynik commented 10 years ago

That does the trick. With IOProbeScore 10 000 I don't need any other additions. Thanks!

03/06/14 19:50:21,000 kernel[0]: USBMSC Identifier (non-unique): AA011223130957223472 0x781 0x5580 0x10, 2 03/06/14 19:50:22,000 kernel[0]: IOSATDriver[0xffffff80296f9600]::init 03/06/14 19:50:22,000 kernel[0]: IOSATDriver[0xffffff80296f9600]::init result 1 03/06/14 19:50:22,000 kernel[0]: IOSATDriver[0xffffff80296f9600]::attach 03/06/14 19:50:22,000 kernel[0]: IOSATDriver[0xffffff80296f9600]::attach result 1 03/06/14 19:50:22,000 kernel[0]: IOSATDriver[0xffffff80296f9600]::probe score 9000 03/06/14 19:50:22,000 kernel[0]: IOSATDriver[0xffffff80296f9600]::probe result 0xffffff80296f9600 score 9000 03/06/14 19:50:22,000 kernel[0]: IOSATDriver[0xffffff80296f9600]::detach 03/06/14 19:50:22,000 kernel[0]: IOSATDriver[0xffffff80296f9600]::attach 03/06/14 19:50:22,000 kernel[0]: IOSATDriver[0xffffff80296f9600]::attach result 1 03/06/14 19:50:22,000 kernel[0]: IOSATDriver[0xffffff80296f9600]::start 03/06/14 19:50:22,000 kernel[0]: IOSATDriver[0xffffff80296f9600]::InitializeDeviceSupport 03/06/14 19:50:22,000 kernel[0]: IOSATDriver[0xffffff80296f9600]::InitializeDeviceSupport result 1 03/06/14 19:50:22,000 kernel[0]: IOSATDriver[0xffffff80296f9600]::CreateStorageServiceNub 03/06/14 19:50:22,000 kernel[0]: IOSATDriver[0xffffff80296f9600]::IdentifyDevice 03/06/14 19:50:22,000 kernel[0]: IOSATDriver[0xffffff80296f9600]::JMicron_get_registers 03/06/14 19:50:22,000 kernel[0]: IOSATDriver[0xffffff80296f9600]::PASS_THROUGH_JMicron 03/06/14 19:50:22,000 kernel[0]: IOSATDriver[0xffffff80296f9600]::PASS_THROUGH_JMicron result 1 03/06/14 19:50:22,000 kernel[0]: IOSATDriver::JMicron_get_registers failed 2 2 illegal request 03/06/14 19:50:22,000 kernel[0]: IOSATDriver[0xffffff80296f9600]::JMicron_get_registers result 0 03/06/14 19:50:22,000 kernel[0]: IOSATDriver[0xffffff80296f9600]::IdentifyDevice JMicron probe failed, trying with PassThrough16 03/06/14 19:50:22,000 kernel[0]: IOSATDriver[0xffffff80296f9600]::Send_ATA_IDENTIFY 03/06/14 19:50:22,000 kernel[0]: IOSATDriver[0xffffff80296f9600]::PASS_THROUGH_16 03/06/14 19:50:22,000 kernel[0]: IOSATDriver[0xffffff80296f9600]::PASS_THROUGH_16 result 1 03/06/14 19:50:22,000 kernel[0]: IOSATDriver[0xffffff80296f9600]::PASS_THROUGH_12or16 result 1 03/06/14 19:50:22,000 kernel[0]: IOSATDriver[0xffffff80296f9600]::Send_ATA_IDENTIFY checksum 0 03/06/14 19:50:22,000 kernel[0]: IOSATDriver[0xffffff80296f9600]::Send_ATA_IDENTIFY result 1 03/06/14 19:50:22,000 kernel[0]: IOSATDriver[0xffffff80296f9600]::Send_ATA_SMART_READ_DATA 03/06/14 19:50:22,000 kernel[0]: IOSATDriver[0xffffff80296f9600]::PASS_THROUGH_16 03/06/14 19:50:22,000 kernel[0]: IOSATDriver[0xffffff80296f9600]::PASS_THROUGH_16 result 1 03/06/14 19:50:22,000 kernel[0]: IOSATDriver[0xffffff80296f9600]::PASS_THROUGH_12or16 result 1 03/06/14 19:50:22,000 kernel[0]: IOSATDriver[0xffffff80296f9600]::Send_ATA_SMART_READ_DATA success checksum 0 ...