bc10 向けに修正を加えた android-2.3.2_r1 の作成について記述します。
作業の流れは以下のとおりです。
android-2.3.2_r1 のビルド環境作成 -> ソースコード取得 -> bc10用変更の追加 -> SGX SDK のインストール
センサーなど一部デバイスに調整中の箇所がありますため、予告無く更新することがあります。予めご了承ください。
今回の環境は以下のようになります。
Android 2.3(codename Gingerbread)以降をビルドするには 64bit 環境が必要です。
環境の構築は、Android Open Source Project の "Getting the Source" のページ の "Setting up your machine" の手順に従って行います。
以下のコマンドで ubuntu のリポジトリから sun java6 のパッケージを取得してインストールします。
$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner" $ sudo add-apt-repository "deb-src http://archive.canonical.com/ubuntu lucid partner" $ sudo apt-get update $ sudo apt-get install sun-java6-jdk $ sudo update-java-alternatives -s java-6-sun
以下のコマンドで ubuntu のリポジトリから必要なパッケージを取得してインストールします。
(実際は一行ですが、shell の改行バックスラッシュで途中で改行して表示しています。)
$ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev \ gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev
android のソースコードを取得するため repo の設定を行います。
$ cd ~ $ mkdir bin $ curl http://android.git.kernel.org/repo >~/bin/repo $ chmod a+x ~/bin/repo
ubuntu を使っている場合は一旦ログアウトしてログインし直せば ~/bin への PATH は通っています。
ログアウトせずそのまま作業したい場合は、以下のようにして ~/bin を環境変数の PATH に追加します。
$ export PATH=~/bin:$PATH
bc10 という作業用ディレクトリを作成し、android-2.3.2_r1 tag を取得するため repo init を実行します。
(このディレクトリ名は任意です。android-2.3.2_r1 などといった名前でもかまいません。変更した場合には以降の記述の PATH を自分の設定で読み替えてください。)
$ cd ~/ $ mkdir bc10 $ cd bc10 $ repo init -u git://android.git.kernel.org/platform/manifest.git -b android-2.3.2_r1
repo init の実行後、 repo sync を実行し android のソースコードを取得します。
$ repo sync
約5GB のファイルをダウンロードしますので回線速度に応じて時間がかかります。
android-2.3.2_r1 を bc10 向けにビルドするための追加ファイルを
github のリポジトリから git clone で取得します。
以下のコマンドで alsa_sound を android-2.3.2_r1 に追加します。
$ cd ~bc10/hardware/ $ git clone git://github.com/bc-dev/2.3-hardware-alsa_sound.git alsa_sound
以下のコマンドで alsa-lib, alsa-utils を android-2.3.2_r1 に追加します。
$ cd ~/bc10/external/ $ git clone git://github.com/bc-dev/2.3-external-alsa-lib.git alsa-lib $ git clone git://github.com/bc-dev/2.3-external-alsa-lib.git alsa-utils
以下のコマンドで android-2.3.2_r1 を bc10 向けにビルドするビルド設定ファイル類を android-2.3.2_r1 に追加します。
$ cd ~/bc10/device $ git clone git://github.com/bc-dev/2.3-device-beatcraft.git beatcraft
ファイルの追加でなく、android-2.3.2_r1 のソースコードに直接 bc10 向けの修正を加える patch を適用します。
まず以下のコマンドで patch ファイルを取得します。
$ cd ~/ $ git clone git://github.com/bc-dev/2.3-patches.git
USB wifi を接続し Android の UI から設定できるよう wpa_supplicant_6 に patch をあてます。
$ cd ~/bc10/external/wpa_supplicant_6 $ cp ~/2.3-patches/external-wpa_supplicant_6.diff . $ patch -p1 < external-wpa_supplicant_6.diff
bc10 は OMAP3530 を搭載しているためビルド設定ファイル内で TARGET_BOARD_PLATFORM=omap3 と設定しています。
この設定が有効になっていると android-2.3.2_r1/hadware/ti/omap3/ の下のコードもビルドされますが
ここにあるコードは Gingerbread 向けのメンテナンスも行われておらず
そのままでは OMAP3530 で使用できないので、ビルドされないようにします。
$ cd ~/bc10/hardware/ti/omap3 $ cd ~/2.3-patches/hardware-ti-omap3.diff . $ patch -p1 < hardware-ti-omap3.diff
以上でビルドするソースコードの準備が整いました。
android ビルドのため bc10の環境設定をします。
$ cd ~/bc10 $ source build/envsetup.sh including device/beatcraft/bc10/vendorsetup.sh including device/htc/passion/vendorsetup.sh including device/samsung/crespo/vendorsetup.sh $ lunch You're building on Linux Lunch menu... pick a combo: 1. generic-eng 2. simulator 3. full_bc10-eng 4. full_passion-userdebug 5. full_crespo-userdebug Which would you like? [generic-eng] [3] ← 3 を入力し enter ============================================ PLATFORM_VERSION_CODENAME=REL PLATFORM_VERSION=2.3.2 TARGET_PRODUCT=full_bc10 TARGET_BUILD_VARIANT=eng TARGET_SIMULATOR=false TARGET_BUILD_TYPE=release TARGET_BUILD_APPS= TARGET_ARCH=arm HOST_ARCH=x86 HOST_OS=linux HOST_BUILD_TYPE=release BUILD_ID=GRH78C ============================================
上記の設定確認後 make を実行します。
$ make
make を実行する際はビルドの環境(CPU のコア数)に応じて -j2 など並列実行を指定すると所要時間を減らすことができます。
make 中に出力される情報を増やしたい場合は showcommands を付加して実行すると
make 中に実行されているコマンドのログを詳細に出力します。
例:
$ time make showcommands -j2 2>&1 | tee make.log-20110201-01
上記のビルド完了後、同じ環境変数が設定されたままの状態で以下のコマンドを実行し、
GPS用とセンサー用の HAL ライブラリモジュールを追加ビルドします。
$ cd ~/bc10/device/beatcraft/bc10/libgps $ mm $ cd ~/bc10/device/beatcraft/bc10/libsensors $ mm
ビルド完了後のビルド済みファイルは out/target/product/bc10/ にあり、以下のような内容になっています。
$ cd ~/bc10/out/target/product/bc10 $ ls -al drwxr-xr-x 8 beat beat 4096 2011-02-01 20:29 . drwxr-xr-x 3 beat beat 4096 2011-02-01 19:47 .. -rw-r--r-- 1 beat beat 11 2011-02-01 19:47 android-info.txt drwxrwxrwx 8 root root 4096 2011-02-01 20:32 bc10-image -rw-r--r-- 1 beat beat 3727 2011-02-01 20:23 clean_steps.mk drwxr-xr-x 3 beat beat 4096 2011-02-01 19:53 data -rw-r--r-- 1 beat beat 22633 2011-02-01 20:02 installed-files.txt drwxr-xr-x 14 beat beat 4096 2011-02-01 20:02 obj -rw-r--r-- 1 beat beat 230 2011-02-01 20:23 previous_build_config.mk -rw-r--r-- 1 beat beat 142336 2011-02-01 19:57 ramdisk.img drwxr-xr-x 8 beat beat 4096 2011-02-01 19:57 root drwxr-xr-x 5 beat beat 4096 2011-02-01 19:57 symbols drwxr-xr-x 12 beat beat 4096 2011-02-01 19:58 system -rw------- 1 beat beat 104951616 2011-02-01 20:02 system.img -rw------- 1 beat beat 1482624 2011-02-01 19:53 userdata.img
以下のコマンドでビルドされた userland のバイナリを起動可能な配置に整えます。
$ mkdir bc10-image $ cp -afr root/* bc10-image/ $ cp -afr system/* $ sudo chown -R root.root bc10-image/ $ sudo chmod -R 777 bc10-image/
起動可能な配置の userland は以下のような内容になります。
$ cd bc10-image $ ls -al drwxrwxrwx 8 root root 4096 2011-02-01 20:32 . drwxr-xr-x 8 beat beat 4096 2011-02-01 20:29 .. drwxrwxrwx 2 root root 4096 2011-02-01 19:47 data -rwxrwxrwx 1 root root 118 2011-02-01 19:47 default.prop drwxrwxrwx 2 root root 4096 2011-02-01 19:47 dev -rwxrwxrwx 1 root root 904 2011-02-01 15:35 gps_init.sh -rwxrwxrwx 1 root root 90084 2011-02-01 19:57 init -rwxrwxrwx 1 root root 1677 2011-02-01 14:27 init.goldfish.rc -rwxrwxrwx 1 root root 917 2011-02-01 15:08 init.omap3.rc -rwxrwxrwx 1 root root 15018 2011-02-01 17:15 init.rc drwxrwxrwx 2 root root 4096 2011-02-01 19:47 proc drwxrwxrwx 2 root root 4096 2011-02-01 19:57 sbin drwxrwxrwx 2 root root 4096 2011-02-01 19:47 sys drwxrwxrwx 12 root root 4096 2011-02-01 20:30 system -rwxrwxrwx 1 root root 0 2011-02-01 14:27 ueventd.goldfish.rc -rwxrwxrwx 1 root root 231 2011-02-01 15:08 ueventd.omap3.rc -rwxrwxrwx 1 root root 3764 2011-02-01 14:27 ueventd.rc
bc10/froyoと同じ手順でTI Android SGX SDKを取得します。
(注):
$ cd ~ $ git clone git://gitorious.org/rowboat/ti_android_sgx_sdk.git $ cd ti_android_sgx_sdk/ $ ./OMAP35x_Android_Graphics_SDK_setuplinux_3_01_00_03.bin
インストールディレクトリ位置を聞かれるので今回はデフォルトインストールディレクトリ
の${HOME}/OMAP35x_Android_Graphics_SDK_3_01_00_03 を指定します。
${HOME}は、ホームディレクトリーの意味で、/home/beatを指します。
(以降、ホームディレクトリーは、/home/beatを指します。)
To download TI's Android SGX SDK
Rules.make のHOME、GRAPHICS_INSTALL_DIR、ANDROID_ROOT、CSTOOL_DIR、
KERNEL_INSTALL_DIRをそれぞれのファイルPATHに合うよう修正してください。
以下のRules.makeは上記ビルド時の設定にあわせています。
ANDROID_ROOTは作成したbc10-imageのディレクトリ位置
にあわせています。
$ cd ~/OMAP35x_Android_Graphics_SDK_3_01_00_03
--- Rules.make 2011-01-05 14:20:43.863788943 +0900 +++ Rules.make-orig 2011-01-05 14:17:04.661291128 +0900 @@ -4,24 +4,20 @@ PLATFORM=LinuxOMAP3 ################# FIELDS MODIFIABLE BY THE USER ############################### #set home area HOME (relative location for all SDK operations) -#HOME=INVALIDVAL -HOME=/home/beat/prebuilt-20101227 +HOME=INVALIDVAL #Current Directory where Graphics SDK is installed GRAPHICS_INSTALL_DIR=$(HOME)/OMAP35x_Android_Graphics_SDK_3_01_00_03 #Android Specific #Path of Android Root FS -#ANDROID_ROOT=$(HOME)/INVALIDVAL -ANDROID_ROOT=$(HOME)/bc10/out/target/product/bc10/bc10-image +ANDROID_ROOT=$(HOME)/INVALIDVAL #set toolchain root path for arm-eabi -#CSTOOL_DIR=INVALIDVAL -CSTOOL_DIR=$(HOME)/bc10/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3 +CSTOOL_DIR=INVALIDVAL CSTOOL_PREFIX=arm-eabi- CSTOOL_PATH=$(CSTOOL_DIR)/bin CSTOOL_LIBSTDC++_PATH=$(CSTOOL_DIR)/arm-none-linux-gnueabi/libc/usr/lib #set the kernel installation path -#KERNEL_INSTALL_DIR=$(HOME)/INVALIDVAL -KERNEL_INSTALL_DIR=$(HOME)/bc10-rowboat-kernel +KERNEL_INSTALL_DIR=$(HOME)/INVALIDVAL TARGETFS_INSTALL_DIR=$(ANDROID_ROOT) GFX_TARGETFS_KERMOD_PATH=$(TARGETFS_INSTALL_DIR)/lib/modules/2.6.32
RULEs.make変更完了後make、make installを実行します。
$ make $ make OMAPES=3.x install
これで bc10 向けの Android 2.3.2_r1 の起動イメージの作成は完了です。
このイメージは USB Wifi を Android の UI から設定できるよう、ビルド済みの Wifi 用 kernel module を
Android のビルド時に userland 内
bc10-image/system/lib/module/rt3070sta.ko
に配置しています。
またこの kernel module をビルドする際に使用した config でビルド済みの uImage も
~/bc10/device/beatcraft/bc10/uImage
に同梱しています。