Custom MTD partitions(Desire)

S-OFFしたら誰もが通る道というか、やると便利なパーティションサイズの再調整です。
一番簡単なのは、S-OFFを出してるAlphaRevが提供しているイメージを利用した変更ですね。ただ、AplhaRevが提供しているサイズにしか変更できないデメリットはあります。要望として多いのが、「アプリ容量を大きく!」と言うためなのか、基本的には/systemか/cacheを削って/dataを拡張させています。/systemはCyanogen系統のROMだと小さく出来るので構わないのですが、/cacheを削ることで結構なデメリットもあったりするので、一長一短ですね。デフォルトで/cacheは40MB(兄弟機のN1だと95MB)を振り当てられていて、確かにユーザーからすると無駄なんですが、割り当てられているにはそれなりの理由もあって、あまりに小さくするとでかいアプリのインストールやradioファイルの更新にこけるようです。

もう一つの方法は、Custom MTDを利用して起動時のLinuxにMTD(≒内蔵ROM)のパーティションを強制認識させましょうという方法。こっちは、半動的にユーザーが各パーティションの容量を指定できる反面、指定している場所がkernelコマンドラインと言う点がデメリットです。具体的にはbootイメージを作り直して、適切なコマンドラインを指定して再度bootイメージを焼かなくてはいけない。ちなみに、今回の方法ではパーティションを弄るのは/systemと/cacheと/dataのみなので、それよりも前にある”misc”、”recovery”、”boot”は壊れないはずです。(つまり、”system”パーティション以降が読めなくなったとしても、recoveryモードは起動できるはず…)

Custom MTDの原理は、MTDのパーティション設定をLinux純正MTDドライバがkernelコマンドラインから指定できる様になっているため、「ドライバに対してコマンドを送ってあげればいいじゃん!」って事です。多分、開発向けに便利になるようにそう言う仕組みをつけてるのでしょう…。今回はありがたく使わせて頂きます。

最も原始的な方法だと、bootイメージを作るときのコマンドラインに
mtdparts=msm_nand:256k@0x24c0000(misc),5120k@0x26c0000(recovery),2560k@0x2bc0000(boot),69120k@0x2e40000(system),69120k@0x71c0000(cache),76544k@0xb540000(userdata)
なんて言う、長ったらしくて間違えやすそうなコマンドラインを追加してbootイメージを作成し適応すると言う方法でした。

一歩進めて、「容量やアドレス計算をスクリプトでやれば良いんじゃね?ついでにbootイメージを作成して、焼くところまで…」と言う事で出来たのがCustomMTDです。Desire向けのスレッドは”[DEV][S-OFF] Custom MTD Partitions (resize data, system, and cache)“です。このzipでやっていることは、zipを焼くときに実行されるスクリプトで、「misc/recovery/bootの容量とアドレスを取得して、設定ファイルからsystem/cacheの容量を取得しアドレスも決定しておく。残りの容量を算出しdataに回す。それらの値を反映したkernelコマンドラインを作成する。その後、対象となるパーティションを吸い出して、展開しコマンドラインを適応して再パックする。そして、そのROMを対象パーティションに再度焼いて終了。」と言う事をやっています。

この「対象となるパーティション」がもとのスレッドで配布されているbravo-recovery*.zipとbrabo-boot*.zipの違いなんですね。実際、本体のスクリプトは一緒でスクリプト実行時に与えている引数が違うだけです。
そんな感じなので、リカバリーモードで絶対に/systemをマウントしない、触らないと言う保証が出来るならbravo-recoveryは焼かなくても大丈夫です。逆に、ROMを更新・変更してboot領域のカーネルを置き換えられてしまった場合にはbravo-boot*.zipの適応が初回起動の前に必要です。ROM managerからのお手軽ROM更新だと危険ですのでご注意下さい。

コメント