Upgrading GuruPlug Kernels

After a failed flashing attempt(don’t attempt to tftp flash u-boot.kwb from within U-Boot!) I needed to use JTAG combined with the included JTAG adapter.  To do this, make sure that the UART cable is unplugged, and the JTAG cable is plugged in(unplug/replug the USB adapter just to be safe). First grab the guruplug-installer package, then grab a known-good copy of U-Boot.

$ cd Downloads/
$ tar zxvf Guruplug-installer.tar.gz
$ cd guruplug-installer
$ sudo ./runme.sh ../uboot.guruplug.bin
(lots of scrolling text)

At this point U-Boot is restored, and all that’s needed is to upload a new kernel(and maybe rootfs). Your old kernel won’t work with this new version of U-Boot, so make sure that you have a kernel compiled and ready to use. If you don’t feel like patching(and manually fixing the failed patches) I’ve provided a 2.6.34 kernel for you, complete with modules. To upload the new kernel you’re going to need to attach your GuruPlug to your network with it’s top-facing ethernet interface(near eSATA port).

After attaching the UART cable to the GuruPlug again(and unplugging JTAG, then unplugging/replugging the USB), you’ll need to connect to it with a serial console. On Linux it’s enumerated as /dev/ttyUSB0. My favorite program to do this is simply screen. Start it by issuing the command ‘sudo screen /dev/ttyUSB0 115200’. Afterwards, hit ‘Enter’ a few times to get some output. If no output comes out, power-cycle the Guruplug without removing the UART cable. Press ‘Esc’ to pause it’s automatic booting. This should drop you off at a U-Boot prompt.

To send the kernel over, you’ll have to have a TFTP server set up reachable from the Ethernet cable plugged in to the Guruplug(on Gentoo I used net-ftp/tftp-hpa), issue the following into your working serial prompt:

setenv serverip 192.168.1.2
setenv ipaddr 192.168.1.222

Set the ‘serverip’ variable to the IP address of the TFTP server. Set the ‘ipaddr’ variable to a free IP address on your network. Then issue the following commands:

tftp 0x6400000 kernelImageName
nand erase 0x100000 0x400000
nand write.e 0x6400000 0x100000 0x400000