Nexus S ビルド〜ロム焼き まで

Nexus S 目指せ文鎮化!ぐらいの勢いで、ソースビルドからロム焼き

前提条件

  • 環境PC
    • Ubuntu 10.10
  • 端末
    • Samsung製 Nexus S gingerbread 2.3.4 GRJ22
  • ベースバンドバージョン
    • I9023XXKD1
  • カーネルバージョン
    • 2.6.35.7-ge382d80
    • android-build@apa28 #1
  • ソース
    • android 2.3.4ソースをrepoより取得している。
    • ライブラリ等については、通常ビルドできる状態とする。

Ubuntu 10.10 に Nexus S を認識させる。

  • lsusbGoogle inc. を探す

  • sudo gedit /etc/udev/rules.d/51-android.rulesでデバイス情報を登録してやる

      # 以下を追加
      SUBSYSTEM=="usb", SYSFS{idVendor}=="18d1", MODE="0666"
    

リカバリイメージのダウンロード

ビルド用のソースを取得

ソース取得したいディレクトリへ移動

cd ソース取得したいディレクトリ

repo 初期化

repo init -u git://android.git.kernel.org/platform/manifest.git

取得対象のブランチ一覧を表示する( 参考

cd ./.repo/manifest
git branch -r

対象ブランチの決定

repo init -u git://android.git.kernel.org/platform/manifest.git -b android-2.3.4_r1

ソース取得

repo sync -j4

端末情報を取り込み( 参考

Nexus S を通常起動し、母艦にUSB接続する
接続確認

cd androidSDKホームディレクトリ/platform-tools

以下で端末情報が出力されるか確認

adb devices

※ブートローダモードでは以下らしいが、、、

fastboot devices

下で行うextract-files.shでは、adb pullを使用するため、adbコマンドへのPATH設定が必要となる

  • 必要に応じて、adb コマンドへの PATH を設定

データ抽出

cd androidソースディレクトリ/device/samsung/crespo/
./extract-files.sh
# →なにやら adb pull しまくる。

ビルド

cd androidソースディレクトリ
source build/envsetup.sh
lunch full_crespo-userdebug
time make -j4

ビルドイメージをflash

cd /env/nexusSgb234/out/host/linux-x86/bin
./fastboot flash system /env/nexusSgb234/out/target/product/crespo/system.img
./fastboot flash boot /env/nexusSgb234/out/target/product/crespo/boot.img
./fastboot flash userdata /env/nexusSgb234/out/target/product/crespo/userdata.img
# リカバリは怖いので、実行せず
# ./fastboot flash recovery /env/nexusSgb234/out/target/product/crespo/recovery.img

oem unlock 化 & su と Superuser.apk

deviceをfastbootモードで立ち上げる。
母艦に接続
端末接続を確認

./fastboot devices

fastbootモードで起動させる。

./adb reboot bootloader

ブートローダのアンロック

./fastboot oem unlock
# →ユーザデータ(Nexsus Sの場合はSDが内部ストレージなので全データ)が消えるが、
# 画面をVol up/down で選択し、unlock化する

とりあえず再起動し母艦へ接続
完全に初期化されている。adb shell 認識できていない
→「設定」ー「アプリケーション」ー「開発」ー「USBデバッグ」をONする

./adb shell にて /sdcard 配下の固有データが削除されている事を確認
もう一度fastbootモードで起動させる。

./adb reboot bootloader

fastbootモードにて、母艦にあるリカバリイメージからbootさせる

./fastboot boot ~/work/20110730.nexusSroot/recovery-clockwork-3.0.2.4-crespo.img
# →ClockworkMod Recovery でブートされる

とりあえずバックアップ

Volume UP/DOWN にて、「backup and restore」を選択、電源ボタンで決定する
続いて「backup」を選択し、バックアップが開始される

boot image...
recovery image...
system ...
data...
.android_secure...
cashe...
No sd-ext found. Skipping backup of sd-ext.
Generating md sum...

Backup complete!

su と SuperUser.apk を配備
「mounts and srotage」を選択
「mount /system」を選択
su を push

./adb push ~/work/20110730.nexusSroot/20.tools/su-2.3.6.1-ef-signed/system/bin/su /system/bin/

SuperUser.apk を push

./adb push ~/work/20110730.nexusSroot/20.tools/su-2.3.6.1-ef-signed/system/app/Superuser.apk /system/app/

su の実行権を変更(参考: 1ビット目の意味について

./adb shell
cd /system/bin
chmod 6775 su
  • 1ビット目の意味について

6=4+2という意味で、
4000→実行ビット上にユーザIDを設定
2000→実行ビット上にグループIDを設定
つまり、実行した際の実行スレッドは、誰が実行しても、所有者ID、所有者グループID権限で実行される。
超危険と思われる設定であるが、Superuser.apkにより、スーパユーザ権限を必要とした処理に対しポップアップが上がり
許可するかどうかの判断をユーザに委ねるため、任意のプログラムが勝手に動いてしまう、という状態にはならない模様。
Lock→Unlock時にユーザ情報が全て消えるのは、端末を不正に入手し、端末の情報を抜いてやろうと考えた際の対応かー。
Lock状態で運用すれば、端末の情報をバックアップしようとした際にデータが消えてしまう。
Unlock状態で運用すれば、端末の盗難にあった際に色々情報が抜かれてしまう可能性がある、といった所かー。

「reboor system now」を選択
バックアップしたイメージはSDカードへ保存されるので、SDカードデータを丸々を母艦にバックアップ
SDカードの保存先は /sdcard/clockworkmod/backup/ 日付 となる

  • 端末をUSB接続する

  • ファイルコピー

      cp -vprf /media/35EE-1E0E ~/work/20110730.nexusSroot/10.backupdata/20110731.01.originalImageCustomizeOver/
    

参考コマンド

ファストブートモード

./adb reboot bootloader

recovery clockwork より起動させる

./fastboot boot recovery-clockwork-3.0.2.4-crespo.img

kernel log

./adb shell cat /proc/kmsg

logcat

./adb logcat -v time

参考

Nexus S を素のまま root 化する方法 〜 アンロック不要、リカバリROM書換も初期化も不要 (GRH78 まで)