2011年8月16日火曜日

OpenWrt x86 mjpg-streamer 一体どこで起動されているのか?

いろいろと調べているとどうも通常のブートプロセスから外れたトリガーで mjpg-streamer が起動されているようだ。

一般的なLinuxは /etc/init.d の中で定義されているスクリプトで各プログラムが起動されるように定義していく。
これらのスクリプトは /etc/rc.d の中にあるリンクファイルによって init.d内のスクリプトが指し示されていてカーネルが起動したあとこの中にあるリンクファイルが参照されて起動されてゆく。

またOpenWrtでは各プログラムの設定値は/etc/config内にまとめられているようだ。

Luciでは /etc/rc.d 内にリンクファイルが存在するかどうかで System/StartupのEnableかDisableの判断を行っていて、設定時にはEnabledにする場合にはリンクファイルを作成し、Disabledにする場合はリンクファイルを削除している。

意味がわからないのがこのmjpg-streamerはrc.d内にリンクファイルが無いにもかかわらず起動されているところだ。
八方塞になり途方に暮れているところ、ちょっと頭を冷やしてみるともしかするとuvcドライバかusbドライバがmjpg-streamerを起動しているかもしれないという気がしてきた。


これを確認するのは簡単だ。usbcamを一度抜いてmjpg-streamerプロセスが消えていることを確認した後、再びusbcamを差し込んでmjpg-streamerのプロセスが存在していることが確認できれば言いだけの話だ。
実際にやってみると想像していたとおりの動きをした。
mjpg-streamerは起動プロセスではなく、起動プロセスの結果usbトリガーにより起動していたということだった。

たしかにopkgでパッケージをインストールするさいにカーネル設定の変更を行ったというような内容の表示が行われていた。
しかし再起動を行わないままそのままusbcumを接続して動作確認を行っていたのでmjpg-streamerが起動しなかっただけのようだ。
カーネル設定の変更が行われた場合はシステムの再起動が必要となるということが実感できた。



またkamikaze系のOpenWrtの場合に存在している/usbcam_wwwディレクトリに関してはbackfire系では使用しない方法がとられているようだ。

パッケージデフォルトの設定では単純に 8080ポートにhttpサーバーを起動させ ?action=streamでストリームを、?action=snapshot で静止画を出力する機能となっているようだ。


当然、usbを差し込んだ直後にカメラを動作させたくないときは、/etc/config 内の mjpg-streamer の 設定ファイルで option enabled "true"を"false"などに変更すれば起動しなくなる。

参考
WebCam in OpenWrt http://h-wrt.com/en/doc/webcam

0 件のコメント:

コメントを投稿