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