3月 012015
 

最近はほとんどの NotePC にカメラが付いていて Windows とかだと Skype しよう。 Mac だと FaceTime しよう。などと言っていますが、普段はほとんど使わない(と、僕は思う)んだけど、実際にはどうなんでしょうか?

そんな感じの標準装備のカメラですが OS に FreeBSD を利用していた場合にどのような目的でどう使う? ってか、その前に「ここに付いているカメラは FreeBSD で動くの?」などと思ってしまうのですが、今回は実際に NotePC に付いているカメラを FreeBSD で利用してみるとこにしましょう。

 
今回登場する NotePC は僕の持っている ThinkPad Edge e145 です。このブログには何回か登場しているのですが FreeBSD がバリバリ動作しています;-)。この ThinkPad Edge e145 も最近の NotePC のトレンドを追いかけているようで、ディスプレーの上にカメラが付いています。

今回はこのカメラを利用して色々やってみたいと思います。もしかしたら、ネタ的にはもう既に枯れているかも・・f(^^;;。

 
1). カメラを認識させる
最近の NotePC に付属のカメラはほとんどが USB に接続されているようですね。 pciconf -lv とか usbconfig list コマンドを叩き、デバイス的に、どこにカメラが接続されているか確認しましょう。

 # usbconfig list
    :
ugen4.2: <Integrated Camera Vimicro corp.> at usbus4, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (256mA)
    :

 
ThinkPad Edge e145 の場合は USB の ugen4.2 として認識されているようですね。と、いうことでこいつを正しいデバイスとして認識させてみましょう。

 
2). デバイスドライバのインストール
FreeBSD の純正デバイスドライバというのは存在してないのですが、 Linux 方面で開発されたキャラクタデバイスを読み込むドライバを FreeBSD に対応させた Cuse4BSD を利用します。 ports 的には multimedia/cuse4bsd-kmod になります。
まず、これをインストールし、続いてキャラクタデバイスをビデオデバイスとして認識させる webcamd をインストールします。 ports 的には multimedia/webcamd になります。まぁ、 webcamd を make install すると関連性で cuse4bsd-kmod もインストールされますが;-)。

そして multimedia/cuse4bsd-kmod を make install したときにインストールされた cuse4bsd.ko を kldload します。

# kldload /boot/modules/cuse4bsd.ko

 
カーネルモジュールをロードしたあとに wbecamd を起動し /dev/video0 として USB カメラを認識させます。オプションに USB 接続のカメラの USB のデバイス名を指定します。

# webcamd -d ugen4.2
Attached to ugen4.2[0]
Creating /dev/video0
^Z
中断
# bg
# ls -l /dev/video0
crw-rw---  1 webcamd  webcamd  0x82 Feb 28 26:14 /dev/video0
# chmod 666 /dev/video0

 
webcamd を起動すると正しく動作する USB カメラであれば /dev/video0 が生えてきます。
その後、一旦バックグラウンドにほーり投げてパーミッションを確認します。今回は一般ユーザでも利用したいので 666 に変更しています。デバイス生成時にバーミッションを変更したい場合には /etc/devd.conf におまじないを書いてください。ここでは割愛します;-)。

以上で準備は完了です。

 
3). まずはローカルでカメラを利用してみる
/dev/video0 が生えてきたので、実際にカメラに写るモノを表示させてみたいですね。そんな時は pwcview を利用します。 ports 的には multimedia/pwcview になります。
こいつを make install したあとに特にオプションも付けずに起動すると X11 上にウィンドが現れてカメラから映る景色が表示されると思います。

しかし、ローカルな FreeBSD の X11 の画面にカメラから映る景色が表示されても「だから何?」で終わってしまいますよねf(^^;;。
僕自身もまさしくそのとおりでして。ただ単に「あ。 cuse4bsd.ko と webcamd でデバイスを認識したのね。ふーん。すごいね。いじょ。」みたいな・・f(^^;;。

この写真はまさしくそんな感じで、 ThinkPad Edge e145 上の FreeBSD で KDE4 が動いていて、そこで pwcview を起動させた状態です。

IMG_0968_NotePC_Cam_1

ディスプレーの上にカメラがあるのですが、その横にある黄緑色の LED が光っております。カメラが Ready 状態ですねぇ;-)。

と、いうことで何か別の利用方法を考えてみることにしましょう。

あ。 chmod 666 /dev/video0 しましたが、これしないと一般ユーザで起動する pwcview では 画像が読み込めない状態になります。

 
4). リモートからカメラの映像を確認する
ローカルな FreeBSD の X11 に画面が出力されたので、リモートの FreeBSD から ssh -CY し、手元の X11 に pwcview を表示させればいんじゃね? えぇ。まさしくそのとおりですね。それだとリモートの X11 にカメラに映された映像が表示されます。それもひとつの案ですね;-)。

今回は http で画像を転送してみましょう。 ports から mjpg-streamer をインストールします。 ports 的には multimedia/mjpg-streamer になります。 make config は default の設定で良いです。まぁ、強いて言えば “Linux-UVC V4L2 plugin” を有効にしてインストールしましょう。

インストールしたものの中で重要なのはプラグインがインストールされた場所でしょうか。 /usr/local/lib/mjpg-streamer/ の中を覗くと .so なファイルが入っていますが mjpg-streamer を起動するときに利用するプラグインになります。

では実際に起動してみましょう。

$ mjpg_streamer -i 'input_uvc.so -d /dev/video0 -y' -o 'output_http.so -w /usr/local/www/mjpg-streamer'

 
/dev/video0 は chmod 666 しているので一般ユーザ権限で起動できます。

-i でカメラ側のオプションを指定します。 input_uvc.so プラグインを利用し、デバイスは /dev/video0 から入力します。
-o で出力側のオプションを指定します。 output_http.so プラグインを利用しコンテンツは /usr/local/www/mjpg-streamer にあることを指定します。
-o に output_file.so を指定するとカメラに写ったモノはファイルに出力してくれるのでしょうなぁ。僕は試していませんがf(^^;;。

ちなみに /usr/local/etc/rc.d/mjpg_streamer という起動スクリプトがインストールされるのですが、こいつは -i のオプションを指定する部分が無いんですよね。 rc.conf.local には以下のように書くと良いかな。

mjpg_streamer_enable="YES"
mjpg_streamer_flags="-i 'input_uvc.so -d /dev/video0 -y' -o 'output_http.so -w /usr/local/www/mjpg-streamer'"

 
さてさて。あとはウェブブラウザで http://localhost:8080 とかリモートのマシンからアクセスしてみるとそれらしいウェブサイトが表示されると思います。

ちなみにポート番号を変えたい場合には以下のように設定するが良いです。

mjpg_streamer_enable="YES"
mjpg_streamer_flags="-i 'input_uvc.so -d /dev/video0 -y' -o 'output_http.so -p 8081 -w /usr/local/www/mjpg-streamer'"

 
こんな感じで任意のポートに変更できたりします。

ただ、悲しいかな・・。 mjpg_streamer は IPv6 には対応していないようですねぇ。ソースコードの plugins/output_http/httpd.c の socket(PF_INET, …); の部分を書き換えると IPv6 対応になるかなぁ?暇なときにいじってみよう。

さてと。実際に表示される動画ですが、皆さんの目で確認してみてください;-)。
左のメニューから Static を選択すると写真が、 Stream を選択すると動画が流れ始めます。
僕の ThinkPad Edge e145 のカメラは pwcview ではまぁ、そこそこ綺麗に見えるのですが mjpg_streamer で見ると多少ちらつきますね。あと、ブラウザ側の PC の負荷が高くなるかな。

 
と、いう感じで NotePC に付いていたカメラが FreeBSD からでも利用できることが確認できました。しかもそのカメラがリモートからアクセスできて閲覧もできることが確認できたので、これで利用頻度がいっきにアップするのでは無いかと思われます。嬉しいことですね。

ただ、音を飛ばす時にはもっと別の技が必要になりそうな気がしますが、それはまた別の機会にでも:-|。

あと、カメラが付いてない FreeBSD がインストールされた PC には手元にある USB カメラを色々付けてみて cuse4bsd-kmod と webcamd で動作するか確認して見るのもよいかと思います。
もし動作する USB カメラだった場合、フツーの自作 PC にインストールした FreeBSD でも今回の組み合わせでカメラが利用できるようになるかと思われます。

ちなみに、僕は以下の二つの USB カメラを持っているのですが、こいつらをデスクトップの FreeBSD で利用してみました。

IMG_2228_NotePC_Cam_2

左側の白いのは FreeBSD というか webcamd で認識してくれませんでした。以下のようなメッセージが出力されます。

# webcamd -d ugen0.2
webcamd: Cannot find USB device

 
右側の黒いのは赤外線付きで暗いところでも良く見えるカメラなのですが、こいつは pwcview では動きましたが mjpg_streamer では動きませんでした(砂の嵐が表示されます)。
カメラによって動作が多少違うようですね。

 
と、いうことで、今回は NotePC に標準で付いているカメラで遊んでみました。 mjpg_streamer がちゃんと動いてくれると、利用価値は上がりそうですね。 また、 mjpg_streamer に変わる何か別のアプリを見つけてきて、それを試してみるのも良さそうですね。何か良い ports をご存じの方いましたら教えて下さい;-)。

また、最近流行の Raspberry Pi を FreeBSD/ARM で起動して USB カメラを接続し今回の組み合わせを利用すると、IoT な監視カメラができるかもしれません。

バッテリ運用で Raspberry Pi+USB Camera+FreeBSD+cuse4bsd-kmod+webcamd+mjpg_streamer+Wi-Fi な状態のヤツをラジコンカーに積んで走らせたら、録画ではなく、リアルタイムで動画が堪能できるような気がします。

面白そうだ・・;-)。

11月 142011
 

以前に一回「USB 無線 LAN 色々、FreeBSD で試してみた。」と言うエントリを書いているのですが今回のその続編。二回目です。

今回は FreeBSD のバージョンを 9.0-RC1 にして、新たに購入した機器の動作確認をしてみました。とわいつつ、実は前回も書いているのですが、if_run と if_rum の機器を持ってくればほとんどが動作するんですけどねぇ・・。

今回試した USB 無線 LAN 機器は以下の通り。まずは写真を。

IMG_2549_RadioLan2_1.jpg

順番に見ていくとしましょう。

1. Planex GW-USNano2-G
写真の上のほうにある黒くてチッコイやつです。こいつは FreeBSD で動作しない、ドライバが書かれていない、例の Realtek RTL8192CU を使っているヤツです。またまたま買ってしまい大失敗しました・・。orz。 NetBSD だと動作するんですけどねぇ。

で、今回も ndis でトライしてみたんですが、USB 機器はどうしたら if_ndis に結びつけるのか結局解りませんでした。sys/dev/usb/usbdevs にエントリー書けば良いのかなぁ? ndis での USB 機器の使い方がいまいち解らないんですよねぇ。そんなデバイスは知らん。と言われて ugen にアタッチされてしまいます・・。orz。

2. Planex GW-US54Mini2
これはアキバの某お店で 499yen で売っていたので買ってきて試しました。 FreeBSD では if_rum で動作します。 802.11g でリンクアップするのでこれはまぁ、中々良い感じでしょうか。ただし、今はもう販売終了となっていると思いますが・・。

3. Logitec LAN-W300N/U2
これは FreeBSD では if_run で動作します。けっこう高速で利用できます。続きはちょっと下のほうで書きます。

4. BUFFALO WLI-UC-GNM
これも FreeBSD では if_run で動作します。802.11b/g/n に対応しているので 150Mbps 出る。と言われていますが、そこそこな感じでしょうか。

と、言うことで今回は四打数三安打でした。それにしても最近は ちっこい USB 無線 LAN アダプタが RealTek のだったり Ralink のだったりするので購入する場合にはちゃんと下調べしたほうが良いと思われます。

で、どうして今回、再度の検証を行なったかと言うと、以前利用していた PCI GW-US300MiniW が壊れてしまったので、手持ちであるあるやつを利用し始めたんだけどこいつらみんな遅いっ!! 例えば NFS 上にある動画を再生しようとするとブチブチコマ落ちするし止まるしで到底実用には耐えられない遅さなのであります。

じゃ。ってんで、今回二回目の買い出しに出たのであります。結論から言うは if_run でも通信速度が速いものと遅いものがあります。僕が思うに小さいのはアンテナの影響から来るのか、遅いですね。BUFFALO WLI-UC-GNM は小さくてスルっと収まるんだけど遅いのが難点。
Logitec LAN-W300N/U2 はちょっと出っ張るんだけど、こいつは速いです。WLI-UC-GNM よりも速い。あと、以前使っていて壊れてしまった GW-US300MiniW も大きくて邪魔だったんだけど速かった。

あ、体感的には if_rum よりも if_run のほうが速いですね。まぁ、これはチップとドライバの問題で、当然 if_run のほうが速いのだろうと思いますが。

と、言うわけで教訓。

・if_run を買いましょう。
・300M と書いてあるのは多分速い。けど、その分でかい。
・速さを求めるならでかいのを買いましょう。

って感じでしょうか。デバイスが認識したあとに ifconfig wlan0 の media の部分を見ると良いと思います。

さてさて。どうして僕がこんなに USB 無線 LAN アダプタに凝るのか? と言えば、ThinkPad X100e 内蔵の 無線 LAN カード Advanced-N + WiMAX 6250 が正常に動作しないので USB アダプタに走るのでありました。

が、この間別のエントリにコメントしました<が、Advanced-N + WiMAX 6250 は動作するようになりました。 ここに書かれているように if_iwn.c を改修すると動作します。

それにしてもちゃんと動作する if_iwn はむちゃくちゃ速いです。 802.11n でリンクアップします。実際に計測してみると 24,5Mbps は出ています。すげーーっ(@_o)。けど、しょっちゅう通信が切れるんですよね。リンクの up/down はしないんだけど 30 秒くらい平気で止まってしまい、利用できるんだけど実用には耐えられない。速いだけに非常にもったいない・・。orz

と、言うことで Advanced-N + WiMAX 6250 の次に速いのが GW-US300MiniW、その次が LAN-W300N/U2 です。こいつは 12,3Mbps くらい出てくれます。 WLI-UC-GNM になると if_rum の速い機器と同等程度の速度になりますかねぇ。

あくまでも僕の実測と体感からの感想です。

と、言うことで if_run が今のところは一番良い感じだと思います。利用できるのは当たり前。更に速度を求めるのであればもっと他に色々試してみたいものですねぇ;-)。

11月 272010
 

ThinkPad X100e 内蔵の Intel Centrino Advanced-N + WiMAX 6250 って無線 LAN は 8.1-STABLE を利用すると iwn0 として認識するんだけど、利用できない。9-CURRENT では if_iwn.c とかビミョーに更新されているので、もしかしたら動作するかもしれませんが・・。

と、言うことで、USB の無線 LAN を利用することにしました。でもってできることなら小型が良いなぁ。と思い、既に持っているもの二つと、新たに三個も購入してしまいました・・。orz。

IMG_0145_RadioLan_1.jpg

これが僕が持っている USB 無線 LAN のオールスターキャストです。右側の白い、大きいヤツは前回書いていますね。if_rum と if_run で認識されるヤツです。

今回新たに購入したのは左側の黒いの二つと、下のちっこい白いの一つ。順番に見ていくことにしましょう。

一つ目。いちばんちっこい、黒いヤツ。

PLANEX GW-USValue-EZ

こいつは FreeBSD では動作しません。チップセットは Realtek RTL8192CU を利用しています。現在、FreeBSD では Realtek RTL8192CU に対応したドライバはありません。orz。

ただ、このまま、何もせずに使わないのはちょっともったいないので、ちょっと if_ndis ドライバで試してみることにしました。 FreeBSD の ndis ドライバは以前は PCMCIA カードにしか対応していなかったのですが、最近は USB デバイスにも対応したので、試してみる価値あり。と言う感じなのですね。

まずは Windows7 x64 用のドライバを持ってきます。そして、FreeBSD 上で ndisgen コマンドを叩きます。

# ndisgen net8192cu.inf rtl8192cu.sys

 
試してみると ndisgen コマンドがエラーになります。 net8192cu.inf の最後の行に改行コードが無いのでエラーになっているようです。なのでエディタで net8192cu.inf を開いてリターンキーを一発叩いてあげて再度実行すると、おぉ。できました。rtl8192cu_sys.ko が完成したので /boot/modules/ に入れた後、kldload します。が・・。

Windows7 x64 のフツーのドライバを利用すると ugen に落ちてしまい ndis0 では認識してくれません。 XLINK 用のドライバを kldload するとカーネルが凍り付きます。と、言うことで、今のところ、Realtek RTL8192CU なチップの USB 無線 LAN は使えないかなぁ。と言う感じなのであります。

続いて二個目。ちょっと大きめの黒いヤツ。

Buffalo WLI-UC-GN

一個目の PLANEX GW-USValue-EZ は usbdevs をろくすっぽ見ずに購入したので大失敗です。今度はちゃんと下調べして購入しました。この USB デバイスは if_run で動作するようです。9-CURRENT には man に run(4) が存在していて、そこにはちゃんと Buffalo WLI-UC-GN と書いてあるのです。

がっ!! こいつも動作しませんでした。と、言うか素直に AP に接続できない・・。 orz

usbdevs にもちゃんとエントリがあって kldload if_run するとサクっと認識してくれます。おっ。やったーっ!! ってなるんですけどね。しかし、WPA で接続しようと思い /etc/wpa_supplicant.conf を以下のように書くんですけど・・。

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
eapol_version=1 ap_scan=1 fast_reauth=1
network={ ssid="SSID-AP" scan_ssid=1 key_mgmt=WPA-PSK psk="PassWord" }

 
ドライバ的には認識するのですが WPA を利用して AP を検索しようとしても WLI-UC-GN 本体のほうで wpa_supplicant.conf に記述した内容を上書きしてしまいます。ap_scan=2 で AP を探索したりとか・・。

なので、ドライバ的にはちゃんと認識するのですが、デバイス的には利用できないのでありました。ただ、利用できない(AP に接続できない)だけでないのがこれまた痛い。あるタイミングで突然 AP に接続できたりするし、全然全く AP に接続できない場合もある。

ブート時には全く AP に接続できないので実質的には FreeBSD では利用できない USB 無線 LAN の内の一つです。購入時には十分に注意しましょう。

で。三個目。

PLANEX GW-USMicroN

いやぁ。小型で、ようやっと動作するものに巡り会えました。man run に掲載されているものをウェブで調べて Amazon.co.jp で購入しました。999yen。ふぅ。

こいつは Ralink の RT3020 チップセットを利用しています。FreeBSD のファームウェアは RT2870 を利用しています。runfw.ko を kldload します。

今度は WPA でもちゃんと接続できるのでホッとしました。大きさ的にもまぁ、とりあえず小型なので嬉しいです。ただ、色が黒いほうが良かったかな。と言う感じはしますが。

と、言うことで NotePC に内蔵な無線 LAN の他に USB のヤツもそろそろ色々動くものが出てきたような感じがします。ただ、if_run 対応のチップは ieee802.11n に対応しているのに if_run 自体は 802.11g の速さでしか認識してくれないのでちょっと悲しいかなぁ。と言うのはありますが、FreeBSD で USB な 無線 LAN デバイスを利用する場合には if_rum もしくは if_run 対応のものが安心でしょうなぁ。と思うのであります・・。

がっ!! WLI-UC-GN はハマリ道で、GW-USValue-EZ は FreeBSD においてはドライバが存在しない。と言う結果になったのでありました・・。

11月 112010
 

最近、ThinkPad X100e を購入したのですが、こいつはグラフィックスカードが ATI の HD3200 相当だったので X11 のドライバの xf86-video-ati とか色々触っていたわけなのであります。

で、色々いじってみると、 X11 の ati の radeon ドライバでは HD5450 が動作するみたいだったのでいよいよ満を持してグラフィックスカードを交換してトライしてみよう。と言うことになったのであります。

購入したのは玄人志向の RH5450-LE512HD/D3/HS。ドスパラで購入したのですが、その時、ASUS の HD5570 が5,980yen だったのでどっちにしようか悩み、店員さんに確認したのですが、僕の PC は AthlonX2 4600+ で電源は 350W。店員さん曰く「350W で HD5570 はきついかもしれないですねー。」と言うことで HD5450 にしたのでありました。

IMG_0049_RadeonHD5450_1.jpg

ファンレス・ロープロファイルなのであります。

まずはこのグラフィックスカードを Windows7 で試してみました。Windows エクスペリエンスで確認してみると、以前使っていたHD 4350と比較です。以前比較したのはここにあますね。

hd5450_winperie.jpg

グラフィックス性能がちょっぴりアップした。と言う感じでしょうか。それでも(僕は多分使う機会は無いとは思いますが) DirectX11 に対応しているのでね。まぁ、よしとしましょう。

後、Windows7 で HDMI 出力する時の注意点があります。ディスプレーの画面全体に表示できないので CCC で設定を見てあげる必要があります。以下の URL を参考にすれば良いかと思います。

http://www.ask-corp.jp/supports/ati2/hdmi_scaling.html

DVI 出力だと問題無いのですけどね。HDMI でフル DH 出力すると画面が小さく表示され、周りが黒くなります。

さて。Windows で動作確認が終わったので次はいよいよ FreeBSD でトライです。

が・・。ブートして X が起動した段階でブラックアウト、フリーズしてしまいますな・・。orz。

もう少し詳しく書くと、drm.ko・radeon.ko を kldload しない状態で HD5450 を利用するとディスプレはブラックアウトします。 リモートから ssh して shutdown するか power ボタンを押して S5 ステートでシャットダウンするかしか方法がありません。

drm.ko・radeon.ko を kldload した場合は、カーネル自体が凍り付きます。orz。

xf86-video-ati を 6.13.0 や 6.13.2、はたまた master にしてもカーネル自体が凍り付きます。orz。

なんだかなー。X11 のドライバは対応しているみたいなんだけど、カーネル側で対応していないのかなぁ・・。カーネルモジュールの drm.ko・radeon.ko をロードしない場合はカーネルは関係ないはずで X11 の radeon ドライバのみで動作している(libdrm も使われるのかな?)のだけど、けど、それさえも正常に動作しないのでありました・・。orz。

それにしても 玄人志向の RH5450-LE512HD/D3/HS は調べてみるとイワク付きのグラフィックスカードみたいなのでその辺りが問題になっているのかもしれませんが・・。

と、言うことで、もう少し HD4350 を利用することにしたのでありました・・。

ちなみに Radeon HD の 5000 番台が正常に動作している。という方いますか?いましたらコメント頂ければと思います。

10月 052010
 

さて。ThinkPad X100e を購入して色々試している最中です。「ThinkPad X100e で FreeBSD。気がついた点。」のエントリーで書いた通り、if_iwn が動作しないので手元にある USB 接続の WiFi デバイスを試してみました。

手元にあるのは二つ。

MELCO WLR-UC-G
PCI GW-US300MiniW

上の MELCO WLR-UC-G は Ralink の 802.11a/b/g に対応した RT2500W のチップを載せています。こいつは FreeBSD 8.1-STABLE においては usbdevs にエントリが無いのでパッチを書きました。以下の URL にパッチはあります。

http://icmpv6.org/Prog/FreeBSD_patches/MELCO_WLR-UC-G_8.1-STABLE.patch

そして、このパッチは send-pr したので近いうちにパッチを適用せずとも利用できるようになるのでは。と思います。
なお、MELCO WLR-UC-G は ディップスイッチで AOSS(AP モード)とクライアントモードの両方に対応していますが、USB の deviceid は両方とも登録しておきました。

下の PCI GW-US300MiniW は 8.1-STABLE にはドライバは用意されていますが、man ページが存在していないようですね。if_run で認識するデバイスです。 if_run は Ralink の 802.11a/b/g/n に対応した RT2700U / RT2800U / RT3000U のチップに対応したデバイスです。

if_rum_run_0.jpg

では、FreeBSD/amd64 8.1-STABLE で利用できるのか? 検証した結果をちょっと書いておきます。

まず、if_rum の MELCO WLR-UC-G ですが、パッチを適用して kldload if_rum した後に USB に接続すると無事に認識します。認識するとこんな感じになります。

ugen2.2: <Buffalo> at usbus2
rum0: <Buffalo WLR-UC-G, class 0/0, rev 2.00/0.01, addr 2> on usbus2
rum0: MAC/BBP RT2573 (rev 0x2573a), RF RT2528

 
今回は一番簡単な wep で接続しています。全ての機器はこれで利用するようにコマンドを投入しました。rum0、run0 とオンボードの iwn0 は以下のコマンドで検証しています。

# ifconfig wlan0 create wlandev rum0
# ifconfig wlan0 ssid SS-ID wepmode on wepkey 0x313131 weptxkey 1 up
# dhclient wlan0

 
パッチ適用後の MELCO WLR-UC-G はこれで無事に動作することを確認しました。DHCP サーバからアドレスを取得して、ネットワークに接続できることを確認しました。ただ、問題もまたあって、どうやらマルチキャストパケットが通らないようです。

最近の FreeBSD と言うか KDE は mDNS が動作していて、Apple の Bonjour などと連携してプリンタが利用できたりするんですが、 mDNSResponder が以下のメッセージを出力し正常に動作していないように見えます。あれま・・。orz。

mDNSResponder: mDNS_AddDNSServer: Lock not held! mDNS_busy (0) mDNS_reentrancy (0)

 
ユニキャストなどが無事に通信ができるデバイスなだけにちょっと残念です。ちなみに mDNS 関係のソースは追ってないのであります・・。

次に if_run の PCI GW-US300MiniW についてですが、僕は 9-CURRENT を追っかけていないのでよく解らないのですが、 8.1-STABLE に man が無いと言うことはまだ STABLE に降りてきて時間が経ってないと言うことなんでしょうかね?

kldload if_run した後に USB に接続すると、既にエントリーが登録されているようで特にパッチを書く必要もなくサクっと認識しました;-)。

ugen2.2: <Ralink> at usbus2
run0: <1.0> on usbus2
run0: MAC/BBP RT2860 (rev 0x0102), RF RT2820 (MIMO 2T2R), address 00:90:cc:fd:86:e7
run0: firmware RT2870 loaded

 
上に書いてある ifconfig コマンドを投入し、こちらも wep で動作確認します。run0、wlan0 ともに status: associated になっているのですが、DHCP でアドレスをもらうことができませんでした。orz。

パケットが全く外に出て行ってない感じで手動で IP アドレスを付加して ping を打ってもまぁるで利用できない状態なのでありました・・。orz。

後、run0 で気になったのは if_run のコードをチロっと見てみると 802.11n に対応しているコードが入っているようです。でもって、今回接続したPCI GW-US300MiniW は 802.11n に対応しているデバイスなのですが、こいつは 802.11g で認識してしまいました。あぁれぇ・・。

ドライバがアップデートされるのをちっくと待ちましょうかねぇ。

さてと。ThinkPad X100e に付属の fi_iwn が利用できない。USB の if_run が利用できない。USB の if_rum は利用できるみたいだけどマルチキャストがどうもあやすぃ。みたいな感じとなりました。さてと、どうすっかなぁ・・。

7月 032010
 

ちょっと前のエントリーで「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 はどうなっているんだっけかなぁ。

6月 202010
 

オンキョーの 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。

11月 122008
 

渋谷に新しくヤマダ電気が出来たのだけど、そこの特売で今はディスコンのバッファロー(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 モードは利用できないけど、ハードウェア自体は利用できるようになりました。めでたしめでたし。と言うことにしましょう;-)。

11月 152007
 

さて、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 に降ってくるんだろうねぇ。

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

4月 142007
 

最近の 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 が生えてなければならないので、ちょっち無理かなぁ・・。