[G1 Android Development] Firerat:
Custom MTD Partitions

This is an implimentaion of lbcoder's Custom partition layouts

be sure to checkout that thread for the full history

What does it do?

Well, basically Custom MTD Partitions resizes your MTD partitions

for instance this is a CM6.1RC1, ( heavily customised )

Filesystem Size Used Available Use% Mounted on
/dev/block/mtdblock3 73.0M 72.8M 236.0K 100% /system
/dev/block/mtdblock5 134.8M 107.2M 27.6M 80% /data
/dev/block/loop0 896.0K 896.0K 0 100% /system/lib/modules
/dev/block/loop1 4.0M 4.0M 0 100% /system/xbin
/dev/block/mmcblk0p2 457.4M 201.8M 231.1M 47% /sd-ext
/dev/block/mmcblk0p2 457.4M 201.8M 231.1M 47% /cache
/dev/block/mtdblock4 2.0M 776.0K 1.2M 38% /dev/cache

most of my Apps are on sd-ext, dalvik-cache is on data

/dev/cache is where the real cache partition is mounted, /cache is actually a bind mount from /sd-ext/cache

Applicable to..

Probably any device that uses the same kind of nand as the G1 MT3G ( msm_nand )

The intial scripts are geared towards G1 / MT3G. however I have 'rewritten' much of the script for v1.5 , it now reads the partition table in dmesg, so it _should_ be universal **

v1.5.3 confirmed to work on heroc

v1.5.6 confirmed to work on bravo + bravoc ( with S-OFF )

unsure if it will work with your device? checkout the source on github ( or ask your favourite dev to take a look )

The 'Tech' in Breif

This method is beautifully simple...

When booting we give the kernel the mtd partition table we want to use..

Thats it :)

In practice we need to do this when booting to recovery, and booting the rom.

below are files to make this as simple flashing a rom.

Credits :-

Lbcoder - for coming up with the idea

Skraw ( CM forums ) - for getting lbcoder interested :)

Koush - for AnyKernel

Cyanogen & Co - for giving us all such great ROMs to play with

Amon_RA and Koush - for giving us something to patch

Techjosh - for fixing the patchers for use with Rogers (EBi1)

Mblaster - for pointing out my nasty habit of using -r zip flag at the end of command ( breaks compatibility with older zip versions, fixed in AutoPatcher v1.5 )

Safety First

This method is safe, however it is not without risk

Two things could potentially go wrong

Recovery flash corrupt

This is extremely unlikely, and tbh could happen anytime you flash recovery

If in the very unlikely event that you find you can't reboot to recovery you have three options

re-flash recovery via fastboot ( the preferred option )

re-flash recovery via ROM ( not a great option with cm5.0.x/cm6 )

Do the whole root thing all over again ( no one wants to do that )

system, cache , data partition unmountable - corrupt

Under the right ( or wrong ) circumstances it is possible to get 'junk' files stuck in system ( or cache,data ), and in such away that recovery can not delete them, more serious corruption can render the partitions unmountable.

It is actually quite straight forward to fix this, but it does require fastboot

fastboot erase system -w

Clockwork Recovery 2.0.2.0 and later has erase_image binary, if you can adb shell in then

for i in system cache userdata;do erase_image $i;done

and reboot

I would advise you seek out how to 'fastboot', which tbh is a good thing to have regardless of using this 'hack' as it can get you out of so much trouble :)

*NB* don't use a patched recovery to flash SPL or RADIO ( you should avoid using recovery to flash these anyway, feel free to ask for current advice on spl / radio flashing )

Prevention is better than cure

I have only managed to corrupt partitions when switching partition layouts while having files on cache or data, for example going from System 67.5 Cache 67.5 to System 90 cache 5 with

cache approx 80% 'used'...

I have not been able to repeat this if I wipe Cache before rebooting,

therefore I advise that you wipe both cache and data * after patching recovery ( and rebooting )

* along with system if you are using clockwork

OK, now lets patch recovery and a ROM :)

Install Instuctions

It really is quite simple

download FR-recovery-v1.5.6-CustomMTD_S.zip and FR-boot-v1.5.6-CustomMTD_S.zip

create mtdpartmap.txt and put on /sdcard/ see configuration *

reboot to recovery

nandbackup

wipe cache + data

flash FR-recovery-v1.5.6-CustomMTD_S.zip

reboot to recovery ( reboot and hold Home )

Either : -

Nandrestore

Flash ROM + extras

flash FR-boot-v1.5.6-CustomMTD_S.zip

reboot

* configuration

The script in the recovery patcher checks for /sdcard/mtdpartmap.txt and reads that to override the default sizes.

e.g. for system 90mb and cache 2mb

NB make sure you mount sdcard first, else you won't write to sdcard/mtdpartmap.txt !

echo "mtd 90 2" > /sdcard/mtdpartmap.txt

data would be 117.8mb ( 116.7 useable )

e.g. for system 55mb and cache 2mb ( Purhaps a nice 'sugar free' Donut ;) )

echo "mtd 55 2" > /sdcard/mtdpartmap.txt

data would be 152.8mb ( 151.7 useable )

NB, above data sizes are for G1s, MT3Gs should add ~78mb

All In One Patch runner ( New to v1.5.3 )

new option to run the All In One Patch script ( versions 1.3.6 and higher )

the format is

aio <option1> <option2> <option3>...

e.g.

aio swap remount shabang lwp

By default it will install the sd-ext mount ( option sdext )

so a line just reading aio will be fine

Note: the patch must be on the root of the sdcard, and its file name must start with "fr-patch" and end with ".txt"

if you have several versions the newest ( as per files datetime stamp ) will be used

Faking your SPL

If your using an SPL that is not officially supported by your ROM and that ROM checks your SPL you can 'patch' to fake it.

echo "spl 1.33.2005" >> /sdcard/mtdpartmap.txt

note that we are using ">>" here, this is to append to the file ( ">" would overwrite it )

you can by all means use any text editor you like, the script will automatically convert to unix format

NOTE : you are dodging the checks the ROM dev put in place, do not complain to them if this doesn't workout for you

in

post 2

I have some 'CM6' Kernels I compiled for (1)0.95.xxxx SPLs

but I will only likely do these for RCs and Finals ( and there maybe a delay ).

In that post I point you towards the 'SafeSPL' ( 1.33.2003 ) this SPL is compatible with the current CM6 kernels ( so no need to wait for me or someone else to compile with bluetooth as modules ), but 1.33.2003 is not 'officially' supported ( its stock at 67.5mb system ) so you need to Fake your SPL ( say 1.33.2005 ) and resize to 90mb system ( or whatever you feel is optimum )

.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:.

Downloads

.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:.

http://tinyurl.com/customMTD

aab0fadf658ed275954aea8d0aed9c8f FR-AutoMTD_partitionPatcher_v1.5.6.tar.bz2

8857194cdbe34a52d173def4441ad2ae FR-AutoMTD_partitionPatcher_v1.5.6.zip

1f84a5ec50684a7830a93a8d455bc159 FR-boot-rpp-v1.5.6-CustomMTD_S.zip

bca0360f91aed0acf6e2dc82dfe01b56 FR-boot-v1.5.6-CustomMTD_S.zip

94b4238c2668cbe7cd52fb8ad5a2ee12 FR-recovery-v1.5.6-CustomMTD_S.zip

5404f1a41dbc60105d59c7fa0c335a70 FR-remove-v1.5.6-CustomMTD_S.zip

NB New Config option !!! to automatically run fr-patch136+

e.g.

mtd 90 2
spl 1.33.2005
aio swap remount shabang lwp a2sd

.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:.

ROM Zip Patcher for Devs

To make life even simpler for end users it is possible to integrate the 'patch' within a ROM

AutoMTD_partitionPatcher_v1.5.6.zip

currently Linux only,

within the zip is a tarball, untar that.

get that directory into your PATH, ( or just cd into it )

and then execute

PatchUpdateScript.sh <zip file to patch>

it will then

create a temp directory ( in your current directory )

copy your zip to it

extract required files

patch update(r)-script

zip and sign.

It simply saves the user from flashing the boot patch after flashing your ROM

The Future....

lbcoder has already suggested ways in which we can implement this 'on the fly'

so for instance it would be possible for a ROM , to instruct recovery what MTD partition layout is required, reload mtd kernel modules, and then flash ROM + boot.img

for those with huge partitions

Hey, you could go all silly and dual boot between ROMs .. ;)

Anyway, enjoy and feel free to modify/improve on these

Changelog

v1-5-6 : 2010-10-28

Calculate userdata size, greatly improves compatibility

Added a version to patch a boot.img ( boot-rpp ) with run-parts

didn't want to , but some are using roms which don't have run-parts, so the 06BindCache script wasn't running

Added a remove version ( remove )

flashing this will return the recovery to SPL's layout

I may well integrate that better, so you don't need a separate zip

AutoMTD_partitionPatcher can convert a recovery.img to a AutoMTD flashable zip

PatchUpdateScript.sh <full path to>/recovery.img

boot patcher is much cleaner, it just uses the cmdline of the running recovery

removed the default 90 2 sizing, you *must* set your own size in mtdpartmap.txt

v1-5-4/5

added stuff

removed stuff

moved stuff

see v1-5-6

v1-5-3 : 2010-08-13

This should be last version we need ;)

greater compatibility with none dreams/sapphires

option to launch All in One Patcher

v1-5-2 : 2010-08-0

Bug fixes

recovery was getting written to boot ( flash_image <partition> is now a variable )

typo in env variable was causing cache and data calculations to fail

AutoMTD now prints version number ( when flashing patched Zip )

tided up system "0x" 'fudge' ( to be compatible with trout/sapphire fall back )

removes temp files from memory when done

v1-5-1 : 2010-08-06

Bug fixes, had an extra '0x' on the system start + functions had wrong env var for the location of dmesg derived partition map

v1-5 : 2010-08-06

Version numbers brought into sync

Zipe Filename - 'reordered' ( easier to see version numbers in CWR )

AutoMTD Patcher - changes as per boot Patcher + zip recursion fix ( my bad habit, thanks go to mblaster for pointing this out )

Boot Patcher - cleaned up cache bind mount

Now supports leagcy /system/sd mount point

[*]supports ROM Manager ( real cache partition mounted on /dev/cache, recovery dir symlinked from 'fake' to 'real' cache )

Recovery Patcher - can 'fake' your SPL ( see configuration )

Recovery Patcher - creates more noise ( advise wipe and reboot )

Single Patcher script ( so I don't have make the same changes to three different files that essentially do the same job )

No longer 'Hardcoded' to 32[a/b] Partition Layout ( figures out SPL layout via dmesg ) **

uses original boot/recovery img's base configuration ( i.e. EBi0 and EBi1 compatible )

=< v1.4

Recovery Patcher v1.3, added SPL faker

Boot Patcher v1.2, fixed oversite where boot.img was not 'dumped'

Recovery Patcher v1.1 initial

Boot Patcher v1.1 ( was a fail, it didn't patch boot.img on CM roms as the tmp boot.img was deleted, my fault for just using the AutoMTD Patcher's script ( which runs before the tmp boot.img is deleted )

Boot Patcher v1 initial

Todo

- 2010-08-13 redundent ( launching AIO script ) - I might add some stuff to cm5/6's backup routine via the Auto patcher, things like the "All in One" installed scripts: 05mountsd and remount

windows compatible AutoMTD script ( meh, I hate batch scripts )

- 2010-08-13 DONE - thinking of adding a config option to launch the "all in one" script, but have to make that recovery compatible first

.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:.

Downloads

.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:.

mediafire downloads

http://tinyurl.com/customMTD

aab0fadf658ed275954aea8d0aed9c8f FR-AutoMTD_partitionPatcher_v1.5.6.tar.bz2

8857194cdbe34a52d173def4441ad2ae FR-AutoMTD_partitionPatcher_v1.5.6.zip

1f84a5ec50684a7830a93a8d455bc159 FR-boot-rpp-v1.5.6-CustomMTD_S.zip

bca0360f91aed0acf6e2dc82dfe01b56 FR-boot-v1.5.6-CustomMTD_S.zip

94b4238c2668cbe7cd52fb8ad5a2ee12 FR-recovery-v1.5.6-CustomMTD_S.zip

5404f1a41dbc60105d59c7fa0c335a70 FR-remove-v1.5.6-CustomMTD_S.zip

The attached files are OLD