Hello,
this is not howto that should be followed but a (bit long) warning.
I tried to find a way of reflashing initfs partition from device itself.
In theory it should be possible via mtd-tools if done correctly. I
underestimated a bit how dangerous this stuff is so I went ahead. First
I reflashed initfs via 'nandwrite /dev/mtd3 initfs.jffs' but the device
did not boot so I reflashed with flasher and it worked again. Then I
tried nandwrite flag -j which, according to some information on the net,
should be used to flash jffs2 partition. It was wrong. Really wrong. It
did not boot too so I reflashed initfs again with flasher and it worked
again. After boot I noticed in dmesg output that flashing with nandwrite
or something else I did before marked all flashed blocks bad - initfs
image had 1.5MB so it means 1.5MB of bad blocks in initfs partition! And
initfs partition is in normal situation 2MB long! Since I didn't know
what exactly made those bad blocks and was a bit slow in thinking I
actually repeated my steps again and managed to make 3MB of bad blocks
in total :-)
Only then I searched linux-mtd list and found that
1. I should have used 'flash_eraseall' first before writing with
nandwrite [1]
2. -j flag to nandwrite should not be used to flash jffs filesystems and
will probably be removed [2]
Luckily Nokia flasher or bootloader (and also linux kernel) can recover
from this situation. It simply skips bad blocks and enlarges initfs
partition so next good blocks are used. This is really great solution,
thank you Nokia people for making my device still booting even when
trying so hard to kill it :-)
As a side effect this initfs partition enlargement also moves begining
of root partition which makes the device unbootable (the root jffs2
filesystem is missing the beginning). Luckily there is the boot menu and
I have mmc card with root filesystem copy booting so I actually didn't
notice anything at first :-)
Only later I have found that the partition sizes changed - see my
request for help [3] for full details.
By searching mtd-linux mailing list further and examining kernel and
mtd-utils source I found that there is no easy way to get my 'bad'
blocks back. Both sources contain bad block checks and kernel prevents
erasing bad blocks. I had to comment out these checks and in the end it
worked! With custom kernel and flash_eraseall the result is that bad
blocks are gone again :-) But my initfs partition still stays enlarged.
[ 4.416931] 5 cmdlinepart partitions found on MTD device omap-nand
[ 4.417053] Creating 5 MTD partitions on "omap-nand":
[ 4.417175] 0x00000000-0x00020000 : "bootloader"
[ 4.418853] 0x00020000-0x00080000 : "config"
[ 4.420318] 0x00080000-0x00280000 : "kernel"
[ 4.421813] 0x00280000-0x00780000 : "initfs"
[ 4.423248] 0x00780000-0x08000000 : "root"
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/mtdblock3 5120 1924 3196 38% /mnt/initfs
Actually I like this layout. There is more space for modules and other
uclibc stuff for further experiments. But still - is there some way of
reverting back to 2MB big initfs? Maybe reflashing whole fiasco image at
once?
Anyway, it looks like I was really extremely lucky that after all things
I did I still have my precious N770 working. I still didn't succeed in
reflashing from the device but I hope it is just matter of using
flash_eraseall and then writing with nandwrite. But it will take few
days until I refill my bucket of courage and go ahead and try again :-)
Frantisek
1 http://lists.infradead.org/pipermail/linux-mtd/2005-March/012045.html
2 http://lists.infradead.org/pipermail/linux-mtd/2006-August/016256.html
3 http://lists.infradead.org/pipermail/linux-mtd/2006-August/016287.html
_______________________________________________
maemo-developers mailing list
maemo-developers@maemo.org
https://maemo.org/mailman/listinfo/maemo-developers