|新しいページ|検索|ページ一覧|RSS|@ウィキご利用ガイド | 管理者にお問合せ
|ログイン|

USL-5P


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

SH4でLinuxが動くボードを調べていたら、I/OデータのUSL-5Pっていうのが、linuxが動くということが分かった。玩具(?)として面白そうなので、早速秋葉原で買ってくる。

動かす前にいきなりばらして、コンパクトフラッシュが64Mなのを確認。ネットでは、128Mがささっているロットもあるように書いてあったが、、。どうやって遊ぼうか考え中。

購入


net で調べて、秋葉原のクレバリーで税込み12,043円で購入。ちなみに、ビックカメラだと税込み14,800円だった。ついでに、64MのCFを630円で購入。

動作確認


ばらすことが前提だけど、とりあえず動作確認はOK。

ばらす


とりあえずは、1つしかないネジを外す。
USL-5Pで遊ぶ話
ここに図が書いてあるけど、本物でやらないといまひとつわからない。壊さない程度に引っ張ったり押したりしていると外れる。CFは128MBのがついているロットもあるみたいだけど、64Mのがついていた。上のページのやり方に沿って、新しいCFにコピーして実験。

telnetでログイン


とりあえず、書かれているようにやると telnet でログインできるようになる。

開発環境


次に、プログラムを作ろうとすると、開発環境が必要になる。当然本体には入っていない。上のページも
USL-5P - PukiWiki
も、kernel 入れ替えが前提。C コンパイラだけあれば良いんだけど、、。


できるだけ情報が多い方が良いので、iohack の debian2.6 のセルフビルドにトライする。64MのCFだと無理くさい。外付けにUSBディスクをつけるか、容量の大きいCFかMicroDriveが必要。ちょっと近くのパソコンショップに行って物色。(本体を買うときに秋葉原で買っておけばよかった、、、)
辻堂のPC-DEPOで、1GのCFを安売りしていたのを買う。(kakaku.comの最安値が6131円、辻堂で7900円。まあしょうがないか。)ついでに、Linux World を見たら、調度 USL-5Pの特集があったので買ってきた。fdiskだけ少し小さめにしてこの本の通りやったら、1発で debian が動いた!
apt-get update, apt-get upgrade するとエラーが出て、「ここで止めますか?」みたいなメッセージ。とりあえず止める。
その後、
開発環境
にしたがって、開発環境を入れる。CでHelloWorldが動く。

Todo

  • Webカメラをつなぐ
  • Pasoriをつなぐ

試行錯誤


カメラの画像を送るプログラムを、JMFのサンプルを使って、Javaで作った。これは、videoとしてはmotion jpegで、RTPで送れる。(以上全てWindows上)
この環境をUSL-5Pに移行しようと思ったけど、Javaがない。
仕方ないので、Cで書ける方法を探していて、どうも ffmpeg というツールでできそうだというところまで到達。
Linux上で試して、ffmpegでファイルに落としたデータをJMFのJMStudioで再生できるところまで確認。これを RTP で送ろうとするとうまくいかない。送り側が、JMFのサンプルだとできるので、おそらく video のフォーマットだと予測。JMFは、かなり自動でやってくれるが、ffmpegは多彩なオプションを使ってうまく指定してあげないといけない。予備知識が全くないので、とりあえずネットサーフィンして調べる。現状はここまで
(日記になってしまっている。)


動画フォーマット


色々調べた結果、ffmpegは、(ソースをいじると)motion JPEG(って、おそらく、JPEGそのもの)を RTP で送ることができる。実は、RTPのマーカがオンになるようにしてあげないと、JMFのJMStudioで受けられない。ちなみに、JMStudioをLinuxで起動するには、-Dawt.toolkit=sun.awt.motif.MToolKit をつけないといけない。

ところが、Java JMF で RTP で受けようとすると、JPEG VIDEO (= RFC2435)を期待している。(送り側のサンプルはそれで送っている。)

で、画像のフォーマットが違う。もう少し調べないといけない。はまっていく、、、。

一週間くらい格闘して、ffmpeg でかろうじて RTP で JPEG を送るところまでできたが、絵が汚い。JPEGを作る処理もいじったので、どこかにバグがあるに違いないが、お手上げ状態。データが圧縮されるロジックが複雑過ぎてデバッグできないよお、、、。しかたないので別のツールをベースにすることにする。grabbjが簡単そう。jpegって、ライブラリにあるのを今さらながら発見。

カメラドライバ


まず、カメラのドライバを入れる。カメラは、秋葉原で買ってきた怪しいカメラで、ドライバは標準では入っていない。ネットで探して、 spca5xx を見つける。module のビルドなので、カーネルのビルド環境がないといけない。仕方ないので入れる。ディスクは外付けUSBをつける。
makeすると、いきなり、コンパイラが怒る。-m4-nofpu というオプションがないという。これは、sh4専用のオプションみたい。良く分からないので、Makefileを修正して、オプションを外してしまう。
makeが終わったら、コンパイラのバージョンが違うと怒られた。gcc-3.4 を入れなおして、Makefileを直してビルドしなおし。最初から入っているCCを直しただけだとMakefileの定義の順番で効かない。前のほうで定義する必要あり。
2.6 だと、xxx.o でなくて、 xxx.ko が入る。
やっと、ビルド、インストールできる。カメラをUSBに刺して dmesg で見ると、認識されている。moduleもロードされている。

vgrabbj


vgrabbjを入れる。libjpegが必要。aptにはないので、ソースを落としてビルド。
make install しても、ないと怒られる。調べると、make install-lib をしないとインストールされない!!

さらに、libpng が必要。これもソースを探すが、オリジナルの場所だとサーバが死んでいてダウンロードできない。仕方ないので、src.rpmを見つけてそれを落とす。rpmだと、インストールできないので、alien を入れて、ソースを取り出す。ビルドにzlibが必要。これはaptでget。makeでエラー。いい加減耐えられないので、どうせ使わない png は切り捨てることにして、vgrabbj のソースを修正する。(どこかのホームページに書いてあった。)

やっと、makeを実行できる。でもキャストのエラー。intelマシンだとこんなの起きなかったのに、、、。手で修正(実は直し方が誤っていて、後で修正した。)

/dev/video のデバイスを作る。作り方がわからないので、xawtv や vl4-conf とかを apt で get したが分からない。xawtvをソースごと落として、MAKEDEV.v4l を実行して作る。vgrabbj を実行。妙なエラーで死ぬ。デバッグ。先ほどのキャストのエラーを手で直したところが間違っていた。修正したら、動くようになった。キャプチャしてjpegになったのをWindowsマシンで見ると、確かに写っている。OK。

その後、xawtv は自力でビルドできたが、camserv はビルドできない。


gcc -g -O2 -o camserv camconfig.o camserv.o filter.o main_loop.o picture_loop.o shm.o video.o -Wl,--export- dynamic ../libltdl/.libs/libltdlc.al -ldl ../common/
libcommon.a -lnsl -ljpeg -lm
/usr/bin/ld: errno: TLS definition in /lib/libc.so.6 section .tbss mismatches no n-TLS reference in camserv.o
/lib/libc.so.6: could not read symbols: Bad value
collect2: ld returned 1 exit status

ううむ、訳分からん。

TLS っていうのは、thead local segment らしい。
色々、調べていたら、kaffe があるのを発見。Javaコードが動くのなら、こんな苦労はしなくていいんだけど。



画像転送


色々試して、RTPでJPEG payload を送ることができるようになった。本当は、Motion JPEGで送りたいのだが、フォーマットが分からない。各社各様みたい。それと、Java の JMF で RTP で画像を送ろうとすると、RTPのJPEG Payloadになってしまう。良く分からずにサンプルプログラムの通りやっただけなので、まあこれで良しとする。これは RFC もある。vgarbbjを改造して、遅れるようにした。最初適当に作って、送信者のアカウントとか、統計データとか省略して、なかなかうまくいかなかったのが、最終的には、RFC の通りに正確に送らないといけないことが分かった。

リンク集