USB quirk を追加2009年03月11日 09時52分58秒

USB の quirk を追加すると、FLUSH コマンドを回避出来るとの指摘を受けたので挑戦する事にした。この FLUSH コマンドの問題はハードディスク側では無く USB アダプタ側だということだろう。

まず、繋いだ時に出る dmesg がこれ。これは、7.1-RELEASE での出力と作業になる。8-CURRENT では既に、USB の実装が変わっているので若干手に入る情報が違っていたりする。


% dmesg
umass0: <vendor 0x05e3 USB TO IDE, class 0/0, rev 2.00/0.33, addr 3> on uh
ub1
da0 at umass-sim0 bus 0 target 0 lun 0
da0: <IBM-DTCA -24090 0811> Fixed Direct Access SCSI-0 device
da0: 40.000MB/s transfers
da0: 3909MB (8007552 512 byte sectors: 255H 63S/T 498C)

dmesg に出てきた、ベンダ ID を元に探してみる。


% cd /usr/src/sys/dev/usb
% find . -type f | xargs grep -i 5e3
./usbdevs:vendor GENESYS                0x05e3  Genesys Logic

GENESYS が出てきた。

今度は、GENESYS で探してみる。


% find . -type f | xargs grep -i GENESYS
./udbp.c:       if ((uaa->vendor == USB_VENDOR_GENESYS &&
./udbp.c:            uaa->product == USB_PRODUCT_GENESYS_GL620USB))
./umass.c:      { USB_VENDOR_GENESYS,  USB_PRODUCT_GENESYS_GL641USB2IDE, RID_WIL
DCARD,
./umass.c:      { USB_VENDOR_GENESYS,  USB_PRODUCT_GENESYS_GL641USB2IDE_2, RID_W
ILDCARD,
./umass.c:      { USB_VENDOR_GENESYS,  USB_PRODUCT_GENESYS_GL641USB, RID_WILDCAR
D,
./umass.c:      { USB_VENDOR_GENESYS,  USB_PRODUCT_GENESYS_GL641USB_2, RID_WILDC
ARD,
./usbdevs:vendor GENESYS                0x05e3  Genesys Logic
./usbdevs:/* Genesys Logic products */
./usbdevs:product GENESYS GL620USB      0x0501  GL620USB Host-Host interface
./usbdevs:product GENESYS GL650         0x0604  GL650 Hub
./usbdevs:product GENESYS GL641USB      0x0700  GL641USB CompactFlash Card Reade
r
./usbdevs:product GENESYS GL641USB2IDE_2        0x0701  GL641USB USB-IDE Bridge
No 2
./usbdevs:product GENESYS GL641USB2IDE  0x0702  GL641USB USB-IDE Bridge
./usbdevs:product GENESYS GL641USB_2    0x0760  GL641USB 6-in-1 Card Reader

二つの USB2IDE が見つかった。しかし、これではどちらか判らないので更に調べる。実行権限が無かったので sudo にて。

% usbdevs -v
usbdevs: /dev/usb0: Permission denied
usbdevs: /dev/usb1: Permission denied
% sudo usbdevs -v
Controller /dev/usb0:
addr 1: full speed, self powered, config 1, OHCI root hub(0x0000), nVidia(0x0000
), rev 1.00
 port 1 powered
 port 2 powered
 port 3 powered
 port 4 powered
 port 5 powered
 port 6 addr 2: low speed, power 100 mA, config 1, product 0x4d05(0x4d05), vendo
r 0x0461(0x0461), rev 4.41
 port 7 powered
 port 8 powered
Controller /dev/usb1:
addr 1: high speed, self powered, config 1, EHCI root hub(0x0000), nVidia(0x0000
), rev 1.00
 port 1 powered
 port 2 addr 3: high speed, self powered, config 1, USB TO IDE(0x0702), vendor 0
x05e3(0x05e3), rev 0.33
 port 3 powered
 port 4 addr 2: high speed, power 500 mA, config 1, USB 2.0 Camera(0x62c0), Soni
x Technology Co., Ltd.(0x0c45), rev 2.10
 port 5 powered
 port 6 powered
 port 7 powered
 port 8 powered

そこで、もう一度調べてみる。


% find . -type f | xargs grep -i 0x0702
./usbdevs:product GENESYS GL641USB2IDE  0x0702  GL641USB USB-IDE Bridge

umass.c を編集する。NO_SYNCHRONIZE_CACHE を追加した。


% vi umass.c
static struct umass_devdescr_t umass_devdescrs[] = {
    { USB_VENDOR_ADDONICS2, USB_PRODUCT_ADDONICS2_CABLE_205, RID_WILDCARD,
      UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
      NO_QUIRKS
    },
...
    { USB_VENDOR_GENESYS,  USB_PRODUCT_GENESYS_GL641USB2IDE, RID_WILDCARD,
      UMASS_PROTO_ATAPI | UMASS_PROTO_BBB,
      FORCE_SHORT_INQUIRY | NO_START_STOP | IGNORE_RESIDUE
        | NO_SYNCHRONIZE_CACHE
    },

,,,

しかし、この表をみてみると、この USB 変換アダプタは実装していないコマンドが多い。

カーネルを入れ換えた後は、


GEOM_JOURNAL: BIO_FLUSH not supported by da0p1.

が出なくなった。

前回