こんにちは、今回はAndroid 4.2.2のビルドにチャレンジしようと思います。
TI-Android-JB-4.2.2-DevKit-4.1.1 DeveloperGuide を参考にしながら進めていきます。
サイトの手順に沿って進めていきます。
Android OSのビルドにはLinux環境が必要なため今回はVirtualBox にUbuntu 14.04 LST をゲストOSとして用意しました。
まずはビルドに必要なパッケージをインストールしていきます。
参考サイトにはUbuntu 10.04とUbuntu 12.04用のコマンドしか載っていませんが、
とりあえず、Ubuntu 12.04用のコマンドで代用します。
コマンドをそのまま打つとuboot-mkimageが見つからないのでuboot-mkimageをu-boot-toolsに置換して実行しました。
$ sudo apt-get install git-core 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 openjdk-6-jdk tofrodos \ python-markdown libxml2-utils xsltproc zlib1g-dev:i386 \ minicom tftpd u-boot-tools expect libgl1-mesa-dri $ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
AndroidのビルドにはJDK 6が必要なのでJDK 6もインストールします。
JDK 6のパッケージは Java SE 6 Downloads から
jdk-6uXX-linux-x64.bin をダウンロードしてインストールします。
JDK 6のダウンロードにはOracleプロファイルの登録必要なため、さくっと登録してしいます。
ダウンロードが完了しましたら参考サイトのコマンドを打ち込んでインストールします。
$ chmod a+x jdk-6u45-linux-x64.bin $ ./jdk-6u45-linux-x64.bin $ sudo mkdir -p /usr/lib/jvm $ sudo mv jdk1.6.0_45 /usr/lib/jvm/ $ sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.6.0_45/bin/java" 1 $ sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.6.0_45/bin/javac" 1 $ sudo update-alternatives --config java $ sudo update-alternatives --config javac
続けてAndroid 4.2.2のソースファイルを入手します。
ソースファイルの入手にはGitが必要なためGit環境を整備します。
$ mkdir ~/bin $ export PATH=~/bin:$PATH $ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo $ chmod a+x ~/bin/repo
Android 4.2.2のソースファイルのリポジトリは現在リンク切れのため、参考サイトのGitコマンドを打ち込んでもダウンロードできませんでした。
なので、代わりにTI_Android_JB_4.2.2_DevKit_4.1.1.binをダウンロードしてきます。
TI_Android_JB_4.2.2_DevKit_4.1.1.bin を展開すると以下のファイルが展開されます。
* Android File system : $HOME/TI_Android_JB_4.2.2_DevKit_4.1.1/
* Android Linux Kernel: $HOME/TI_Android_JB_4.2.2_DevKit_4.1.1/kernel
* Bootloader : $HOME/TI_Android_JB_4.2.2_DevKit_4.1.1/u-boot
* Toolchain location will be at $HOME/TI_Android_JB_4.2.2_DevKit_4.1.1/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin
最後にprebuilts/gcc/linux-x86/arm/arm-eabi-4.6/binのPATHを通します。
$ export PATH=$HOME/TI_Android_JB_4.2.2_DevKit_4.1.1/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin:$PATH
ようやくビルド環境が整いました。
ビルド環境が整いましたので各パッケージをビルドしていきます。
まずはBootloaderから
$ cd TI_Android_JB_4.2.2_DevKit_4.1.1/u-boot $ make CROSS_COMPILE=arm-eabi- distclean $ make CROSS_COMPILE=arm-eabi- am335x_evm_config $ make CROSS_COMPILE=arm-eabi-
ビルドが完了するとu-boot/以下にMLO とu-boot.img が作成されます。
次にAndroid Linux Kernel
$ cd TI_Android_JB_4.2.2_DevKit_4.1.1/kernel $ make ARCH=arm CROSS_COMPILE=arm-eabi- distclean $ make ARCH=arm CROSS_COMPILE=arm-eabi- am335x_evm_android_defconfig $ make ARCH=arm CROSS_COMPILE=arm-eabi- uImage
ビルドが完了するとkernel以下にuImage/が作成されます。
次はAndroid Filesystemをビルドしていきますが、Android FilesystemのビルドにはSGX有りと無しがあります。
今回はSGX有りでビルドします。さらにBeagleBone Blackへのインストールを想定してビルドします。
VirtualBoxにプロセッサーを2割り当てていたのでビルドのジョブ数は4を指定しました。
#ジョブ数の理想はプロセッサー*2が理想らしいです。
$ cd TI_Android_JB_4.2.2_DevKit_4.1.1/ $ make TARGET_PRODUCT=beagleboneblack OMAPES=4.x -j4
しばらくすると、ビルドエラーが発生してしまいました。
内容は Switch.pm が無いと、怒られていました。
解消するために libswitch-perl をインストールします。
sudo apt-get install libswitch-perl
再度、ビルド。
待つこと数時間。。。
またしても、ビルドエラー発生。
/home/tmuka1wm/work/BeagleBone/TI_Android_JB_4.2.2_DevKit_4.1.1/external/clang/lib/StaticAnalyzer/Core/SymbolManager.cpp:436: undefined reference to `clang::ento::MemRegion::getBaseRegion() const' collect2: ld returned 1 exit status make: *** [out/host/linux-x86/obj/EXECUTABLES/clang_intermediates/clang] エラー 1 make: *** 未完了のジョブを待っています.... 注:一部の入力ファイルは推奨されない API を使用またはオーバーライドしています。 注:詳細については、-Xlint:deprecation オプションを指定して再コンパイルしてください。 注:一部の入力ファイルは推奨されない API を使用またはオーバーライドしています。 注:詳細については、-Xlint:deprecation オプションを指定して再コンパイルしてください。
一旦ここで、区切りたいと思います。
今回はビルド完了までたどり着けませんでしたが、
次回はビルドエラーの解消から進めます。
[…] こんにちは、前回はAndroidのOSをビルドしてみようでAndroid 4.2.2のビルドを失敗してしまいましたので、今回は失敗した原因の調査とビルドしたバイナリで起動確認を行おうと思います。 […]