Nexus S向けJellyBeansのカーネルビルド作業ログ
※注意※
当ブログはあくまで、筆者の作業ログです。参考にして頂くことは結構ですが、自己責任でお願いします。筆者は必要があってカーネルビルドをしましたが、ここに書いてあることだけをやっても、端末情報が書き換わるだけで何もメリットはありません。
- はじめに
基本的には、android open source projectに沿って進めます。当記事では「環境構築→非カーネル部分のコンパイル→カーネルコンパイル→OS全体のコンパイル」という流れで進めます。尚、Android ICS以降のバージョンのカーネルコンパイルには、x64の開発マシンが必要となります。Nexus Sのroot化は、多くのブログで紹介されているので、省略します。当記事の作業内容は、JCROM Projectを参考にしています。
- 使ったもの
- 作業ログ
◆ 開発マシン上での環境構築(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. パスの追加
下記のパスを.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が立ち上がる。
ここまでの作業で、Build numberがこのように書き換わります。
二行目に開発機のusernameが入りました!
◆ カーネルコンパイル
1.ソースコードの取得
$ git clone https://android.googlesource.com/device/crespo/samsung $ cd crespo $ git log kernel $ git clone https://android.googlesource.com/kernel/samsung.git $ git clone https://android.googlesource.com/platform/prebuilt $ cd samsung $ git checkout origin/android-samsung-3.0-jb
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(非カーネル部分?)のディレクトリに移動する
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が立ち上がる。
◆ 必要なアプリのインストール
$ 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アカウントを求められるので登録して終了。
ここまでやると、Kernel versionにも、開発機のusernameが入る。