shameless self-promoting website
»Rejourn root
Posted Wednesday, 04 January 2012 by Miklos
Tags: en frugalware

I recently got a GuruPlug. It has Debian by default, and it’s apt config is set to stable, while in fact at the moment what’s the factory default is considered as oldstable by upstream. So if you blindly do a few apt-get install foo, soon you’ll have newer userspace than kernel, and your device will no longer boot (based on true story - and yes, this is not Debian’s fault). Moreover, I was interested in how to install Frugalware on this device, so here is a quick howto.

Install rootfs

First you need to bootstrap Frugalware from Debian. It’s a good idea to install Frugalware on a USB stick, so you can switch back to Debian in case you messed up something and start from scratch again.

Partitioning is up to you, you’re recommended to have a small FAT (type: 0x0b) partition (32MB for example) at the beginning, we’ll use that later. The second can be the rest, ext4 or so.

Format and mount it (your device name may differ!):

mkfs.ext4 /dev/sda2
mkdir -p /mnt/sda2
mount /dev/sda2 /mnt/sda2

Then install our pacman-g2 binary to the Debian system, so you can bootstrap:

wget http://ftp.frugalware.org/pub/frugalware/frugalware-stable/frugalware-arm/pacman-g2-3.8.3-2mores2-arm.fpm
unxz pacman-g2-3.8.3-2mores2-arm.tar.xz
cd /
tar xf /path/to/pacman-g2-3.8.3-2mores2-arm.tar

Installing the required packages is a single command, as described here:

pacman-g2.static --noconfirm -Sy core base -r /mnt/sda2/

Upgrade the bootloader

Once the rootfs is ready, you need a new bootloader that will be able to boot our vanilla kernel.

You need a JTAG Board, so you can access the serial console. If you connect the USB cable to you PC, you can use for example

screen /dev/ttyUSB0 115200

to access the device.

Given that we want to boot a vanilla kernel, we need a vanilla bootloader as well. Before you mess with the bootloader, it’s a good idea to make a backup of its config (there is a 3 second timeout during boot - if you press any key there, you get the Marvell prompt). Here is my config:

Marvell>> printenv
bootcmd=${x_bootcmd_ethernet}; ${x_bootcmd_usb}; ${x_bootcmd_kernel}; setenv bootargs ${x_bootargs} ${x_bootargs_root}; bootm 0x6400000;
x_bootcmd_usb=usb start
x_bootcmd_kernel=nand read.e 0x6400000 0x100000 0x400000
x_bootargs_root=ubi.mtd=2 root=ubi0:rootfs rootfstype=ubifs
bootargs=console=ttyS0,115200 ubi.mtd=2 root=ubi0:rootfs rootfstype=ubifs

The only semi-unique part is the MAC address of the network interface(s).

If you want to update the bootloader, a possible way is to put the new binary to a pendrive. Given that the default bootloader does not support ext*, we need a fat filesystem. So format the first small partition we created already (the device name may be different in your case!):

mkdosfs /dev/sda1

Till Frugalware 1.6 is released, support for GuruPlug is available in Frugalware -current only, so download the binary package from there, extract the u-boot.kwb file from the guruplug directory, put it to the new partition. (A few other models are explained here).

Before you reboot, copy also /boot/uImage to the fat partition, you may have problems problems with reading the kernel from the ext4 partition with u-boot.

Once copying the kernel is done, reboot and in the u-boot shell do:

usb start
fatload usb 0:1 0x0800000 u-boot.kwb
nand erase 0x0 0x60000
nand write 0x0800000 0x0 0x60000

You can verify the updated bootloader with the version command:

Marvell>> version

U-Boot 2011.12 (Jan 03 2012 - 16:55:38)
gcc (Frugalware Linux) 4.6.2
GNU ld (GNU Binutils) 2.22

If Frugalware is mentioned, that’s a good sign. :)

Boot the new rootfs

Now you can boot your new rootfs:

usb start
fatload usb 0:1 0x00800000 /uImage
setenv bootargs console=ttyS0,115200 root=/dev/sda2 rootdelay=5
bootm 0x00800000

If it booted fine, you may want to make this the default:

setenv bootargs 'console=ttyS0,115200 root=/dev/sda2 rootdelay=5'
setenv bootcmd_usb 'usb start; fatload usb 0:1 0x00800000 /uImage'
setenv bootcmd 'run bootcmd_usb; bootm 0x00800000'


The rest is up to you:

  • setting up a root password

  • setting up network by default using netconfig

and so on… you know this already, nothing arm-specific.

For the reference, here is the tested CPU and Frugalware version:

$ cat /proc/cpuinfo
Processor       : Feroceon 88FR131 rev 1 (v5l)
BogoMIPS        : 1191.11
Features        : swp half thumb fastmult edsp
CPU implementer : 0x56
CPU architecture: 5TE
CPU variant     : 0x2
CPU part        : 0x131
CPU revision    : 1

Hardware        : Marvell GuruPlug Reference Board
Revision        : 0000
Serial          : 0000000000000000
$ cat /etc/frugalware-release
Frugalware 1.5 (Mores)