Advanced booting

=MultiBoot=

The process for setting up a multi-boot is very similar to Booting from a flash card. It's a good idea to makes sure the first partition is a fat/data partition - this keeps things simple.

A sample partition layout on an 8Gb card may be:
 * 2Gb primary vfat data
 * 2Gb primary everyday
 * 2Gb primary debian
 * 512Mb logical test1 (diablo)
 * 512Mb logical test2 (chinook)
 * 512Mb logical test3 (diablo)

Be aware that the kernel/initfs only supports a limited number of partitions; this can easily be extended to 6 but no further. This requires editing /home/user/local/bin/initfs_flasher/initfs.bootmenu.jffs2 to add the dev nodes using mknod (eg: mknod -m600 initfs/dev/mmcblk0p5 b 254 5)

When cloning, you may edit nupgrade.sh to remove the TARGET= line and then run it as follows: TARGET=/dev/mmcblk0p5 ./nupgrade.sh 1

To create pristine images of Diablo/Chinook, follow the instructions for Modifying the root image, but once you have the rootfs.jffs2 image extracted, you can follow the mount instructions and rsync the rootfs to the tablet.

I used this script (which doesn't work yet)
 * 1) !/bin/bash


 * 1) This script connects to the tablet and sends the selected rootfs to the selected partition

FLASHER3=/everything/Downloads/Hardware/nokia_n800/flasher-3.0 F_IMAGE=/everything/Downloads/Hardware/nokia_n800/RX-34_2008SE_2.2007.51-3_PR_COMBINED_MR0_ARM.bin IMAGE_DIR=chinook_fiasco PART=/dev/mmcblk0p6

mkdir -p $IMAGE_DIR cd $IMAGE_DIR

$FLASHER3 -F $F_IMAGE -u
 * 1) unpack fiasco

mknod /tmp/mtdblock0 b 31 0 modprobe loop losetup /dev/loop0 rootfs.jffs2 modprobe block2mtd modprobe mtdblock echo "/dev/loop0" > /sys/module/block2mtd/parameters/block2mtd modprobe jffs2 mkdir /tmp/jffs2 mount -t jffs2 /tmp/mtdblock0 /tmp/jffs2
 * 1) https://wiki.maemo.org/Modifying_the_root_image

ssh root@nut insmod /mnt/initfs/lib/modules/2.6.21-omap1/ext2.ko \; mkdir /tst \; mount $PART /tst rsync -av /tmp/jffs2/ root@nut:/tst/ ssh root@nut umount /tst \; rmdir /tst
 * 1) copy files

umount /tmp/jffs2 rmmod jffs2 rmmod mtdblock rmmod block2mtd losetup -d /dev/loop0 rm -f /tmp/mtdblock0 rmdir /tmp/jffs2
 * 1) clean up

=Boot Messages= So if you want to see the kernel boot log or dmesg type output when you boot here's how (thanks to querty12 for the pointers)

Check you have an up-to-date initfs - does this file exist: /mnt/initfs/usr/bin/fb_update_mode If not then install fanoush's bootmenu/initfs.

Log into the tablet and remount initfs so you can edit it directly. (If this doesn't make you nervous then you should stop now!) mount -o remount,rw /mnt/initfs

Now grab some kernel modules from here: http://fanoush.wz.cz/maemo/modules-2.2007.50-2-custom.tar.gz

and copy the 4 modules you find in  ./drivers/video/console/ to /mnt/initfs/lib/modules/`uname -r`/

I extracted them on my host and did: scp drivers/video/console/* root@nut:/mnt/initfs/lib/modules/2.6.21-omap1/

Now, for each bootmenu where you want a bootlog, edit /mnt/initfs/bootmenu.conf and add softcursor bitblit font fbcon to any MODULE_N_MODULES= lines Also add a line like this: MENU_2_FBMODE="auto"

eg: MENU_4_NAME="Diablo Test" MENU_4_ID="mmc5" MENU_4_DEVICE="${INT_CARD}p5" MENU_4_MODULES="mbcache ext2 softcursor bitblit font fbcon" MENU_4_FSTYPE="ext2" MENU_4_FSOPTIONS="noatime" MENU_4_FBMODE="auto" [ -d "/sys/block/${INT_CARD}/${MENU_4_DEVICE}" ] || MENU_4_NAME="(${MENU_4_NAME}) N/A"

Finally, remount the initfs as ro and reboot. mount -oremount,rw /mnt/initfs/

Once your system starts, don't forget to run /mnt/initfs/usr/bin/fb_update_mode manual or the display will run slowly.

=Initfs Hacking=