2011年6月25日土曜日

[TEST] NTT docomo SC-02C Galaxy S2 initramfs作成とzImageビルド

オリジナルのkernelを抜くには、どうしてもrootが必要なわけで、rootをとるにはオリジナルでないkernelを焼くしかない現状では、オリジナルkernel入手は難しいですね。可能性としては、だれかがGingerBreakみたいなexploit codeを実行できるようなセキュリティホールを見つけるぐらいしか無いってことでしょうかねぇ。

なにかいいアイデアはないものか。。とりあえず、オリジナルkernelビルドの続きをやることにします。

前回は、initramfs抜きのzImageを作成しましたが、今回はかなり強引にinitramfsを準備してみます。参考になるのは下記のURL。supercurioさんのUPしてるinitramfsです。
https://github.com/GalaxySII/initramfs-galaxysii
GT-I9100用のいくつかのバージョンのものと、KOREA版のやつが上がってます。これらを参考に、SC-02Cからadb pullでファイルを抜き出します。はじめに上記のinitramfsたちを落としておきます。
 git clone https://github.com/GalaxySII/initramfs-galaxysii.git
 ..
 .
取り出すファイルなどは下記の感じw
 data/
 dev/
 lib/
 proc/
 res/
 sbin/
 sys/
 system/
 vendor/
 default.prop
 fota.rc
 init
 init.goldfish.rc
 init.rc
 init.smdkc210.rc
 lpm.rc
 recovery.rc
 ueventd.goldfish.rc
 ueventd.rc
 ueventd.smdkc210.rc
ちゃんとサブディレクトリもチェックして、必要なものを全部取り出します。自分がやった限りではpermissionに阻まれることはありませんでした。これらのファイルをinitramfs_sc02c_KF2というディレクトリにコピーします。一部symlinkあるのでそれのリンクの再現も忘れずに行います。その後permissionを同様にあわせます。
       lib
       res
       sbin
       vendor
はサブディレクトリもちゃんと再現しましょう。ほかのディレクトリは空でOK。抜け漏れがないか、gitで落としたinitramfsたちを参考にチェックしておきましょう。大丈夫そうなら、ここでdefault.propをいじってsecure=0(insecure)にしておきます。パラメータいじりたければこのあたりでやっておきます。
vi default.prop
---
#
# ADDITIONAL_DEFAULT_PROPERTIES
#
ro.secure=0
ro.allow.mock.location=0
ro.debuggable=0
persist.service.adb.enable=0
---

さて、これでinsecureなinitramfsが用意できましたw。次にこれを取り込んだkernelの構築です。展開するところから行きましょう。
tar xvfz GT-I9100_Kernel_Gingerbread.tar.gz
cd kernel
この後Makefileのpermissionをいじって、CROSS_COMPILEに指定されるコンパイラへのpath-prefixを指定します。

CROSS_COMPILE   ?= /somewhere/android_dev/arm-2009q3/bin/arm-none-eabi-
次に、defconfigをいじって、先ほど作成したinitramfsの位置をおしえます。男らしくdefconfigをviで編集します。
cd arch/arm/configs
vi c1_rev02_jpn_ntt_defconfig

---
CONFIG_INITRAMFS_SOURCE="/somewhere/android_dev/galaxys2/initramfs/initramfs_sc02c_KF2"
---

cd ../../../
ここまできたらあとはビルドするだけです。前回と同様に。
make c1_rev02_jpn_ntt_defconfig
make menuconfig ( if needed )
make -j2
で、しばらく待って出来上がりです。次回はできあがったzImageを検証してみたいと思います。ポイントは独自kernelと既存モジュールとの整合性(initramfsにはじめから配置されてますから)をversion magicから推測。zImageからinitramfsを抽出できるか?といったところでしょうか。

#そうこうしてるまにXDAあたりで「抜けたぜ!」って報告あるかなー。

この方法はversion magicがちゃんとしないぽいので、試しても焼かないほうがいいかな?

0 コメント:

コメントを投稿