「USL-5P」の編集履歴(バックアップ)一覧に戻る

USL-5P - (2006/02/12 (日) 15:22:20) のソース

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

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

*購入

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

*動作確認

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

*ばらす

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

*telnetでログイン

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

*開発環境

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

[[開発環境>http://eggplant.ddo.jp/www/pukiwiki/index.php?%B3%AB%C8%AF%B4%C4%B6%AD%20%28debian26%C8%C7%29]]

できるだけ情報が多い方が良いので、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 するとエラーが出て、「ここで止めますか?」みたいなメッセージ。とりあえず止める。
その後、
[[開発環境>http://eggplant.ddo.jp/www/pukiwiki/index.php?%B3%AB%C8%AF%B4%C4%B6%AD%20%28debian26%C8%C7%29]]
にしたがって、開発環境を入れる。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 らしい。

*リンク集
[[USL-5Pで定点カメラをつくる>http://akita11.jp/plan/usl5p.html]]
[[USL-5Pで遊ぶ話>http://tyche.pu-toyama.ac.jp/~a-urasim/usl-5p/]]
[[USL-5P - PukiWiki>http://eggplant.ddo.jp/www/pukiwiki/index.php?USL-5P]]
人気記事ランキング
目安箱バナー