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.

が出なくなった。

前回

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2009/03/11/4167334/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。