Martin Michlmayr

Using U-Boot on the QNAP TS-409

If you have a serial console for your QNAP TS-409, you can use U-Boot, the boot loader used on the TS-409, to restore the original QNAP firmware or load images via the network.

Loading the installer image

You can load the Debian installer image (or other images) via TFTP. First of all, configure the IP address of the TFTP server and of your QNAP:

setenv serverip 192.168.1.2
setenv ipaddr 192.168.1.139

Then specify the command line that should be passed to the kernel. This tells the kernel that the serial console should be activated and that there's a ramdisk that is 4 MB in size.

setenv bootargs console=ttyS0,115200n8 root=/dev/ram rw initrd=0x800000,0x3fffff

Finally, load the image via the network with TFTP and start it:

tftpboot 0x0800000 initrd.gz
tftpboot 0x400000 kernel
bootm 0x400000

If you'd like to load a kernel image you saved from /boot, please see the instructions on how to prepare the image.

Restoring the QNAP firmware

If you want to restore the original QNAP firmware when your Debian is no longer working, you can put the backup you made of your QNAP firmware into flash via U-Boot. First, specify the IP address of your TFTP server and of your QNAP device:

setenv serverip 192.168.1.4
setenv ipaddr 192.168.1.139

Then load the backup you made of mtd1 (the QNAP kernel) and write it to flash:

tftpboot 0x400000 mtd1
erase 0xff800000 0xff9fffff
cp.b 0x400000 0xff800000 ${filesize}

Finally, load the backup you made of mtd2 (the QNAP ramdisk) and write it to flash:

tftpboot 0x0800000 mtd2
erase 0xffa00000 0xffdfffff
cp.b 0x0800000 0xffa00000 ${filesize}

And restart the machine:

reset

Once you have restored the QNAP firmware in flash, you have to follow the second step described on the restore page and run QNAP Finder to install the QNAP software to disk.

Preparing Debian images from /boot to load

If you copy your Debian kernel and ramdisk from /boot to another machine for backup, you can load them via TFTP as described above after making some small modifications to the kernel and ramdisk images.

You have to make two modifications to the kernel. First, you have to set the machine ID of your QNAP device by prepending a few bytes to the kernel image. This can easily be done with the devio command in Debian. Second, you have to generate a U-Boot image from the kernel image. Let's take the 2.6.32-5 kernel as an example:

tmp=$(tempfile)
devio > $tmp 'wl 0xe3a01c06,4' 'wl 0xe3811041,4' # TS-409
cat /boot/vmlinuz-2.6.32-5-orion5x >> $tmp
mkimage -A arm -O linux -T kernel -C none -a 0x00008000 -e 0x00008000 -d $tmp vmlinuz-2.6.32-5-orion5x.uboot

Next, you have to pad the initrd image so it will be exactly 4 MB:

dd if=/boot/initrd.img-2.6.32-5-orion5x of=initrd.img-2.6.32-5-orion5x.padded ibs=4194304 conv=sync

Now copy vmlinuz-2.6.32-5-orion5x.uboot and initrd.img-2.6.32-5-orion5x.padded to your TFTP server and load them in memory or write them to flash as described above.