カテゴリー:デバイスドライバ

検索



Please click now!!

ONKYO ND-S1 と FreeBSD 8.1-PRERELEASE。

ちょっと前のエントリーで「ONKYO ND-S1 を PC に接続してみる。」と、いうのを書きました。その時は MacOSX と Windows7 では無事に動作したけど FreeBSD では usb.ko 辺りでエラーになって動作しないですねぇ。で終りました。

その時検証した FreeBSD は 7.3-STABLE だったのですが、今回 8.1-PRERELEASE にバージョンアップしたので再度試した所、無事に動作することを確認できました。mp3 や 音楽 CD、後、mp4 の動画についても音が出ることが確認できたので、FreeBSD から ND-S1 はサウンドカードとして無事に認識できました。

kernel: uhub7: 2 ports with 2 removable, self powered
root: Unknown USB device: vendor 0x08bb product 0x2704 bus uhub7
kernel: ugen5.7: <Burr-Brown from TI> at usbus5
kernel: uaudio0: <Burr-Brown from TI USB Audio DAC, class 0/0, rev 1.10/1.00, addr 7> on usbus5
kernel: uaudio0: Play: 48000 Hz, 2 ch, 16-bit S-LE PCM format
kernel: uaudio0: No recording!
kernel: uaudio0: No midi sequencer
kernel: pcm4: <USB audio> on uaudio0

前回書いた通り、サウンドデバイスがたくさんある PC になっている (cat /dev/sndstat の結果) のでサウンドカードを特定する必要があるのですが、以下のコマンドで pcm4 に向けてあげます。

# sysctl hw.snd.default_unit=4

これで無事に音がでるようになったということですね。演奏中は特にエラーを吐くことも無く快調に音が出るのでありました;-)。

さて。 7.3-STABLE と 8.1-PRERELEASE では基本的に USB 周りが改修されているようです。 8 系 FreeBSD では usb.ko から ochi.ko 、 uhci.ko 、 ehci.ko が独立しました。その関係でコードが見直されたのでしょうなぁ。良かった良かった。

筆者はその昔、8.0-STABLE を試しているのですが、この時、USB 接続の HDD が認識しませんでした。その時の顛末は「8.0-STABLE の USB ブート。」に書いているのですが、なるほどー。8 系リリースのことをよく調査もしないで、7 系と同じ感じで usb.ko だけロードすれば USB が使えると思っていて uhci.ko とかロードしていないために USB 接続の HDD が認識しなかったのねぇ。という感じなのでありましたf(^^;;。

最後にですが、ONKYO ND-S1 は USB バスパワーでも動作します。サウンドカードとして利用する分には AC アダプタは必要ありませんでした。 iPhone3G を接続した時に充電するためには AC アダプタが無いと充電できません。なので、実質的には AC アダプタは必要になるかと思うんですけどねぇ。

さてと。これで FreeBSD からもデジタル出力でオーディオ機器に対して音が出るようになったということですね。DVD を mplayer で見た時、5.1 チャンネルで音が出るようになるのかなぁ?だとしたらそれはそれで凄いことだけど;-)。 snd_uaodio.ko はどうなっているんだっけかなぁ。

ONKYO ND-S1 を PC に接続してみる。

オンキョーの CR-D2+D-D2E と言う組み合わせのミニコンポを購入しました。そして、その後に ND-S1 と言う PC と USB で接続できる iPod ドック付きのデジタルメディアトランスポートを購入しました。

音響機材としての感想などについては以下の URL に書いたのでそちらを参照して頂ければと思います。

ここでは ND-S1 を PC のパーツとして利用した場合にどんな感じか、ちょっとまとめてみたいと思います。

まず、ND-S1 と言うデバイス、PC からすると「サウンドカード」と言う扱いになります。USB 接続の外付けサウンドデバイス。 PC に接続すると USB Audio DAC として認識するので Windows・MacOSX・FreeBSD の全てでサクっとデバイスとして認識します(筆者の自宅に Linux は存在しない;-)。

まず、Windows についてですが、簡単に書いておきます。 Windows7 Ultimate x64 に接続するとサクッと認識します。後はコントロールパネルのサウンド設定で出力先を ND-S1 に向けてあげるだけで Windows Media Player や iTunes で音が出ます。また、 iTunes では iPod と Sync も行えます。

MacOSX は製品のカタログでは対応外の OS となっているのですが、こちらも Windows7 と同じくサクッと認識します。

usbdac_1.jpg

これが認識した瞬間ですね。後は iTunes の音も出るし、システム全体の音もステレオに飛ぶようになります。当然 iPod との Sync も行えるのであります。

さてと。ここまで二つの OS でサクッと認識したので、では今回の本命の OS である FreeBSD はどうだ?と言うことで、FreeBSD/amd64 7.3-STABLE に接続してみました。

uhub6: <vendor 0x0409 product 0x005a, class 9/0, rev 2.00/1.00, addr 3> on uhub5
uhub6: single transaction translator
uhub6: 2 ports with 2 removable, self powered
ugen1: <Burr-Brown from TI USB Audio DAC, class 0/0, rev 1.10/1.00, addr 4> on uhub6

一発目。USB ポートに接続したら、あれま。 ugen0 に落ちてしまいました。カーネルモジュールをロードしよう。と言うことで /boot/kernel を眺めるとそれらしいのは snd_uaudio.ko くらいしか見あたらないのでそれをロードしてから再度接続すると。おぉ。pcm として認識しましたね。

uaudio0:  <NBurr-Brown from TI USB Audio DAC, class 0/0, rev 1.10/1.00, addr 4k> on uhub6
uaudio0: audio rev 1.00
pcm4:  <NUSB Audiok> on uaudio0

cat /dev/sndstat してみると以下のような感じ。

$ cat /dev/sndstat
FreeBSD Audio Driver (newpcm: 64bit 2007061600/amd64)
Installed devices:
pcm0:  <NHDA ATI R6xx HDMI PCM #0 HDMIk> at cad 0 nid 1 on hdac0 kld snd_hda
pcm1:  <NHDA Realtek ALC883 PCM #0 Analogk> at cad 0 nid 1 on hdac1 kld snd_hda
pcm2:  <NHDA Realtek ALC883 PCM #1 Analogk> at cad 0 nid 1 on hdac1 kld snd_hda
pcm3:  <NHDA Realtek ALC883 PCM #2 Digitalk> at cad 0 nid 1 on hdac1 kld snd_hda
pcm4:  <NUSB Audiok> at ? kld snd_uaudio [GIANT] (1p:1v/0r:0v channels default)
        mode 1:(output) 2ch, 16/16bit, pcm, 32000,44100,48000Hz
        mode 2:(output) 1ch, 16/16bit, pcm, 32000,44100,48000Hz

おぉ。pcm4 で USB Audio DAC な機器として認識したようです(Realtek ALC883 PCM は長すぎるので後ろの文字列を消しています。今回重要なのは pcm4 になります)。これはすばらしいっ!!

それにしてもこの ND-S1 と言う機器は出力用にコンポジットデジタルとオプティカル光デジタル出力があるので output は二系統あります。そんでもって input は持っていないと言うことが解ります。

これが悲しいのよねぇ。ミニコンポから光デジタル出力して ND-S1 にデジタル入力があったとしたら PC 側でデジタル録音できたのにねぇ。それができない。フツーの PC 用サウンドカードではない。ということが良く分かります。

話を戻しますが、FreeBSD ではここからが泥沼です。まず、デジタル出力のチャンネルが二系統あるのですが、僕は「どっちかの出力チャンネルを指定する」コマンドなり設定を見つけることができませんでした。なので、オプティカル光ケーブルで接続しているほうを優先的に利用することができないので実際に正常に音が出ているのか確認できないのであります。orz。Windows とか MacOSX はどうやって判断しているのだろう・・。

ちなみに sysctl の hw.snd MIB ではそれらしいのを見つけることができませんでした。

けどもまぁ、気を取り直してとりあえず CD でも聞いてみましょう。あれ・・。音が出ない・・。
じゃあ mplayer で mp3 でも聞いてみましょう。あれ・・。音が出ない・・。
それなら dolphin (KDE4 付属のメディアプレーヤー)で動画でも見てみましょう。あれ・・。音が出ない・・。

orz。つまりは全滅。と言う感じなんですね。あげくの果てにはなにやら怪しげなログを出力しているようです。

kernel: pcm4:virtual:dsp4.vp0: play interrupt timeout, channel dead
kernel: usb5: *** WARNING: opening low/full speed device, this does not work yet.
pcm4:virtual:dsp4.vp0: play interrupt timeout, channel dead
kernel: usb5: *** WARNING: opening low/full speed device, this does not work yet.

USB HUB が悪さしていて USB の速度が出ないよ。的なメッセージなんですかね。けど、PC の USB ポートに直接接続したので特に問題は無いのではないかと思えるんですけど・・。また、同一 PC でマルチブートする Windows7 は同じ構成で無事に動作したし。

ちなみにこのメッセージが出力される部分がどこか、一応ソースを眺めたのですが、sys/dev/usb/ の
ehci.c と uhci.c だったので snd_uaoudio 側ではなく、USB 側の問題であろうと言う感じはします。時間ができたらじっくりとソースを眺めてみたいとは思いますが・・。

とまぁ、そんな感じで ONKYO ND-S1 を購入したのですが、ネタ的には音響機器・PC のデバイスと色々な角度から見てネタができて良かったです。

まぁ、FreeBSD で動作して本当に嬉しい?と言われれば何ともいえないのですけどね。 iPhone3G や iTunes での音楽の管理は 全て MacOSX 上で行っているので MacOSX に接続して、そこで動作すれば良いやー。となってしまうのでありますが;-)。


つづきを別のエントリーとして書きました。以下になります。

ONKYO ND-S1 と FreeBSD 8.1-PRERELEASE。

BUFFALO WLR-UC-G を FreeBSD で使う。

渋谷に新しくヤマダ電気が出来たのだけど、そこの特売で今はディスコンのバッファロー(FreeBSD 的には MELCO)の WLR-UC-G が 1,480yen で売っていた。

USB 接続の無線 LAN アダプタで、WindowsXP 上では AOSS と言うソフトウェアルータを利用して無線アクセスポイントになれる。と言うヤツ。

Windows 専用のアプリケーションをインストールすると無線アクセスポイントになれるんだけど、これを FreeBSD に接続してフツーに無線 LAN アダプタに利用できないかなぁ。と思い、購入。まぁ、FreeBSD で動かなければ WindowsXP で iPod Touch 用に利用すれば良いかな。とも思ったんだけど。

で、FreeBSD に早速接続してみた。kldload if_* とかした後で。けど、かわいくないなぁ。ugen0 に落ちてしまった。しくしく。

さてと。格闘はここから。まず、WLR-UC-G はどんなチップが乗っているのか? google で探すのだけど、どうも解らない。Linux 方面での実績を調べてみたのだけど、それも無いみたい・・。あらら。結局どんなチップを使っているのか google では解らなかったので、しょーがない。Windows に付属の CD からドライバをインストールして調べてみた。すると、Ralink Technology Corp. と言う所のドライバを利用しているみたい。ふぅ。

ちなみに FreeBSD に接続した時の usbdevs -v はこんな感じ。

port 5 addr 2: high speed, power 300 mA, config 1, WLR-UC-G(0x0119), Buffalo(0x0411), rev 0.01

ただ、こいつ、しゃらくさいことにプロダクト ID を二つ持っている。AP モードにした場合は 0x0119、クライアントモードにした場合は 0x0116 となる。これを覚えておいてと。

これ位の情報が手に入ると後は簡単。FreeBSD で Ralink Technology Corp. 用のカーネモジュールが無いか調べてみたら if_rum と言うのがあるじゃーん。と、言うことで最新の 7.1-STABLE のソースコードを持ってきてエントリを追加します。

でもって出来たパッチはこの辺りにおいておきます。

http://www.icmpv6.org/Prog/FreeBSD_patches/MELCO_WLR-UC-G.patch

プロダクト ID を二つ登録したので AP モードでもクライアントモードでもどっちでも 無線 LAN アダプタとして利用可能です。けど、クライアントモードで利用したほうが安心かも;-)。

実際に利用するするためには色々なカーネルモジュールをロードする必要がありまずが、ここでは割愛させていただきます;-)。 僕が試した感じでは ifconfig rum0 up して、ssid 付けて dhcp でアドレスが付きました。後 ifconfig rum0 scan も利用できました。

FreeBSD において AP モードは利用できないけど、ハードウェア自体は利用できるようになりました。めでたしめでたし。と言うことにしましょう;-)。

ASUS M2A-VM HDMI の続き。そのさん。

さて、ASUS M2A-VM HDMI で FreeBSD を楽しむスレッドのそのさんです。前回は acpi_ppc.ko で Cool'n'Quiet を有効にするお話でした。

今回は IXP SB600 Serial ATA Controller のお話です。ちょっと google していたら、以下の URL を発見。

http://lists.freebsd.org/pipermail/freebsd-bugs/2007-May/024410.html

今まで ASUS M2A-VM HDMI マザーボードと言うか、AMD690G チップセットは UDMA33 で HDD を認識して忌んだけど、上のパッチを適用すると ATA150 で認識するようになってくれた。

こっちがパッチ適用前のメッセージ。

ad4: 239372MB at ata2-master UDMA33

こっちがパッチ適用後のメッセージ。

ad4: 239372MB at ata2-master SATA150

S-ATA なので ad4 と認識されてしまうんだけど、それにしても ようやっと SATA150 になった。僕の 環境は FreeBSD/amd64 6.3-PRERELEASE なんだけど、まだ、CURRENT から降ってきていないみたい。なので、STABLE で利用したい人は上記のパッチを手バッチで自分のソースに当てましょう;-)。

まぁ、一応パッチを書いておきましたけど・・。

http://www.icmpv6.org/Prog/FreeBSD_patches/IXP_SB600SATA-6.3-PRERELEASE.patch

けど、すぐに STABLE に降ってくるんだろうねぇ。

後は、グラフィックチップだなぁ。

SD Bus Host Adapter。

最近の NotePC には SD スロットが付いている。しかし、FreeBSD ではドライバが無くて、none なデバイスである・・。pciconf -lv すると以下のような感じ。

none2@pci2:1:2: class=0x080501 card=0x01a31028 chip=0x08221180 rev=0x17 hdr=0x00
device = 'SD Bus Host Adapter'
class = base peripheral

しかし、世の中にはすごい人がいるものですねぇ。FreeBSD 用のドライバを書いてくれた人がいます。

http://lists.freebsd.org/pipermail/freebsd-drivers/2006-September/000243.html
http://www.sashi.de/en/freebsd/sdhci/index.html

早速ダウンロードして試してみました。make して kldload sdhci.ko しておしまい。再度、pciconf -lv してみると以下のような感じ。おーーー。

sdhci0@pci2:1:2: class=0x080501 card=0x01a31028 chip=0x08221180 rev=0x17 hdr=0x00
vendor = 'Ricoh Co Ltd'
device = 'SD Bus Host Adapter'
class = base peripheral

しかし、messages にはログがガンガン吐かれている。あぁ。と、言うことで常時 kldload しているわけには行かないみたい。必要な時に kldload するようにするか・・。あ、ちなみにデバイスと認識させただけで、実際にデータ転送とかしたことないですよ。僕;-)。ヒトバシラーな方、頑張ってください。


僕が思うに、devd もしくは hald と連携して、SD カードが挿入された時点で kldload するようにしたらええんかな? あ、けど、SD カード挿入前には /dev/sdhci0 が生えてなければならないので、ちょっち無理かなぁ・・。

 
Copyright (c) 1997-2010 takachan@running-dog.net All Rights Reserved.