Nexus S向けJellyBeansのカーネルビルド作業ログ

 ※注意※

当ブログはあくまで、筆者の作業ログです。参考にして頂くことは結構ですが、自己責任でお願いします。筆者は必要があってカーネルビルドをしましたが、ここに書いてあることだけをやっても、端末情報が書き換わるだけで何もメリットはありません。

 

  • はじめに
基本的には、android open source projectに沿って進めます。当記事では「環境構築→非カーネル部分のコンパイル→カーネルコンパイル→OS全体のコンパイル」という流れで進めます。尚、Android ICS以降のバージョンのカーネルコンパイルには、x64の開発マシンが必要となります。Nexus Sのroot化は、多くのブログで紹介されているので、省略します。当記事の作業内容は、JCROM Projectを参考にしています。
 
  • 使ったもの
Android端末:Nexus S (GT-I9023) ※root化済み
開発マシン:Ubuntu 11.10 (x64)
 
  • 作業ログ

◆ 開発マシン上での環境構築(http://source.android.com/source/initializing.html)

1. 各種コンパイラのインストール

$ sudo apt-get 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
$ sudo apt-get install libx11-dev:i386 gcc-4.5 g++-4.5 gcc-4.5-multilib g++-4.5-multilib

2. JDKのインストール

Oracleのサイトからjdk-6u31-linux-x64.binをダウンロード

Android open source codeに載ってるapt-get install sun-java6-jdkでは、もう手に入らないので注意。

$ chmod a+x jdk-6u31-linux-x64.bin
$ ./jdk-6u31-linux-x64.bin
3. パスの追加
$ vim ~/.bashrc (もしくは ~/.bash_profile) 
下記のパスを.bashrcに書き込む
 export CC=gcc-4.5
 export CXX=g++-4.5
 export JAVA_HOME=~/jdk1.6.0_31
 export PATH=$PATH:$JAVA_HOME/bin
 export ANDROID_JAVA_HOME=$JAVA_HOME
$ source ~/.bashrc (もしくは ~/.bash_profile) 
 
$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
$ mkdir Android_JB
$ cd Android_JB
$ repo init -u https://android.googlesource.com/platform/manifest
$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
$ repo sync
 ※ICS以降は非公開バイナリがあるため、それらのバイナリをダウンロードする。
$ cd ~/Android_JB
$ wget https://dl.google.com/dl/android/aosp/akm-crespo-jro03h-8f06b52d.tgz
$ wget https://dl.google.com/dl/android/aosp/broadcom-crespo-jro03h-dbc5d882.tgz
$ wget https://dl.google.com/dl/android/aosp/imgtec-crespo-jro03h-950ee659.tgz
$ wget https://dl.google.com/dl/android/aosp/nxp-crespo-jro03h-a0172f5b.tgz
$ wget https://dl.google.com/dl/android/aosp/samsung-crespo-jro03h-b82372e0.tgz
$ wget https://dl.google.com/dl/android/aosp/widevine-crespo-jro03h-f7d32044.tgz
$ tar zxvf akm-crespo-jro03h-8f06b52d.tgz
$ tar zxvf broadcom-crespo-jro03h-dbc5d882.tgz
$ tar zxvf imgtec-crespo-jro03h-950ee659.tgz
$ tar zxvf nxp-crespo-jro03h-a0172f5b.tgz
$ tar zxvf samsung-crespo-jro03h-b82372e0.tgz
$ tar zxvf widevine-crespo-jro03h-f7d32044.tgz
$ ./extract-akm-crespo.sh
$ ./extract-broadcom-crespo.sh
$ ./extract-imgtec-crespo.sh
$ ./extract-nxp-crespo.sh
$ ./extract-samsung-crespo.sh
$ ./extract-widevine-crespo.sh
 
$ source build/envsetup.sh
$ . build/envsetup.sh
$ lunch full_crespo-userdebug
$ make -j16
 
◆ パッケージ化
$ make otapackage
$ ls -l $ANDROID_ROOT/out/target/product/crespo/full_crespo-ota-eng.hiromi.zip
$ adb push full_crespo-ota-eng.hiromi.zip /sdcard/
 
 ◆ Nexus S(実機)への導入
少なくともGingerBreadをビルドした時に導入したrecovery-clockworkmod-3.0.0.2では、インストールできなかったので、recovery-clockworkmod-6.0.0.6を導入した。fastbootモード(ボリュームアップと電源ボタンを同時に長押し)にして、以下のように進めた。
$ fastboot boot recovery-clockwork-6.0.0.6-crespo.img
データの消去(意外と必須)
"wipe data/factory reset"を選択
"Yes - delete all user data"を選択

zipファイルの展開

"install zip from sdcard"を選択
"choose zip from sdcard"を選択
"full_crespo-ota-eng.<ビルドした端末のusername>.zip"を選択
"Yes - Install full_crespo-ota-eng.<ビルドした端末のusername>.zip"を選択
インストール完了後、"Reboot system now"を選択するとJellyBeansが立ち上がる。

 f:id:w_hiromi_w:20121005000427j:plain

ここまでの作業で、Build numberがこのように書き換わります。

二行目に開発機のusernameが入りました!

 

◆ カーネルコンパイル
2.パスの設定
$ export PATH=<JB_KERNEL_ROOT>/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATH
※既にあるprebuildを再利用した場合はそのPATHを記述する
$ export ARCH=arm
$ export SUBARCH=arm
$ export CROSS_COMPILE=arm-eabi-
3.カーネルコンパイル
$ make herring_defconfig
$ make -j16
$ ls -l arch/arm/boot/zImage //確認
 
◆ Android OS全体をコンパイル
1.カーネルのzImageをAndroid_JB(非カーネル部分?)のディレクトリに移動する
$ mv ~/crespo/samsung/arch/arm/boot/zImage ~/Android_JB/device/samsung/crespo/kernel
3.Android OS全体をコンパイル
$ source build/envsetup.sh
$ . build/envsetup.sh
$ lunch full_crespo-userdebug
$ make -j16
4.パッケージ化
$ make otapackage
$ ls -l $ANDROID_ROOT/out/target/product/crespo/full_crespo-ota-eng.hiromi.zip
$ adb push full_crespo-ota-eng.hiromi.zip /sdcard/
5.さっきと全く同じだけど、Nexus Sへの導入
$ fastboot boot recovery-clockwork-6.0.0.6-crespo.img
データの消去(意外と必須)
"wipe data/factory reset"を選択
"Yes - delete all user data"を選択

zipファイルの展開

"install zip from sdcard"を選択
"choose zip from sdcard"を選択
"full_crespo-ota-eng.<ビルドした端末のusername>.zip"を選択
"Yes - Install full_crespo-ota-eng.<ビルドした端末のusername>.zip"を選択
インストール完了後、"Reboot system now"を選択するとJellyBeansが立ち上がる。
 
 ◆ 必要なアプリのインストール
Google Playなどの必要なアプリが揃っていないと後々困るので、Google App Add-on(gapps-jb-20120726-signed.zip)インストール
$ fastboot boot recovery-clockwork-6.0.0.6-crespo.img

zipファイルの展開

"install zip from sdcard"を選択
"choose zip from sdcard"を選択
"recovery-clockwork-6.0.0.6-crespo.img"を選択
"Yes - Install recovery-clockwork-6.0.0.6-crespo.img"を選択

Add-onを導入してからブートすると、Googleアカウントを求められるので登録して終了。

f:id:w_hiromi_w:20121005002358p:plain

ここまでやると、Kernel versionにも、開発機のusernameが入る。