Articles tagged with: Android

Androidソースビルド Panda Board カーネルビルド

こんにちは。アスカ・クリエイション 石原繁彦です。

前回のAndroidのソースビルドに引き続きPanda Board用にカーネルをビルドしてみます。

カーネルビルドができるようになればカーネルの設定を変更できるのでデバイスドライバを追加するなどが可能になります。

AOSPの以下のページに情報がありますので、これを参考に進めます。

 

http://source.android.com/source/building-kernels.html

まず以下を実行します。

$ git clone https://android.googlesource.com/device/ti/panda
$ cd panda
$ git log kernel

 

PandaboardはOmapですのでOmapのカーネルソースを取得します。

$ git clone https://android.googlesource.com/kernel/omap.git

 

コンパイルのためのツールチェインを取得し、パスを通します。

$ git clone https://android.googlesource.com/platform/prebuilt
$ export PATH=$(pwd)/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATH

 

クロスビルドのための環境変数を設定します。

$ export ARCH=arm
$ export SUBARCH=arm
$ export CROSS_COMPILE=arm-eabi-

 

カーネルソースをチェックアウトします。ブランチはandroid-omap-panda-3.0を使用します。

$ cd omap
$ git checkout remotes/origin/android-omap-panda-3.0

 

panda_defconfigでカーネル設定を行い、ビルドします。

$ make panda_defconfig
$ make -j4

 

正常に終了するとarch/arm/boot/zImageができます。これがカーネルになります。前回の記事で取得したAndroidソースのdevice/ti/panda/kernelにコピーします。

$ cp omap/arch/arm/boot/zImage ~/panda_work/device/ti/panda/kernel

 

これで、システムをビルドし、焼き込むことでビルドしたカーネルが使用できます。AndroidのSettings ->About tabletにてカーネルのバージョンやビルド日時で確認できます。

2013-02-21_20-39-08_548

続いて、カーネルの設定を変更してみます。Linuxカーネルの設定変更にmenuconfigを使いたいので、libncurses-devをインストールしておきます。

$ sudo apt-get install libncurses-dev

 

カーネルソースツリーで以下を実行します。

$ make menuconfig

Screenshot_from_2013-02-21 16:55:41

今回はUSB WEBカメラを使用可能にしてみます。

Device Driver —>Multimedia support —>Video For Linux

Device Driver —>Multimedia support —>Video capture adapters —>V4L USB devices —> USB Video Class

それぞれチェックします。モジュールではなくカーネルに組み込みたいので<M>ではなく<*>にします。

これで良いはずですが、drivers/media/video/omapgfxのビルドでエラーとなります。linux/videodev.hの不整合のようですが、とりあえずこのドライバをビルドから外します。

Device Driver —>Multimedia support —>Video capture adapters —>V4L USB devices —> OMAP V4L2-GFX driver

セーブしてmenuconfigを終了し、makeします。正常終了したらデバイスに書き込み、USB Webカメラを接続し/dev/video0ができていたら成功です。

カメラの確認には工学院大学金丸研究室様で同じようなことをされていましたので、アプリのソースを頂き、動作させてみました。

/dev/video0のパーミッションを666に変更してアプリを実行させてみたところ、うまく動作しました。(工学院大学金丸研究室様ありがとうございます)

2013-02-21_20-51-22_143

 

カーネル設定を変更できるとAndroidの可能性が広がりますね。

今回はここまでです。

Share

Androidソースビルド&Panda Boardで動かす

こんにちは。アスカ・クリエイション 石原繁彦です。

今回は前回行ったAndroidのソースビルドの続きでビルドしたイメージをPanda Boardで動かしてみたいと思います。

2013-02-21_20-38-29_587

 

Panda BoardはARM系アーキテクチャのTexas Instruments社OMAPを採用した開発ボードです。スペックはこちら

早速ですが、まず前準備として開発マシンがUSB接続されたPanda Boardを認識できるよう/etc/udev/rules.d/に51-android.rulesを作成し、以下の内容を書き込みます。OWNERはビルドに使用しているマシンのログインアカウントを指定すれば良いようです。


# adb protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d101", MODE="0600", OWNER="ishihara"
# fastboot protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d022", MODE="0600", OWNER="ishihara"
# usbboot protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d00f", MODE="0600", OWNER="ishihara"
# usbboot protocol on panda (PandaBoard ES)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d010", MODE="0600", OWNER="ishihara"

 

ビルド環境は前回構築したものを使用します。ソースツリーに関しては、今回はPanda Board向けのjb-mr1-dev-plus-aospブランチを使ってみようと思います。新たに作業ディレクトリを作成しソースを取得し直してビルドします。

$ mkdir panda_work

$cd panda_work

 

特定のブランチを指定してソースを取得するには -bオプションを使用します。

$ repo init -u https://android.googlesource.com/platform/manifest -b jb-mr1-dev-plus-aosp

 

-jオプションを付けると並列同期できるようです。

$ repo sync -j4

 

~/panda_work/device/ti/panda/READMEに後の手順が書かれていますので、これを参考に進めてみます。

プロプライエタリなドライバのバイナリファイルを取得する必要があるようです。下記リンクから最新のpanda用ドライバをダウンロードします。現時点では20120807が最新でした。

https://developers.google.com/android/nexus/drivers?hl=ja#panda

ソースのルートで以下を実行して取得します。

$ wget https://dl.google.com/dl/android/aosp/imgtec-panda-20120807-c4e99e89.tgz

 

このtgzファイルを展開するとスクリプトファイルが出てくるので実行します。

$ tar -zxvf imgtec-panda-20120807-c4e99e89.tgz
$./extract-imgtec-panda.sh

 

途中ライセンスの同意が求められるので同意します。これによってソースツリーのvendor以下にファイルが取得されます。

ここで、Panda Boardの電源アダプタ、mini-USBポートと開発マシンを接続し、USBキーボード、マウス、HDMI(DVI出力)、LANケーブル(必須ではない)を接続します。

まずfastbootをビルドします。


$ source build/envsetup.sh
$ lunch full_panda-userdebug
$ make fastboot

 

ビルドが正常に完了したらPanda BoardのSDカードが入っていない状態で以下を実行します。

$ device/ti/panda/usbboot device/ti/panda/bootloader.bin

 

コマンドが正常終了したら4GB以上のSDカードを挿入し以下を実行します。

$ fastboot oem format
$ fastboot flash xloader device/ti/panda/xloader.bin
$ fastboot flash bootloader device/ti/panda/bootloader.bin

 

ここまで正常に完了したら全体をビルドします。ビルドターゲットはfull_panda-userdebugを指定します。なおlunchコマンドをオプション無しで実行すると指定可能なターゲットの一覧が表示され選択できます。

$ source build/envsetup.sh
$ lunch full_panda-userdebug
$ make -j4

 

ビルドが正常に完了したら、Panda BoardのGPIO_121のボタンを押しながらPWRON_RESETを押すことでfastbootで起動し、ビルドしたファイルシステムを書き込みます。


$ fastboot erase cache
$ fastboot flash userdata
$ fastboot flashall

 

これでシステムが書き込まれたはずです。システム起動後、以下を実行して日時を合わせます。


adb shell date $(date +%s)

 

LANを接続している場合、以下を実行してLAN設定を行います。


adb shell dhcpcd eth0

 

2013-02-20_18-15-56_910

 

Unfortunately, System UI has Stoppedというダイアログが出てOKを押しても、数秒後に同じダイアログの表示を繰り返すという不具合がありましたが、壁紙を適当なLive wallpaperに変更することで、とりあえず現象は治まりました。

2013-02-20_20-09-52_4292013-02-20_20-10-31_786

 

 

ちなみにPanda Boardのシリアルポートがシリアルコンソールになっていますので、PCとシリアルケーブルで接続してターミナルエミュレータでコンソールにアクセスできます。ボーレートは115200です。

wifiも接続できました。bluetoothも周囲のデバイスを検知していたので使用できそうです。

今回はここまでです。次回はカーネルのビルドに挑戦しようと思います。

 

Share

Androidソースビルド手順

こんにちは。アスカ・クリエイションの石原繁彦です。

ネタとしては少々枯れていますが、今回はAndroidをソースからビルドする手順をおさらいを兼ねて紹介しようと思います。

基本的な情報はAndroid Open Source Projectのサイトにまとまっているので、この内容をベースに進めます。

http://source.android.com/

ビルド環境はUbuntuまたは、Mac OS Xがサポートされています。Windowsではビルド出来ません。今回はUbuntu 12.04の64bit版を使用します。

必要なツールをインストールしていきます。まず、重要なポイントとしてJDKをインストールする必要があります。Ubuntuの標準ではOpenJDKが採用されていますが、OpenJDKではビルドエラーになりますのでOracle JDKをインストールします。Ubuntu10.04の頃にはsun-java6-jdkがリポジトリからインストール出来ましたが、現在は削除されているようですので、Oracleのサイトからダウンロードしてインストールします。

http://www.oracle.com/technetwork/java/javase/downloads/index.html

Java SE Development Kit 6を上記サイトよりダウンロードします。

oracle_jdk1oracle_jdk2

Accept License Agreement にチェックし、jdk-6u39-linux-x64.binをダウンロードします。 これは実行ファイルですが、ダウンロードしたままの状態では実行権限が無いため、実行権限を付与します。

$ chmod a+x jdk-6u39-linux-x64.bin

/usr/lib/jvmにインストールします。ディレクトリが無ければ作成します。

$ sudo mkdir /usr/lib/jvm

先ほどのバイナリをコピーまたは移動します。

$ sudo cp jdk-6u39-linux-x64.bin /usr/lib/jvm

/usr/lib/jvmに入り、実行することでカレントディレクトリにファイルが展開されます。

$ cd /usr/lib/jvm
$ sudo ./jdk-6u39-linux-x64.bin

jdk-6u39-linux-x64.binはもう必要ないので削除しても構いません。


$ sudo rm jdk-6u39-linux-x64.bin

update-alternativeコマンドでデフォルトのjavaとして登録します。

$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.6.0_39/bin/javac 1
$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.6.0_39/bin/java 1
$ sudo update-alternatives --install /usr/bin/javaws javaws /usr/lib/jvm/jdk1.6.0_39/bin/javaws 1
$ sudo update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/jdk1.6.0_39/bin/jar 1
$ sudo update-alternatives --install /usr/bin/javadoc javadoc /usr/lib/jvm/jdk1.6.0_39/bin/javadoc 1
$ sudo update-alternatives --install /usr/bin/javap javap /usr/lib/jvm/jdk1.6.0_39/bin/javap 1
$ sudo update-alternatives --install /usr/bin/javah javah /usr/lib/jvm/jdk1.6.0_39/bin/javah 1
$ sudo update-alternatives --install /usr/bin/jdb jdb /usr/lib/jvm/jdk1.6.0_39/bin/jdb 1
 

既にOpenJDKなど別のJDKが入っている場合は優先順位を変更します。


$ sudo update-alternatives --config javac
$ sudo update-alternatives --config java
$ sudo update-alternatives --config javaws
$ sudo update-alternatives --config jar
$ sudo update-alternatives --config javadoc
$ sudo update-alternatives --config javap
$ sudo update-alternatives --config javah
$ sudo update-alternatives --config jdb

javaのバージョンを表示させインストールが正常に完了したか確認します。

$ java -version

JDKのインストールは以上です。

引き続き、必要なツール群をインストールします。JDK以外のツールはリポジトリからapt-getで一気にインストールしてしまいます。

$ sudo apt-get install git gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386

libGL.soのシンボリックリンクを作成します。

$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

続いて、ソースコードをダウンロードします。

Androidのソースコードをダウンロードするにはrepoを使います。まず、ホームディレクトリに~/binディレクトリを作成し、PATHを通します。

$ mkdir ~/bin

ubuntuではログイン時にホームディレクトリにbinディレクトリがあると自動的にPATHが通るようになっていますので、一旦ログアウトし再ログインします。

curlコマンドでrepoスクリプトをダウンロードし、実行権限を付与します。

$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

 

ソースコードのダウンロード先となる作業ディレクトリを作成します。ディレクトリ名は好きにつけてよさそうです。

$ mkdir work

$cd work

カレントディレクトリを作業ディレクトリに移動しリポジトリの初期化を行います。

$ repo init -u https://android.googlesource.com/platform/manifest

途中、名前とメールアドレスを尋ねられるので入力します。

以下のコマンドでソースコードを取得します。

$ repo sync

 

さて、いよいよビルドを行います。まず、以下を実行します。

$ . build/envsetup.sh

次にビルドターゲットを指定します。様々なターゲットを指定できるようですが、今回はfull-engでビルドしてみることにします。

$ lunch full-eng

ビルドを開始します。今回使ったビルドマシンはCore2Duo E7500なので2コアです。一般的に並列コンパイルはコアの数x2が目安とされてますので-j4オプションを付けてmakeします。

$ make -j4

ビルド完了後、以下のコマンドでエミュレータを起動します。

$ emulator

emu1 emu2

Settings→About phone→Build numberからビルド情報が確認できます。

今回はここまでです。次回はPandaboardでビルドしたイメージを動かすことに挑戦したいと思います。

 

Share