The Linksys NSLU2 is a small ARM based gadget which has one Ethernet and two USB ports. The idea is to connect an external hard driver through USB and use the device as a small server. It's very popular because you can get it for under $100. There is a large user community at http://www.nslu2-linux.org/ The firmware is based on RedBoot but there is also functionality which allows you to put the device into upgrade mode and then upgrade the firmware via the network. There's a utility in Debian called upslug2 which can do this. Even though the NSLU2 is based on RedBoot, there are some restrictions we need to work around. Instead of using the FIS table to locate the kernel and initrd, specific values of their locations are hard coded. In practice, this means that there is only 1 MB of space for the kernel because the initrd starts 1 MB after the kernel. Since we want to use a generic ixp4xx kernel, we've worked around this limitation by using a 2nd boot loader, APEX. We put APEX in flash at the point where RedBoot loads the 'kernel' from and then we split the kernel in two parts - this is because NSLU2's RedBoot expects to find a specific header at the start of the initrd and the kernel will use this space now. Effectively, this means that there is: - A partition for APEX - A partition for the kernel: the kernel is split in two and each parts have a header - A partition for the initrd A description of the NSLU2's flash layout can be found at http://www.nslu2-linux.org/wiki/Info/BootFlash There is also a problem with Ethernet: the ixp4xx chip has built-in Ethernet but requires a microcode. The network driver is included in the mainline kernel and the microcode can be found in non-free. Apart from this, the NSLU2 is pretty easy to support.