カテゴリー: FreeBSDとLinux
参照数: 3511

FreeBSD8.1にアップグレードしたのですが、USB Storageで、以前使っていたものが正式対応していなかったようで、エラーが出力されるようになってしまいました。
USB mass Storageでも、対応コマンドが色々あるようで、対応機器によって、一部コマンドを抑制する必要があるようです。
当方の環境で問題になったのは、SANDISKのSDカードコンバータのImageMate SDDR-113という機器です。
問題の原因は、このデバイスがTEST Unit ReadyとSync Cacheに対応していなかったようです。
このコマンドをOSに使用しないようにすれば良いわけですが、それには、カーネルを構築し直す必要があります。
しかしながら、一時対応するには、簡単な対応も用意されています。

1.一時対応
usbconfigにて、対象のデバイスアドレスを調査
そのデバイスに対して、UQ_MSC_NO_TEST_UNIT_READYとUQ_MSC_NO_SYNC_CACHEを指定する。

例)
対象デバイスがugen5.3の場合
usbconfig -d 5.3 add_quirk UQ_MSC_NO_TEST_UNIT_READY
usbconfig -d 5.3 add_quirk UQ_MSC_NO_SYNC_CACHE
usbconfig -d 5.3 reset


2.恒久的対応
usbconfigにて、vendorとproductidを調査
usbconfigにて、リストを取り、アドレスを調査し、指定アドレスを以下のコマンドで、vendoridとproductidを取得する。

例)
ugen5.3の場合、
usbconfig -u 5 -a 3 dump_device_desc


デバイス情報にて、以下の情報が表示されるはずです。
idVendor = 0x0781  <-[vendorid]
idProduct = 0xa7c1  <-[productid]

[vendor] <- ベンダーの識別名 SANDISK等
[product] <- 製品の識別名 SDDR113等

/usr/src/sys/dev/usb/usbdevsに製品を追加
vendor [vendor] [vendorid]  ベンダー名称
product [vendor] [product] [productid]  製品名称

/usr/src/sys/dev/usb/quirk/usb_quirk.cに以下を追加
USB_QUIRK([vendor], [product], 0x0000, 0xffff, UQ_MSC_NO_TEST_UNIT_READY
, UQ_MSC_NO_SYNC_CACHE),

カーネル再構築 & カーネル入れ替え