メッセージボックス

当サイトは Pebble watch とは何の関係もありません。「pebble」で検索して来られた方はごめんなさい。

【お知らせ】 
2016-03-26 2年ほどWindowsに戻っていましたが、Ubuntu16.04で再びUbuntuを使おうと思ってます。

Adsense

2013年3月11日月曜日

SmartCam on Ubuntu12.04(amd64)。

手持ちのスマートフォンをWebカメラに出来るというSmartCam。
何の気無しに始めたコンパイル作業が思わぬドツボにはまってしまい
結局まる1日かかったというトンデモ作業になってしまったので
記念上げしようと思った次第です。

とりあえずはエラーが出ないように動いている状態の完成品?を
YouTube動画にアップロードしました。(初うp)

ただ、本人も正直半分しかわかっていないので、Skypeなどの連携はしていません。
wifi接続しか試していません。(bluetoothでのエラーは沢山あるようです)
これ以上エラーが出ても、もうわかりません。
ということで、スミマセン。



ことの発端はこちら。

http://sourceforge.net/projects/smartcam/

smartcamのdebパッケージはあるのですが、残念なことに32ビット版のみ。
もちろんこれを64ビット版でも入れられるのですが
32ビット用ライブラリを山ほど入れられるので、それはご勘弁。
ということで、64ビット版Ubuntu上でコンパイルしてみようと思ったのです。
(※結果的には 32ビット版の smartcamを入れたほうが断然早いと思います。)

まずは sourceforgeからソースを入手(ダウンロード画面)して展開します。

$ ./configure
$ make
$ sudo make install (※ checkinstall が良いかも。詳しくはググって。)

で、条件が揃えばインストールが成功しますが、当然のごとくエラー。

コンパイルするには、実は山ほどパッケージを入れなければいけなかったのです。
エラーなくコンパイルするには、ソース以外に以下のライブラリが必要でした。
・ intltool
・ libglib2.0-dev
・ libgtk2.0-dev
・ libdbus-glib-1-dev
・ libgconf2-dev
・ libbluetooth-dev
・ libjpeg-dev

私の環境ではこれだけの不足エラーが出たのですが、
ひょっとしてこれで全部ではないかも知れません。

しかもソースにはパッチが必要(右クリックでリンク先を保存)で
初めて diff と patch について学びました。
Can't compile, 64bit Ubuntu12.04: taking address of temporar

$ patch -p0 < 7ef4168e068957a5cf63ea35494e8b5589402b99.diff

※ ソースとdiffファイルの場所によって -p0 とか -p1 とか変わりますので
詳しくは patch の -pオプションを調べて下さい。

多分これで smartcam本体は出来上がります。 ここまではなんとかクリアしました。
しかし問題は smartcam.ko のドライバの方だったのです。

ドライバは driver_src の方に入っていて、こちらもパッチが必要(これはDL画面)です。

$ sudo make -C /lib/modules/`uname -r`/build M=`pwd`

で、うまくいけばコンパイルできるのですが、こちらもエラー。
これはググっても答えが出ず、ほとほと困ってしまいました。

この正解は、(たぶん。ですが)
上記の fix_driver.patchを当てた driver_src/smartcam.c に
ヘッダファイルを2つインクルードすることでした。

#include <linux/module.h>
#include <linux/netdrive.h>

この2行を #include行に(28行目あたりから)追加してやれば
makeが通って、smartcam.ko が作成されました。

あとは、このドライバをロードしてやればいいのですが
/dev/videoX が無い方(私もだったのですが)は mknodで作成する必要があります。

以下のコマンドでテストしてみて下さい。

$ sudo su
# modprobe videodev
# insmod (smartcam.koが有るディレクトリ)/smartcam.ko
# mknod /dev/video0 c 81 0
# chmod 666 /dev/video0
# ln -s /dev/video0 /dev/video

これで smartcamを立ち上げて、エラー無しで接続できたら成功です。

再起動したら insmod とか /dev/videoX が消えますので
init.d に上記の#行で書いたコマンドをスクリプトとして放り込んで
update-rc.d して下さい。
そうしたら起動時に読み込まれるようになります。
詳しくは 「自動起動、rc.local、init.d」(拙著)を見て下さいね。



1日近くかかったので、思い出し思い出し書いています。
ここで書き忘れたこともあるかもしれませんが、ご了承頂ければ幸いです。




Macを持っている人には当たり前なことでしょうが、これは感動モノですね。
ということは、次回これ系の話になります予定。

0 件のコメント:

コメントを投稿