Hi,

I have a USB SDHC card reader whose partition table is not read, and
device node not created, when plugged into my Gentoo Linux computer. I
posted about this a year or two ago but was never able to get it
working, until I recently made an accidental discovery:

If I let a VMWare WinXP take control of the USB device, on the same
physical linux machine as above, the card reader mounts normally in
the virtual WinXP. Then, if I release the USB device from VMware,
Linux takes control of the device back and can read the partition
table and creates the device node normally. After that everything
works fine, I can copy files to/from etc. and everything seems normal.

I hope some usb/udev/something guru here can give me a pointer on
where to begin tracking down the cause of this. Thanks. :)

When I plug in the card reader, dmesg tells me this:

[1637793.709415] usb 2-4: new high speed USB device using ehci_hcd and
address 22
[1637793.826139] usb 2-4: New USB device found, idVendor=090c, idProduct=6000
[1637793.826142] usb 2-4: New USB device strings: Mfr=1, Product=2,
SerialNumber=3
[1637793.826145] usb 2-4: Product: SM331AB CARD-READER
[1637793.826146] usb 2-4: Manufacturer: Silicon Motion,Inc.
[1637793.826148] usb 2-4: SerialNumber: 12345678901234567890
[1637793.826356] scsi38 : usb-storage 2-4:1.0
[1637799.870068] scsi 38:0:0:0: Direct-Access
     6000 PQ: 0 ANSI: 0 CCS
[1637799.870187] sd 38:0:0:0: Attached scsi generic sg8 type 0
[1637799.871735] sd 38:0:0:0: [sdg] 62748672 512-byte logical blocks:
(32.1 GB/29.9 GiB)
[1637799.872307] sd 38:0:0:0: [sdg] Write Protect is off
[1637799.872309] sd 38:0:0:0: [sdg] Mode Sense: 4b 00 00 08
[1637799.872310] sd 38:0:0:0: [sdg] Assuming drive cache: write through
[1637799.874301] sd 38:0:0:0: [sdg] Assuming drive cache: write through
[1637799.874303]  sdg:
[1637800.005993] sd 38:0:0:0: [sdg] Result: hostbyte=0x00 driverbyte=0x08
[1637800.005996] sd 38:0:0:0: [sdg] Sense Key : 0x5 [current]
[1637800.005998] sd 38:0:0:0: [sdg] ASC=0x21 ASCQ=0x0
[1637800.006000] sd 38:0:0:0: [sdg] CDB: cdb[0]=0x28: 28 00 00 00 00
00 00 00 08 00
[1637800.006004] end_request: I/O error, dev sdg, sector 0
[1637800.006006] Buffer I/O error on device sdg, logical block 0
[1637800.006881] ldm_validate_partition_table(): Disk read failed.
[1637800.006883]  unable to read partition table
[1637800.008115] sd 38:0:0:0: [sdg] Assuming drive cache: write through
[1637800.008117] sd 38:0:0:0: [sdg] Attached SCSI removable disk


Despite dmesg saying unable to read partition table, fdisk -l /dev/sdg
shows me the partition anyway:

Disk /dev/sdg: 32.1 GB, 32127320064 bytes
236 heads, 42 sectors/track, 6330 cylinders, total 62748672 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sdg1            8192    62748671    31370240    c  W95 FAT32 (LBA)


When I let VMware Workstation virtual WinXP session claim the USB
device, it shows me this in dmesg when I plug it in:
[1639461.856033] usb 2-4: new high speed USB device using ehci_hcd and
address 23
[1639461.972673] usb 2-4: New USB device found, idVendor=090c, idProduct=6000
[1639461.972676] usb 2-4: New USB device strings: Mfr=1, Product=2,
SerialNumber=3
[1639461.972679] usb 2-4: Product: SM331AB CARD-READER
[1639461.972680] usb 2-4: Manufacturer: Silicon Motion,Inc.
[1639461.972682] usb 2-4: SerialNumber: 12345678901234567890
[1639461.972956] scsi39 : usb-storage 2-4:1.0
[1639462.343346] usb 2-4: reset high speed USB device using ehci_hcd
and address 23
[1639462.459687] scsi40 : usb-storage 2-4:1.0
[1639462.607973] usb 2-4: reset high speed USB device using ehci_hcd
and address 23
[1639462.826673] usb 2-4: usbfs: interface 0 claimed by usb-storage
while 'vmware-vmx' sets config #1
[1639462.826721] usb 2-4: usbfs: interface 0 claimed by usb-storage
while 'vmware-vmx' sets config #1


And when I release the USB device from VMWare back to Linux, dmesg shows this:
[1639859.353550] scsi41 : usb-storage 2-4:1.0
[1639864.347499] scsi 41:0:0:0: Direct-Access
     6000 PQ: 0 ANSI: 0 CCS
[1639864.347616] sd 41:0:0:0: Attached scsi generic sg8 type 0
[1639864.348239] sd 41:0:0:0: [sdg] 62748672 512-byte logical blocks:
(32.1 GB/29.9 GiB)
[1639864.348757] sd 41:0:0:0: [sdg] Write Protect is off
[1639864.348759] sd 41:0:0:0: [sdg] Mode Sense: 4b 00 00 08
[1639864.348761] sd 41:0:0:0: [sdg] Assuming drive cache: write through
[1639864.350737] sd 41:0:0:0: [sdg] Assuming drive cache: write through
[1639864.350740]  sdg: sdg1
[1639864.354864] sd 41:0:0:0: [sdg] Assuming drive cache: write through
[1639864.354866] sd 41:0:0:0: [sdg] Attached SCSI removable disk


>From this point the card reader works normally in Linux until I unplug
it. Every time I plug it in I must use the above stated virtual WinXP
workaround in order to use it.


The lsusb -v of this device:

Bus 002 Device 023: ID 090c:6000 Feiya Technology Corp.
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0        64
  idVendor           0x090c Feiya Technology Corp.
  idProduct          0x6000
  bcdDevice            1.00
  iManufacturer           1
  iProduct                2
  iSerial                 3
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           32
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              500mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass         8 Mass Storage
      bInterfaceSubClass      6 SCSI
      bInterfaceProtocol     80 Bulk (Zip)
      iInterface              0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval             255
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval             255


>From /proc/bus/usb/devices:
T:  Bus=02 Lev=01 Prnt=01 Port=03 Cnt=01 Dev#= 23 Spd=480 MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=090c ProdID=6000 Rev= 1.00
S:  Manufacturer=Silicon Motion,Inc.
S:  Product=SM331AB CARD-READER
S:  SerialNumber=12345678901234567890
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=500mA
I:* If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=31875us

Reply via email to