2011年発売のxperiaシリーズ、Ericsson傘下の端末なだけあってどれもこれもデザインが素晴らしいです。
動作速度もそれなり、ICSも載る。
ただ一つ、足りないのがDATA領域です。
そこで、cacheに割り当てられているパーティションの大部分をdata領域に割り当て直して、無理矢理data領域を増やすハックをしてみました。
ハックのために紐解く
パーティション分割はmtdpartsを使っている模様。
なのでカーネルのドキュメント(Documentation/kernel-parameters.txt)を見てみる。
1 2 | mtdparts= [MTD] See drivers/mtd/cmdlinepart.c. |
ふむ、当該のファイルを見てみる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | /* * Read flash partition table from command line * * Copyright 2002 SYSGO Real-Time Solutions GmbH * * The format for the command line is as follows: * * mtdparts=<mtddef>[;<mtddef] * <mtddef> := <mtd-id>:<partdef>[,<partdef>] * where <mtd-id> is the name from the "cat /proc/mtd" command * <partdef> := <size>[@offset][<name>][ro][lk] * <mtd-id> := unique name used in mapping driver/device (mtd->name) * <size> := standard linux memsize OR "-" to denote all remaining space * <name> := '(' NAME ')' * * Examples: * * 1 NOR Flash, with 1 single writable partition: * edb7312-nor:- * * 1 NOR Flash with 2 partitions, 1 NAND with one * edb7312-nor:256k(ARMboot)ro,-(root);edb7312-nand:-(home) */ |
なるほど??わかったようなわからんような…
とりあえず cat /proc/mtd でパーティション情報を見てみてみろと。
ほう。パーティションは4つらしい。sizeは16進数表記だ(苦手
1 2 3 4 5 6 7 | # cat /proc/mtd dev: size erasesize name mtd0: 19000000 00040000 "system" mtd1: 00600000 00040000 "appslog" mtd2: 06580000 00040000 "cache" mtd3: 1a400000 00040000 "userdata" |
ちなみに、 cat /proc/partitions で見るとKB表記。
1 2 3 4 5 6 7 8 9 10 11 | # cat /proc/partitions major minor #blocks name 31 0 409600 mtdblock0 31 1 6144 mtdblock1 31 2 103936 mtdblock2 31 3 430080 mtdblock3 253 0 40960 zram0 179 0 7842816 mmcblk0 179 1 7838720 mmcblk0p1 |
このままではよくわからないので、dmesg で起動時のパーティション情報を探す。発見。
1 2 3 4 5 6 7 8 9 10 11 | # dmesg . . . <5>[ 5.415008] 0x000006080000-0x00001f080000 : "system" <5>[ 5.524414] 0x00001f080000-0x00001f680000 : "appslog" <5>[ 5.526275] 0x00001f680000-0x000025c00000 : "cache" <5>[ 5.553070] 0x000025c00000-0x000040000000 : "userdata" . . . |
ふむふむ、 nandの 0x000006080000-0x00001f080000 分のブロックが system パーティションで、あとはそれに続いて3つ。
ハックしてみる。
デフォルトだと
- system…400MB
- appslog(Vendor)…6MB
- cache…101MB
- data…420MB
というわけだ。
ICSになってsystem領域がごつくなったのでsystemは削れん。となるとcacheからdataに回そう。
cache領域はファイルダウンロードの一時領域やOTAアップデートに使われるが、アップデートは来てもどうせftfで焼くし、cacheから80MBとってdataに回す作戦にする。cacheを少なくしすぎても問題だし。
そうするとちょうどdataが500MBになっていい感じ。
mtdのパーティション分けは16進数だから…えーっと…と計算してこうなった(計算式はもはや忘れた
1 2 3 4 5 6 7 8 9 10 11 | before 0x000006080000-0x00001f080000 : "system" 0x00001f080000-0x00001f680000 : "appslog" 0x00001f680000-0x000025c00000 : "cache" 0x000025c00000-0x000040000000 : "userdata" ↓ after 0x000006080000-0x00001f080000 : "system" 0x00001f080000-0x00001f680000 : "appslog" 0x00001f680000-0x000020b80000 : "cache" 0x000020b80000-0x000040000000 : "userdata" |
…よし、たぶんこれで合ってる 完璧。
ハックはコマンドラインに書き込めば良い
値が出せたところで、作ってみよう。
カーネルイメージを mkboot で作るときの cmdline に足せばいいだけかもしれないけど、一応カーネルコンフィグにも書いてコンパイルし直す。
1 2 3 4 5 | CONFIG_CMDLINE="console=ttyMSM2,115200n8 androidboot.hardware=semc" ↓ CONFIG_CMDLINE="console=ttyMSM2,115200n8 androidboot.hardware=semc mtdparts=msm_nand:409600k@0x000006080000(system),6144k@0x00001f080000(appslog),21504k@0x00001f680000(cache),512512k@0x000020b80000(userdata)" |
1 2 3 4 5 | mkbootimg --cmdline 'console=ttyMSM2,115200n8 androidboot.hardware=semc ' --kernel ./zImage --ramdisk ramdisk.img --base 0x00200000 -o boot.img ↓ mkbootimg --cmdline 'console=ttyMSM2,115200n8 androidboot.hardware=semc mtdparts=msm_nand:409600k@0x000006080000(system),6144k@0x00001f080000(appslog),21504k@0x00001f680000(cache),512512k@0x000020b80000(userdata)' --kernel zImage --ramdisk ramdisk.img --base 0x00200000 -o boot.img |
これで( `д´)b オッケー!
当然ながらパーティションを切り直してる形になるので 、各パーティションのフォーマットが必要になる。
CWMでバックアップ→ハック対応カーネルを焼く→CWMから各パーティションをフォーマット→リストア
で元の環境に戻れる。
出来上がりはこちら。
これでlink2sdの負担も多少軽減できるのかな?(私は使ってませんが。
次回リリース分のカーネルよりハック対応の予定です。