2002年11月 2日

[obu:02017] USB hub and audio on OBSS

OpenBlockSS で、USB デバイスを使おうとして、いくつかトラブルにあったの
ですが、一応逃げ道を見つけたので書いておきます。トラブルというのは、

・USB hub を OpenBlockSS に挿すと、ときどき khubd が落ちて使えないこと
がある, 素早く挿すと、認識される率が高い
・Sotec の VH7PC (USB audio つきのミニコン)を挿すと、内蔵の Hub が認識
された場合にも、

hub.c: USB new device connect on bus1/1, assigned device number 2
hub.c: USB hub found

hub.c: 4 ports detected
hub.c: USB new device connect on bus1/1/1, assigned device number 3
usb.c: USB device 3 (vend/prod 0xb28/0x1001) is not claimed by any active driver.
hub.c: USB new device connect on bus1/1/2, assigned device number 4
usb.c: USB device not accepting new address=4 (error=-110)
hub.c: USB new device connect on bus1/1/2, assigned device number 5
usb.c: USB device not accepting new address=5 (error=-110)

が出て、使えない

というものです。FreeBSD の USB 周りのコードを見ながら、チョコチョコ変
更していったところ、USB hub の問題は起動時に挿していなければ、起きない
程度になりました(設定の少し違う2台の OBSS で、片方は問題が必ず起きて、
片方はほとんど起きなくなった)。で、フラッシュを毎回書き買えるのがいや
になったので、モジュールにしたところ、USB hub を挿したまま modprobe
usb-ohci をしても、問題が起きないようです(まだ1台でしか試せていません
が)。

後者の問題も、FreeBSD の USB 周りのコードを見ながら、いじっていたら、
一度は device not accepting new address が出ますが、認識されるようにな
りました。
hub.c: USB new device connect on bus1/1/2, assigned device number 4
usb.c: USB device not accepting new address=4 (error=-110)
hub.c: USB new device connect on bus1/1/2, assigned device number 5
usb.c: USB device 5 (vend/prod 0xb28/0x1002) is not claimed by any active driver.

google で、検索したところ、前者の問題は見つけられなかったのですが、後
者の問題は i386 でも出るようでした。ただ解決策は示されていませんでした。
また、最新に近いソース(2.4.18 ?)と比較してみた(どこを見るのが良いので
しょう、CVS web とかないのでしょうか)のですが、いじったあたりに、変更
は、されていませんでした。Linux/i386 が手元にないので検証できていませ
んが、OBSS でなくても問題は出るのではないでしょうか。

いじった結果は、
http://www.sanda.gr.jp/non/OBSS/hub.c.diff
http://www.sanda.gr.jp/non/OBSS/usb-ohci.c.diff
に置いてあります(linux/drivers/usb/ でパッチを当てて下さい)。無保証で
すが、よかったらどうぞ。開発元 (RedHat ? Linus 氏 ?) に、連絡した方が
いいんでしょうかね。

基本的に、FreeBSD の USB のコード(*BSD 共通のはず)を見ながら wait が短
いところを、長くしたり、順序を少し入れ換えただけです。不要な変更も含ま
れているかも、しれません。ソースを見て、いじった感想としては、race
condition が発生しそうな印象を受けました(具体的には、USB について理解
していないので、なんとも言えないのですが)。同じソースで、カーネル組み
込みで khubd が落ちたり、set address に1回失敗するのは、タイミング的に
やばいところが、あるというのを指している気がします。

Sotec の VH7PC の USB audio ですが、Windows 98 (Celeron 433) よりは、
音飛びは少ないようでしたが、音飛びがときどき発生します(bplay というソ
フトで、CD から直接作った .wav ファイル(16bit stereo, 44.1kHz)を再生)。
同じファイルを FreeBSD (Celeron 433) で waveplay というソフトを使うと
音飛びはなかったです。

OBSS も何か優先度を上げるようなことをすれば、音飛びなしで安定するかも
しれませんが、まだ試せていません。それと、音飛び後、不安定になることが
あるようです。

光永@兵庫県 三田市

投稿者 xml-rpc : 2002年11月 2日 21:26
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/8016
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。