2008年10月24日金曜日

Armadillo-500上のAndroidでカメラプレビューする方法



Armadillo-500上のAndroidでUSBカメラの画像をアプリで表示させる方法をまとめましたので公開します。


Androidのソースコード公開前に作成したものの為、Androidから直接デバイスを使用しない方法を使っています。


今後、Androidから直接USBカメラを使用させる方法も探っていきます。


では、早速。







環境依存部分は便宜読み替えて下さい。


開発環境を整える


以前、このブログで紹介した方法でいけると思います。


※不明点があれば質問ください。


カーネルビルド


今回使用するカメラはUVCカメラなのでV4Lを有効化してビルドします。



atmark@atde:~/atmark-dist-20080617$ make menuconfig

  ~中略~

Device Drivers--->
Multimedia devices--->
<*> Video For Linux
< > Enable Video For Linux API 1 (DEPRECATED)
< > Enable Video For Linux API 1 compatible Layer
< > Video capture adapters --->

  ~中略~

atmark@atde:~/atmark-dist-20080617$ make


Video For Linuxだけにチェックをつけて他のチェックは外さないとコンパイルエラーが出ることがあるので注意してください。


UVCドライバビルド


Linux UVC driver and tools(http://linux-uvc.berlios.de/)にUVCドライバコードがあります。


コードはSubversionリポジトリにあるのでSubversionをインストールしてからダウンロードします。



atmark@atde:~$ sudo apt-get install subversion
Password:

  ~中略~

atmark@atde:~$ svn checkout svn://svn.berlios.de/linux-uvc/linux-uvc/trunk

  ~中略~

atmark@atde:~$ mv trunk uvcvideo
atmark@atde:~$ cd uvcvideo
atmark@atde:~/uvcvideo$ mv Makefile Makefile.org

  ~中略~


すんなりビルドできないかもしれないので以下のMakefileに入れ替えてビルドしてみて下さい。


/home/atmark/uvcvideo/Makefile



PWD := $(shell pwd)

ROOTDIR ?= ../atmark-dist-20080617

ROMFSDIR = $(ROOTDIR)/romfs

include $(ROOTDIR)/.config
include $(ROOTDIR)/config.arch

MAKEARCH = $(MAKE) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE)

LINUXDIR = $(CONFIG_LINUXDIR)
KERNELRELEASE = ${shell make -sC $(ROOTDIR)/$(LINUXDIR) kernelrelease}

obj-m := uvcvideo.o
uvcvideo-objs := uvc_driver.o uvc_queue.o uvc_v4l2.o uvc_video.o uvc_ctrl.o uvc_status.o uvc_isight.o

all: uvcvideo

uvcvideo:
@echo "Building USB Video Class driver..."
@sh svn-version.sh > version.h 2>/dev/null
@$(MAKEARCH) -C $(ROOTDIR)/$(LINUXDIR) M=$(PWD) modules

clean:
-rm -f *.o *.ko .*.cmd .*.flags *.mod.c Module.symvers version.h
modules.order
-rm -rf .tmp_versions


カーネルモジュールを作成します。



atmark@atde:~/uvcvideo$ make

  ~中略~

atmark@atde:~/uvcvideo$ ls -l

  ~中略~

-rw-r--r-- 1 atmark atmark 68024 XXXX-XX-XX XX:XX uvcvideo.ko


Sourcery G++ Lite 2007q3-51 for ARM GNU/Linuxをインストール(ARMクロスコンパイラ)


CodeSourceryからARMクロスコンパイラを取得します。


http://www.codesourcery.com/gnu_toolchains/arm/portal/release313


から IA32 GNU/Linux Tar を選択し、ダウンロード後に展開します。



atmark@atde:~$ tar xvfj arm-2007q3-51-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2


uvccaptureの展開


HP(http://www.quickcamteam.net/software/linux/v4l2-software/uvccapture)から


uvccaptureを取得してホームで展開して下さい。


展開したフォルダ名を webcamd にして下さい。


添付のwebcamd化ファイルを webcamd にコピーして下さい。


v4l2uvc.hで定義している構造体vdInに下記定義を追加して下さい。



 int init;


uClibc-0.9.29ビルド


この時はまだAndroidのC言語ライブラリ(bionic)が公開されてなかったので、uClibcで代用しました。


コンフィギュレーションは以下の通りです。


Linux kernel headerの場所ですが一度ビルドしたカーネルでないとヘッダが足りません。



atmark@atde:~$ wget http://www.uclibc.org/downloads/uClibc-0.9.29.tar.bz2

  ~中略~

atmark@atde:~$ tar xvfj uClibc-0.9.29.tar.bz2

  ~中略~

atmark@atde:~$ cd uClibc-0.9.29
atmark@atde:~/uClibc-0.9.29$ make menuconfig

  ~中略~

 Target Architecture
   => arm
  Target Architecture Features and Options
   => Target ABI
    => EABI
   
   => Target Processor Endianness
    => Little Endian
    
   => Linux kernel header Location
    => /home/atmark/linux-2.6.18-at8/include

  ~中略~

atmark@atde:~/uClibc-0.9.29$ export PATH=$PATH:/home/atmark/arm-2007q3/bin



コンパイルエラーが出る場合は Rules.mak を以下のように修正してみて下さい。


Rules.mak



>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
366:#CFLAGS := -include $(top_builddir)include/libc-symbols.h \
367:# $(XWARNINGS) $(CPU_CFLAGS) $(SSP_CFLAGS) \
368:# -fno-builtin -nostdinc -I$(top_builddir)include -I.
369:CFLAGS := -include $(top_builddir)include/libc-symbols.h \
370: $(XWARNINGS) $(CPU_CFLAGS) $(SSP_CFLAGS) \
371: -fno-builtin -I$(top_builddir)include -I.
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<


コンパイルします。



atmark@atde:~/uClibc-0.9.29$ make CROSS=arm-none-linux-gnueabi-

  ~中略~

atmark@atde:~/uClibc-0.9.29$ cp ./lib/crt1.o ../webcamd/crt1.o
atmark@atde:~/uClibc-0.9.29$ cp ./lib/crti.o ../webcamd/crti.o
atmark@atde:~/uClibc-0.9.29$ cp ./lib/crtn.o ../webcamd/crtn.o
atmark@atde:~/uClibc-0.9.29$ tar cfz uclibc.tar.gz lib
atmark@atde:~/uClibc-0.9.29$ su
Password:
root@atde:/home/atmark/uClibc-0.9.29# mkdir /usr/arm-linux-uclibc
root@atde:/home/atmark/uClibc-0.9.29# cp uclibc.tar.gz /usr/arm-linux-uclibc/uclibc.tar.gz
root@atde:/home/atmark/uClibc-0.9.29# cd /usr/arm-linux-uclibc
root@atde:/usr/arm-linux-uclibc# tar xvfz uclibc.tar.gz
root@atde:/usr/arm-linux-uclibc# exit


gcc 4.2.1のソースからソフトウェア浮動小数点コードの取得


gnuから gcc 4.2.1のソースコードを取得し展開して下さい。


下記フォルダにあるコードを webcamd フォルダへコピーして下さい。



 gcc-4.2.1/gcc/config/asm/lib1funcs.asm
 gcc-4.2.1/gcc/config/asm/ieee754-df.S
 gcc-4.2.1/gcc/config/asm/ieee754-sf.S


uvccaptureをwebcamdとしてビルド



atmark@atde:/usr$ cd ~/webcamd
atmark@atde:~/webcamd$ ./buildwebcamd


cameraアプリの展開


Tom Gibara氏のLive Camera Previews in AndroidのSocketCameraを使用したアプリ"camera.apk"をAndroid側で使用します。


SocketCameraに与えるパラメータは以下の通り。




  • アドレス:127.0.0.1

  • ポート:8080

  • 画像の横幅:320

  • 画像の縦幅:240


ビルドしたアプリを実機に展開


ビルドした物をSDカード、httpサーバーからDLする等で下記の様に実機上で展開して下さい。




  • uClibcライブラリ


ファイル:uclibc.tar.gz



root@android:/# mkdir /usr/arm-linux-uclibc
root@android:/# /bin/cp /sdcard/uclibc.tar.gz /usr/arm-linux-uclibc/uclibc.tar.gz
root@android:/# tar xvfz uclibc.tar.gz




  • uvcvideo.koモジュール


ファイル:uvcvideo.ko



root@android:/# mkdir /lib/modules
root@android:/# /bin/cp /sdcard/uvcvideo.ko /lib/modules/uvcvideo.ko




  • webcamdデーモン


ファイル:webcamd



root@android:/# mkdir /usr/webcamd
root@android:/# cp /sdcard/webcamd /usr/webcamd/webcamd




  • Android cameraアプリ


ファイル:camera.apk



root@android:/# /bin/cp /sdcard/camera.apk /data/app/camera.apk


セットアップ


uvcvideo.koをロードしてwebcamdを起動すれば準備完了です。



root@android:/# cd /lib/modules
root@android:/# insmod uvcvideo.ko
root@android:/# cd /usr/webcamd
root@android:/# ./webcamd&


cameraアプリ起動


Androidのランチャにcameraアプリがあるので起動させます。


f:id:bs-android:20081025131904j:image





140 180 Android , ポーティング

記載されている会社名、および商品名等は、各社の商標または登録商標です。

0 コメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...