Home | History | Annotate | Line # | Download | only in nslu2
README revision 1.5.6.3
      1  1.5.6.3  yamt $NetBSD: README,v 1.5.6.3 2007/02/26 09:06:20 yamt Exp $
      2  1.5.6.2  yamt 
      3  1.5.6.2  yamt NetBSD for the Linksys NSLU2 (a.k.a. "Slug")
      4  1.5.6.2  yamt ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      5  1.5.6.2  yamt 
      6  1.5.6.2  yamt The NSLU2 (Network Storage Link for USB 2.0 Disk Drives) is a small, cheap
      7  1.5.6.2  yamt NAS device consisting of an Intel IXP420 (Xscale) CPU, a 10/100mbit Ethernet
      8  1.5.6.2  yamt port, and two USB 2.0 ports. It has 32MB of SDRAM and 8MB of Flash memory,
      9  1.5.6.2  yamt and runs RedBoot/Linux out of the box.
     10  1.5.6.2  yamt 
     11  1.5.6.2  yamt It is eminently hackable.
     12  1.5.6.2  yamt 
     13  1.5.6.2  yamt The guys over at http://www.nslu2-linux.org/ have done a good job of
     14  1.5.6.2  yamt documenting just about every aspect of the hardware and original firmware.
     15  1.5.6.2  yamt They also provide a custom "Unslung" Linux distribution to replace the
     16  1.5.6.2  yamt original hobbled kernel/userland.
     17  1.5.6.2  yamt 
     18  1.5.6.2  yamt Because of the amount of documentation available, and the fact that Slugs
     19  1.5.6.2  yamt are available so cheaply (I paid just over UKP 50 for mine, brand new) I
     20  1.5.6.2  yamt decided to buy one and port NetBSD to it.
     21  1.5.6.2  yamt 
     22  1.5.6.2  yamt This is the result of that effort.
     23  1.5.6.2  yamt 
     24  1.5.6.2  yamt Note: The Slug's IXP420 CPU runs in big-endian mode, so when building a
     25  1.5.6.2  yamt cross toolchain you must pass "-m evbarm -a armeb" to build.sh.
     26  1.5.6.2  yamt 
     27  1.5.6.2  yamt 
     28  1.5.6.2  yamt 
     29  1.5.6.2  yamt Current status
     30  1.5.6.2  yamt ==============
     31  1.5.6.2  yamt 
     32  1.5.6.2  yamt The following bits of Slug hardware are not (yet?) supported:
     33  1.5.6.2  yamt 
     34  1.5.6.2  yamt  - Flash ROM
     35  1.5.6.2  yamt    You can write gzboot kernels (when support is added) to Flash using
     36  1.5.6.2  yamt    RedBoot, so all is not lost.
     37  1.5.6.2  yamt 
     38  1.5.6.2  yamt  - Buzzer
     39  1.5.6.2  yamt    In the absence of a decent API to expose the onboard buzzer to userland,
     40  1.5.6.2  yamt    this is not yet supported. I envisage using timer1 to generate an
     41  1.5.6.2  yamt    interrupt at the required rate (1-2 kHz). The handler will toggle the
     42  1.5.6.2  yamt    buzzer GPIO pin. Obviously timer1 will be configured only when necessary
     43  1.5.6.2  yamt    as a 1-2 kHz interrupt rate will sap a fair bit of CPU horsepower.
     44  1.5.6.2  yamt 
     45  1.5.6.2  yamt Everything else is fully supported, including the power/reset buttons and
     46  1.5.6.2  yamt disk activity/status LEDs.
     47  1.5.6.2  yamt 
     48  1.5.6.2  yamt Non-hardware items on the TODO list include:
     49  1.5.6.2  yamt 
     50  1.5.6.2  yamt  - gzboot support.
     51  1.5.6.2  yamt    The Slug's 8MB of Flash is split into 5 segments:
     52  1.5.6.2  yamt 
     53  1.5.6.2  yamt     1 0x50000000-0x5003ffff: RedBoot (with some additional bits at the end).
     54  1.5.6.2  yamt     2 0x50040000-0x5005ffff: Sysconf (used by the Linksys firmware).
     55  1.5.6.2  yamt     3 0x50060000-0x5015ffff: Self-extracting compressed kernel image.
     56  1.5.6.2  yamt     4 0x50160000-0x507dffff: Compressed ramdisk image.
     57  1.5.6.2  yamt     5 0x507e0000-0x507fffff: SerComm Flash trailer.
     58  1.5.6.2  yamt 
     59  1.5.6.2  yamt    Segments 1, 2, and 5 should be considered immutable. Segments 3 and 4
     60  1.5.6.2  yamt    have a 16-byte header, the first 4 bytes of which describe the length
     61  1.5.6.2  yamt    of the image contained in that segment (not including the header).
     62  1.5.6.2  yamt 
     63  1.5.6.2  yamt    On power-up, RedBoot copies the image in segment 3 into SDRAM at 0x01d00000,
     64  1.5.6.2  yamt    and the image in segment 4 into SDRAM at 0x01000000. RedBoot then jumps to
     65  1.5.6.2  yamt    0x01d00000. This is just a regular ARM Linux compressed kernel bootloader.
     66  1.5.6.2  yamt 
     67  1.5.6.2  yamt    So, we need to create a version of gzboot linked not at Flash address
     68  1.5.6.2  yamt    0x50060000, but at 0x01d00000 instead. The only downside is that it looks
     69  1.5.6.2  yamt    like the combined size of gzboot plus compressed kernel cannot exceed 1MB.
     70  1.5.6.2  yamt 
     71  1.5.6.2  yamt    To support an md(4) root filesystem, we will need to modify gzboot to
     72  1.5.6.2  yamt    decompress the ramdisk image from segment 4 and copy it to the correct
     73  1.5.6.2  yamt    place in the decompressed kernel image.
     74  1.5.6.2  yamt 
     75  1.5.6.2  yamt  - Move the kernel link address closer to the start of SDRAM. We waste a
     76  1.5.6.2  yamt    little under 2MB with the current setup.
     77  1.5.6.2  yamt 
     78  1.5.6.2  yamt 
     79  1.5.6.2  yamt 
     80  1.5.6.2  yamt Getting NetBSD onto the NSLU2
     81  1.5.6.2  yamt =============================
     82  1.5.6.2  yamt 
     83  1.5.6.2  yamt Thanks to the efforts of the guys over at www.nslu2-linux.org, hacking the
     84  1.5.6.2  yamt Slug is a pretty easy proposition, but some soldering skills are essential.
     85  1.5.6.2  yamt For a first-time install of NetBSD (at least until someone comes up with a
     86  1.5.6.2  yamt nice easy binary install image) you will almost certainly require access to
     87  1.5.6.2  yamt the serial console. This means firing up your trusty soldering iron and
     88  1.5.6.2  yamt hooking up a MAX3232 chip to your Slug. While your soldering iron is hot,
     89  1.5.6.2  yamt you should seriously consider de-restricting your Slug's CPU core clock
     90  1.5.6.2  yamt speed (133MHz stock, 266MHz de-restricted) by removing a single surface-
     91  1.5.6.2  yamt mount resistor. Full instructions for both the these mods are on the above
     92  1.5.6.2  yamt website.
     93  1.5.6.2  yamt 
     94  1.5.6.2  yamt Once you have console access you can interrupt RedBoot's auto-boot process
     95  1.5.6.2  yamt using CTRL-C. You are now in a position to download a NetBSD kernel into
     96  1.5.6.2  yamt SDRAM.
     97  1.5.6.2  yamt 
     98  1.5.6.2  yamt You will have to configure a TFTP server on a machine hooked up to the same
     99  1.5.6.2  yamt Ethernet segment as the Slug. This machine's Ethernet interface must also
    100  1.5.6.2  yamt be configured to have an address in the 192.168.0.0/24 subnet since the
    101  1.5.6.2  yamt Slug's Ethernet *always* defaults to 192.168.0.1 when running RedBoot.
    102  1.5.6.2  yamt There seems to be no way to alter this, so the best course of action will
    103  1.5.6.2  yamt probably be to set up an alias on the server's interface. 192.168.0.2 is
    104  1.5.6.2  yamt a good choice.
    105  1.5.6.2  yamt 
    106  1.5.6.2  yamt Assuming you've done all that and have dropped a suitable kernel image
    107  1.5.6.2  yamt into the TFTP directory, the following commands will load and run the
    108  1.5.6.2  yamt kernel.
    109  1.5.6.2  yamt 
    110  1.5.6.2  yamt redboot> ip_address -h 192.168.0.2
    111  1.5.6.2  yamt redboot> load -r -b 0x200000 netbsd.bin
    112  1.5.6.2  yamt redboot> go
    113  1.5.6.2  yamt 
    114  1.5.6.3  yamt At this point you should mount a root filesystem from a USB disk device.
    115  1.5.6.3  yamt The ethernet is now supported, so you may also be able to use a NFS root.
    116  1.5.6.3  yamt USB Ethernet devices can also be used for a NFS root.
    117  1.5.6.2  yamt 
    118  1.5.6.2  yamt Note that the kernel will always report the CPU core clock speed as 266MHz
    119  1.5.6.2  yamt even if your Slug's CPU clock is running at a stock 133MHz.
    120  1.5.6.2  yamt 
    121  1.5.6.2  yamt 
    122  1.5.6.2  yamt Burning a NetBSD kernel into Flash
    123  1.5.6.2  yamt ==================================
    124  1.5.6.2  yamt 
    125  1.5.6.2  yamt TBD (waiting for gzboot support).
    126  1.5.6.2  yamt 
    127