Booting the Neo FreeRunner from SD via U-Boot
From Openmoko
Here are the steps described to boot your system from an SD card.
Contents |
Step 1: Build your kernel
Kernel building is supposed to be done through OpenEmbedded. If you use the MokoMakefile open up $OMDIR/openmoko/trunk/oe/packages/linux/linux-gta01/defconfig-2.6.21.6-fic-gta01. If you are building OM-2007.2 open $OEDIR/packages/linux/linux-gta01/defconfig-2.6.21.5-fic-gta01. (Note that the kernel version may change in future versions.)
Now find the line saying:
CONFIG_MMC_S3C=m
and change it to:
CONFIG_MMC_S3C=y
If you want to use an ext2 file system on the SD, also find the line saying:
CONFIG_EXT2_FS=m
and change it to:
CONFIG_EXT2_FS=y
Thats it. Now rebuild the kernel.
Step 2: Populate SD card
Format partition 1 as ext3 (ext2 will not boot). Mount your SD card somewhere and put your image on it:
mount /dev/sda1 /mnt/moko tar -C /mnt/moko/ -xvzf openmoko-devel-image-fic-gta01-20070313022035.rootfs.tar.gz
Now we also want the kernel on there
cp uImage /mnt/moko/boot/
If you are building OM-2007.2 you need to add "tar" to the image types in your local.conf:
IMAGE_FSTYPES = "jffs2 tar"
After building a new image by issuing bitbake openmoko-devel-image there will be a OpenMoko-....tar in the deploy directory. Copy it on the SD card by doing
mount /dev/sda1 /mnt/moko tar -C /mnt/moko/ -xvf openmoko-devel-image-fic-gta01-20070313022035.rootfs.tar
In OM-2007.2 the last built kernel gets a special soft-link. Therefore you can copy it by doing:
cp uImage-fic-gta01-latest.bin /mnt/moko/boot/uImage
Step 3: Add uboot boot entry
On my Phase-1 Neo the boot menu entry existed already. If yours is missing it follow those instructions: Start uboot in bootmenu mode (= hold AUX while powering on) and add the following entry via serial console: (See Bootloader section on how to access an bootloader).
GTA01Bv4 # setenv menu_4 Boot from SD: setenv bootargs root=/dev/mmcblk0p1 rootdelay=5 console=ttySAC0,115200 console=tty0 loglevel=8 \${mtdparts}\; mmcinit\; ext2load mmc 0 0x32000000 /boot/\${sd_image_name}\; bootm 0x32000000 GTA01Bv4 # setenv sd_image_name uImage GTA01Bv4 # saveenv
You can now easily boot a different kernel by changing the variable sd_image_name to the new name.
Step 4: Boot into the new system
Power off your device, insert the SD card and boot into the boot menu. You should have an entry called "Boot from SD" which does exactly that. :-)