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 を認識させる。
lsusb
でGoogle 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 まで)
→リカバリイメージはフラッシュせずとも書き込みできうる模様
- →Android 2.3.3 (ビルド番号 GRI40)では不可能?
Android電話 Nexus OneとNexus Sのまとめ
- →対象はAndorid 2.3.1 GRH78
- →Nexus S のストレージ構成は 1G がシステム、残りがユーザ領域兼USBストレージ
- →oem unlockを行うと、ユーザデータが消えてしまう。