sohatach's blog

http://github.com/soha

GALAXY NEXUS向けにAndroid(4.1.2)をビルドする。

参考資料
・日経Linux 2012年9月号の特集3 Androidを自分好みに改造する
http://itpro.nikkeibp.co.jp/article/MAG/20120806/414422/?ST=oss
android open source project
http://source.android.com/source/initializing.html

ビルドに使うマシン
ThinkPad X201sにUbuntu12.04の64bit版をインストールしたマシン
主なスペックは以下の通りです。
CPU: Intel(R) Core(TM) i7 CPU L 640 @ 2.13GHz
memory: 8GB
HDD: 750G


ビルドに必要な各種ソフトウェアのインストール

・JDK6
最新版(jdk6u37)をOracleのサイトから取得し、インストールします。
http://www.oracle.com/technetwork/java/javase/downloads/jdk6u37-downloads-1859587.html
規約に同意する必要などがあるため、ブラウザでアクセスし、Linux用64bit版のjdk-6u37-linux-x64.binをダウンロードします。
ホームディレクトリに展開し、JAVA_HOME及びPATH環境変数に設定する。

cd ~
sh jdk-6u37-linux-x64.bin
vi ~/.profile
export JAVA_HOME=$HOME/jdk1.6.0_37
export PATH=$JAVA_HOME/bin:$PATH
. ~/.profile

Ubuntuのパッケージファイル

sudo aptitude install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline-gplv2-dev lib32z-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils python-software-properties xsltproc libx11-dev:i386 gcc-4.5 g++-4.5 gcc-4.5-multilib g++-4.5-multilib

パッケージが多いため、少し時間が掛かります。20分程度掛かりました。

.Android SDKLinux

http://dl.google.com/android/android-sdk_r20.0.3-linux.tgz
tar xvfz android-sdk_r20.0.3-linux.tgz
mv android-sdk-linux/ ~/

export JAVA_HOME=$HOME/jdk1.6.0_37
export ANDROID_SDK_HOME=$HOME/android-sdk-linux
export PATH=$JAVA_HOME/bin:$ANDROID_SDK_HOME/platform-tools:$PATH

APIバージョンのSDKのダウンロード

tools/android update sdk -u

これも結構時間が掛かります。1時間弱程度掛かりました。


Androidソースコード(の取得コマンド)

mkdir ~/bin
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
chmod a+x ~/bin/repo
mkdir android_source
cd android_source
repo init -u https://android.googlesource.com/platform/manifest

NameとEmailを聞かれるので適当に入れる。

repo init -u https://android.googlesource.com/platform/manifest -b android-4.1.2_r1

repo sync

これが数時間掛かる。

ビルドマシンのユーザのオープンできるファイル数を増やす。

vi /etc/security/limits.conf
hard nofile 10240
soft nofile 10240

念のためビルドマシンを再起動しておく。



・Nexusのドライバ
https://developers.google.com/android/nexus/drivers#magurojzo54k
broadcom-maguro-jzo54k-8b0d7637.tgz
imgtec-maguro-jzo54k-0911a9b5.tgz
invensense-maguro-jzo54k-ff2586d3.tgz
nxp-maguro-jzo54k-95659b1e.tgz
samsung-maguro-jzo54k-b8a098be.tgz
をダウンロードする。
各ファイルを展開するとそれぞれextract-XXXX-maguro.shというファイルになるので、
android_sourceにコピーし、実行する。
android_source下にvenderというディレクトリが作成され、そこに展開される。


・ビルド

cd ~/android_source
source build/envsetup.sh
lunch full_maguro-userdebug
make -j4

こちらも数時間掛かります。翌日確認するくらいのつもりでも良いかと思います。


・成果物
android_sourceの下のout/target/maguro/の下にboot.img,system.imgができるので、
fastbootでPCから接続し、端末に書き込む。
書き込む前にuserdata,cache領域をクリアする必要があるようです。

fastboot -w
fastboot flash boot boot.img
fastboot flash system system.img

このsystem.imgには、Google PlayなどのGoogle製アプリ(Gapps)が入っていないため、
xdaなどでバイナリを探してきて別途CWMからインストールします。


20121028追記
日経Linuxにも記載されていますが、カメラを正常に動作させるには、ducati-m3.binというバイナリを元の端末から吸い出し
/system/vender/firmwareにコピーしてやる必要があるようです。
また上記Googleのサイトからダウンロードできなかったバイナリとして、smc_pa_wvdrm.iftというファイルも
/system/vender/firmwareに入っていたため、合わせて端末からバックアップしていたファイルをコピーしました。
(smc_pa_wvdrm.iftの用途は不明)