Guruplug boot and kernel upgrade for stable Wi-Fi

Recently I got my Guruplug Server Plus device and I am happy with the toy, but soon I discovered that the Wi-Fi drivers are not stable if you want to run the device in “client mode”, I found out that recently there has been put up a page with instructions to make the device Wi-Fi stable. Although the instructions are there, it was difficult for me to find the right way to upgrade the U-boot and kernel. So here the way I did it. In a next posting I will explain how to setup Wi-Fi correctly, still figuring that out.

Prerequisites:
– Guruplug connected to your network via ethernet and a JTAG module to allow serial console access to the device
– Computer connected to your network (probably also the computer you want to use to access your Guruplug via the serial console)

Part 1: setting up the TFTP-server and putting the images in the right place

– Download pre-compiled U-boot binary here (direct link) into a directory (e.g. /root/guruplug)
– Download pre-compiled binary kernel here (direct link) into a directory (e.g. also /root/guruplug)
– Install a tftp-server (under Ubuntu Linux) and check whether it is running:

sudo apt-get install tftpd-hpa
service tftpd-hpa status

– Go to your work directory (/root/guruplug) and extract the u-boot and the kernel archive:

tar xvzf guruplug-u-boot-flipflip-20101111.tar.gz
tar xjvf UImage_linux_kernel_2_6_33_7.tar.bz2

– Copy of the extracted contents the following two files to the folder where tftpboot resides, in my case /var/lib/tftpboot:

mv /root/guruplug/u-boot.kwb /var/lib/tftpboot
mv /root/guruplug/uImage /var/lib/tftpboot

Part 2: The serial console / JTAG setup and ‘burning’ the images

– Connect via the serial console to the Guruplug, see this page. This
allows you to see what is going on on the device, including the boot process (U-boot).
– Turn on the Guruplug and see the device booting, when you see a message which allows you to interrupt the boot process by pressing a key, do so, this will show you the U-boot prompt
– Set some environment variables to prepare for ‘downloading’ the images from your TFTP-server (= serverip variable) to your Guruplug (= ipaddr variable). The IP addresses used here might be different for your network. The serverip is the computer running the TFTP-server. The ipaddr is the IP address you give to your Guruplug. It might be handy to save the environment variables so they are there everytime you boot.

setenv serverip=192.168.0.100
setenv ipaddr=192.168.0.110
saveenv

– Download the U-boot image from the TFTP-server into the memory of your Guruplug, erase the old U-boot image and write the new U-boot image into the memory of the plug. Finally reset the device. If everything went fine, you will see your updated U-boot prompt.

tftp 0x6400000 u-boot.kwb
nand erase 0x00000000 0x0100000
nand write 0x6400000 0x0000000 0x80000
reset

– Now install the new kernel image from the TFTP-server into the memory of the Guruplug and set the environment variables and save them.

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

setenv x_bootcmd_kernel 'nand read.e 0x6400000 0x100000 0x400000'
setenv x_bootargs_root 'ubi.mtd=2 root=ubi0:rootfs rootfstype=ubifs'
setenv x_bootargs 'console=ttyS0,115200'
setenv x_bootcmd '$(x_bootcmd_kernel); setenv bootargs $(x_bootargs) $(x_bootargs_root) ;bootm 0x6400000;'
setenv bootcmd 'run x_bootcmd'
saveenv

Now you should be able to boot up your Guruplug with a new U-boot and kernel installed by entering the following command:

reset

Useful links:
http://www.denx.de/wiki/bin/view/DULG/Manual
http://www.plugcomputer.org/plugwiki/index.php/U-Boot_Quick_Reference
http://www.plugcomputer.org/plugwiki/index.php/Re-building_the_kernel_and_U-Boot