2007年8月19日日曜日

USB装置のMac OS Xへの移植

Windowsで動いているUSB装置のMac OS Xへの移植を考えている人は多いと思います。通常であればKEXTドライバかアプリケーションを書けば、全てのUSB装置はMac OS Xでも動作する「はず」です。しかし「動かない」ことがあります。

例えば、SonyのGPS ユニットキットGPS-CS1はUSBのマスストレージとして作られていてWindowsでは問題なくマスストレージとして認識されます。一方、Mac OS Xではマスストレージ用のKEXTドライバが標準装備されているので、USBマスストレージとして作られた装置であれば動く「はず」です。しかし、Sony GPS-CS1はMacintoshではタイムアウト・エラーになりマウントできません。ちなみに、Intel MacをBoot CampとWindows XPで起動してGPS-CS1を接続すると正常に動作します。このようにWindowsで問題なく動作するのに、Macintoshだと動かないUSB装置がときどき見られます。

昨年の末に私からAppleが主催するUSBのMailing Listで上記の問題に関して質問したことがあります。その時にはIntel MacとMac OS X 10.4.9の組み合わせではマスストレージとして認識されることが分かりました。しかし、具体的に何が悪いのかは不明のままです。他にも似たような症状を一部の「製造元不明」のUSBメモリで見ています。

さて、昨日に上記のUSBのMailing ListにWindowsに関して興味深い書き込みがありました。

質問した人はCypressのUSBチップFX2を使用した装置用にMac OS Xのアプリケーションを書いていますが、Windowsでは正常に動作するのにMac OS Xでは動きません。Appleを始め多くの技術者が討論した末に、質問した人から以下のような報告がありました。

まず、USB装置メーカが書いたCypress FX2用ファームウェアに以下の二つの問題がありました。

1.endpoint descriptorのBULK IN lengthが1024になっていた。
  本来は512
2.ファームウェアのendpoint autoin lengthが1024になっていた。
  本来のサイズ以上のデータを送ろうとしている。

上記の二つの問題はCypressやCypress FX2の問題ではなく、Cypressのユーザである装置メーカが書いたファームウェアの問題(バグ)です。繰り返しますが、CypressやCypress FX2の問題ではありません。

面白いことに、この二つのバグ持を持ったUEB装置はWindows XPとVistaでは動作「します」ただし、全てで動作するわけではなく、一部のマザーボードやUSB拡張カードではWindowsでも誤動作するようです。

装置メーカがファームウェアをプログラマに開示しないために厳密に何が起きているのかは不明としています。

Mac OS Xは今回のような設計ミスや故障による「エラー処理が弱い」という欠点を持っています。たとえば故障したUSB装置を接続した場合に、Windows XPなら直ちに「故障している」とのダイアログが表示されます。この時にUSB装置はソフトウェア的に切り離され、Windowsは動作を続けます。しかし、上記の故障している装置をMac OS Xに接続すると、ダイアログは表示されず、フリーズしないまでも処理能力が極端に落ちて、再起動せざるを得なくなります。

0 件のコメント: