GuruPlug – Asterisk – FreePBX HOWTO


I am doing a bit of pinch, snip and saw here but in the end I added the script that does it all for you and your Guruplug.

The GuruPlug

Basically the GuruPlugs are an enhanced version of the well known SheevaPlugs, the biggest difference is probably the need for an external JTAG/UART<>RS232 board to access the serial console. Good thing is that the board comes with a normal JTAG connector and an additional RS232 connector and 2.5V DC power outlet, so it will be useful for other devices, too. Globalscale could have chosen different connectors with less wiggly cables, though.

As I was not able to find a useful howto about installing Debian on the Guruplug, I’ve written down what I did to install Debian unstable on a micro SD card using the Debian installer for the GuruPlug. I did not have a look who modified the Debian installer to work on the plug, but thanks for that! The instructions below are based on Martin Michlmayer’s awesome SheevaPlug documentation, the hints from and various forum posts in the plugforum.


Please note that I’m not responsible for whatever you’re doing with your plug. If you follow this tutorial and end up with a brick, it is your fault, not mine.

To install the GuruPlug you need the JTAG Board. Connect the UART port to the GuruPlug and the JTAG board to your computer, it should show up as FTDI (thanks for using good chips!) USB<>Serial converter. Serial port settings are 115200, 8-N-1, no hw/sw flow control.

The other thing you should prepare is a working tftpd, I’m using aftpd.

apt-get install atftpd

Recent versions share files from /srv/tftp/, in case you’re running Lenny /var/lib/tftpboot/ should be the place to drop your files.

When everything is connected properly the boot process should show up in minicom, make sure to press some key to enter uBoot. The first thing you should do is to save the original uBoot environment in case you want to restore the factory settings later. Run


and save the output somewhere.

Connecting with minicom

setup minicom

# minicom –s

Set the Configure properties as follows:

  • Bits per sec field to 115200
  • Data bits to 8
  • Parity to None
  • Stop bit to 1
  • Flow Control to None

Upgrading uBoot

Unfortunately the uBoot version on the GuruPlug is pretty old and seems to have some issues in booting from USB devices, so the first thing you should do is to upgrade it. You might want to investigate if there is even a better, more recent uBoot version available somewhere, or build one on your own, but I didn’t bother and took the uBoot.guruplug.bin from here. The main issue with that is that booting from USB still seems to be buggy (even for FAT partitions) and that ext2load is still not supported. Otherwise it works well :-). I’m mainly following Martin Michlmayer’s tutorial again.

Download the uBoot.guruplug.bin and drop it into the tftpd directory. Make sure you always set the plug’s IP address (ipaddr) and your server’s IP address (serverip) properly. I’ll use for the plug and for the server in all examples, make sure to change that for your own needs. Stop if something goes wrong, especially when the tftp download failed.

setenv ipaddr
setenv serverip
tftp 0x6400000 uBoot.guruplug.bin
nand erase 0x00000000 0x0100000
nand write 0x6400000 0x0000000 0x80000

Enter uBoot again after the reset.

Preparing the installer

Download uImage and uInitrd to your tftpd directory.

Although I’ve heard that setting mainlineLinux/arcNumber in the uBoot environment is not necessary anymore for very recent kernel, lets set them to make sure the Debian kernel works:

setenv mainlineLinux yes
setenv arcNumber 2097

Again, enter uBoot after the reset.

Running the installer

Run the following in the uBoot console:

setenv ipaddr
setenv serverip
tftpboot 0x01100000 uInitrd
tftpboot 0x00800000 uImage
setenv bootargs console=ttyS0,115200n8 base-installer/initramfs-tools/driver-policy=most
bootm 0x00800000 0x01100000

You should see the installer starting now. You might want to follow the following hints:

  • Before configuring the network, go back and set the debconf priority to low, Then continue. While chosing the Debian mirror, chose sid as the Debian version to install. If you don’t have sid as choice, use a different mirror. The kernel in testing does not boot on the GuruPlug, you need 2.6.32-13 from sid.
  • You might want to load the ‘network console’ installer component and continue via ssh. Makes things fater and colourful.
  • Suggested partitioning: I’ve installed Debian to an 8GB micro SDcard. The SDcard reader is connected via USB and shows up as /dev/sdb (/dev/sda should be the internal NAND and not shown by the installer). I’ve used 150MB ext2 for /boot and the rest of the space for /, using ext4. You might want to use the noatime option on both filesystems to avoid unnecessary write access to the SDcard. You might choose to add a swap partition, but SDcards are so slow, so I’ve skipped that.

When you continue the installation, you will hit the following problem:

  • The uBoot is not able to boot from your /boot anyway. USB support is buggy and ext2load missing.

We’ll work around this issue by writing the kernel and initrd into the plug’s NAND. To do so, enter a shell in the installer and chroot into the install target. We’ll then scp the necessary uImage and uInitrd to our tftpd directory:

chroot /target /bin/bash
cd /boot
scp uI* root@

Now leave the shell, finish the installation and reboot, enter uBoot again.

Make the plug bootable

To write kernel and initrd to the NAND memory, we have to transfer it via tftp first, then erase the NAND area we want to write to and then write it to the NAND. The values I’ve chosen here should be fine for the current Debian kernel, but you might need to change the necessary size for the initrd. To do so have a look at the output while transferring the initrd – the transferred bytes are displayed. They have to fit into the amount of bytes you write (the last option to nand write.e).

setenv ipaddr
setenv serverip
tftp 0x6400000 uImage
nand erase 0x100000 0x400000
nand write.e 0x6400000 0x100000 0x400000
tftp 0x6400000 uInitrd
nand erase 0x500000 0x1fb00000
nand write.e 0x6400000 0x500000 0x600000

Now we need to set the necessary boot options. Make sure to change the root device if you’ve chosen a different layout from that I’ve suggested above, or if you’re not using a SDcard.

setenv bootargs_debian 'console=ttyS0,115200 root=/dev/sdb2'
setenv bootcmd_nand 'nand start; nand read.e 0x00800000 0x100000 0x400000; nand read.e 0x01100000 0x500000 0x600000'
setenv bootcmd 'setenv bootargs $(bootargs_debian); run bootcmd_nand; bootm 0x00800000 0x01100000'
run bootcmd

Finish The Debian install

Your GuruPlug should boot your new Debian installation now. Have fun! I’ll try to keep the howto updated for changes in uBoot and the installer, but I might not have the time to so quickly. Patches and comments are welcome!.

root@guruplug:~# uname -a
Linux guruplug 2.6.32-5-kirkwood #1 Fri May 21 05:44:29 UTC 2010 armv5tel GNU/Linux
root@guruplug:~# cat /proc/cpuinfo
Processor   : Feroceon 88FR131 rev 1 (v5l)
BogoMIPS    : 1192.75
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

So you want Asterisk & Freepbx

Here is something which will make it very easy… DAMN easy for you. Download the modified script.

Backup Your Work

OK now Backup 🙂

dd if=/dev/sdb bs=4096 | pv -s 2G | dd bs=4096 of=GuruPlug-Asterisk-FreePBX.IMG


Leave a Reply




You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Turn on pictures to see the captcha *