README revision 1.5.6.2 1 1.5.6.2 yamt $NetBSD: README,v 1.5.6.2 2006/06/21 14:50:54 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 - NPE Ethernet
35 1.5.6.2 yamt Someone will have to port Intel's IXP425 access library before this can
36 1.5.6.2 yamt be made to work. If that someone is you, the source code is available
37 1.5.6.2 yamt online here:
38 1.5.6.2 yamt
39 1.5.6.2 yamt http://www.intel.com/design/network/products/npfamily/ixp425.htm
40 1.5.6.2 yamt
41 1.5.6.2 yamt Look under "Tools & Software", then select "Intel(R) IPXX400 Software"
42 1.5.6.2 yamt to downlod the documentation. If you aren't registered, select
43 1.5.6.2 yamt "Register/Login" first. Documentation is available in the
44 1.5.6.2 yamt "Technical Documents" section.
45 1.5.6.2 yamt
46 1.5.6.2 yamt The easiest option will be to download the non-crypto version of the
47 1.5.6.2 yamt Access Library. The crypto-enabled version requires a lot more form
48 1.5.6.2 yamt filling. The Slug's IXP420 has no crypto capabilities anyway.
49 1.5.6.2 yamt
50 1.5.6.2 yamt - Flash ROM
51 1.5.6.2 yamt You can write gzboot kernels (when support is added) to Flash using
52 1.5.6.2 yamt RedBoot, so all is not lost.
53 1.5.6.2 yamt
54 1.5.6.2 yamt - Buzzer
55 1.5.6.2 yamt In the absence of a decent API to expose the onboard buzzer to userland,
56 1.5.6.2 yamt this is not yet supported. I envisage using timer1 to generate an
57 1.5.6.2 yamt interrupt at the required rate (1-2 kHz). The handler will toggle the
58 1.5.6.2 yamt buzzer GPIO pin. Obviously timer1 will be configured only when necessary
59 1.5.6.2 yamt as a 1-2 kHz interrupt rate will sap a fair bit of CPU horsepower.
60 1.5.6.2 yamt
61 1.5.6.2 yamt Everything else is fully supported, including the power/reset buttons and
62 1.5.6.2 yamt disk activity/status LEDs.
63 1.5.6.2 yamt
64 1.5.6.2 yamt Non-hardware items on the TODO list include:
65 1.5.6.2 yamt
66 1.5.6.2 yamt - gzboot support.
67 1.5.6.2 yamt The Slug's 8MB of Flash is split into 5 segments:
68 1.5.6.2 yamt
69 1.5.6.2 yamt 1 0x50000000-0x5003ffff: RedBoot (with some additional bits at the end).
70 1.5.6.2 yamt 2 0x50040000-0x5005ffff: Sysconf (used by the Linksys firmware).
71 1.5.6.2 yamt 3 0x50060000-0x5015ffff: Self-extracting compressed kernel image.
72 1.5.6.2 yamt 4 0x50160000-0x507dffff: Compressed ramdisk image.
73 1.5.6.2 yamt 5 0x507e0000-0x507fffff: SerComm Flash trailer.
74 1.5.6.2 yamt
75 1.5.6.2 yamt Segments 1, 2, and 5 should be considered immutable. Segments 3 and 4
76 1.5.6.2 yamt have a 16-byte header, the first 4 bytes of which describe the length
77 1.5.6.2 yamt of the image contained in that segment (not including the header).
78 1.5.6.2 yamt
79 1.5.6.2 yamt On power-up, RedBoot copies the image in segment 3 into SDRAM at 0x01d00000,
80 1.5.6.2 yamt and the image in segment 4 into SDRAM at 0x01000000. RedBoot then jumps to
81 1.5.6.2 yamt 0x01d00000. This is just a regular ARM Linux compressed kernel bootloader.
82 1.5.6.2 yamt
83 1.5.6.2 yamt So, we need to create a version of gzboot linked not at Flash address
84 1.5.6.2 yamt 0x50060000, but at 0x01d00000 instead. The only downside is that it looks
85 1.5.6.2 yamt like the combined size of gzboot plus compressed kernel cannot exceed 1MB.
86 1.5.6.2 yamt
87 1.5.6.2 yamt To support an md(4) root filesystem, we will need to modify gzboot to
88 1.5.6.2 yamt decompress the ramdisk image from segment 4 and copy it to the correct
89 1.5.6.2 yamt place in the decompressed kernel image.
90 1.5.6.2 yamt
91 1.5.6.2 yamt - Move the kernel link address closer to the start of SDRAM. We waste a
92 1.5.6.2 yamt little under 2MB with the current setup.
93 1.5.6.2 yamt
94 1.5.6.2 yamt
95 1.5.6.2 yamt
96 1.5.6.2 yamt Getting NetBSD onto the NSLU2
97 1.5.6.2 yamt =============================
98 1.5.6.2 yamt
99 1.5.6.2 yamt Thanks to the efforts of the guys over at www.nslu2-linux.org, hacking the
100 1.5.6.2 yamt Slug is a pretty easy proposition, but some soldering skills are essential.
101 1.5.6.2 yamt For a first-time install of NetBSD (at least until someone comes up with a
102 1.5.6.2 yamt nice easy binary install image) you will almost certainly require access to
103 1.5.6.2 yamt the serial console. This means firing up your trusty soldering iron and
104 1.5.6.2 yamt hooking up a MAX3232 chip to your Slug. While your soldering iron is hot,
105 1.5.6.2 yamt you should seriously consider de-restricting your Slug's CPU core clock
106 1.5.6.2 yamt speed (133MHz stock, 266MHz de-restricted) by removing a single surface-
107 1.5.6.2 yamt mount resistor. Full instructions for both the these mods are on the above
108 1.5.6.2 yamt website.
109 1.5.6.2 yamt
110 1.5.6.2 yamt Once you have console access you can interrupt RedBoot's auto-boot process
111 1.5.6.2 yamt using CTRL-C. You are now in a position to download a NetBSD kernel into
112 1.5.6.2 yamt SDRAM.
113 1.5.6.2 yamt
114 1.5.6.2 yamt You will have to configure a TFTP server on a machine hooked up to the same
115 1.5.6.2 yamt Ethernet segment as the Slug. This machine's Ethernet interface must also
116 1.5.6.2 yamt be configured to have an address in the 192.168.0.0/24 subnet since the
117 1.5.6.2 yamt Slug's Ethernet *always* defaults to 192.168.0.1 when running RedBoot.
118 1.5.6.2 yamt There seems to be no way to alter this, so the best course of action will
119 1.5.6.2 yamt probably be to set up an alias on the server's interface. 192.168.0.2 is
120 1.5.6.2 yamt a good choice.
121 1.5.6.2 yamt
122 1.5.6.2 yamt Assuming you've done all that and have dropped a suitable kernel image
123 1.5.6.2 yamt into the TFTP directory, the following commands will load and run the
124 1.5.6.2 yamt kernel.
125 1.5.6.2 yamt
126 1.5.6.2 yamt redboot> ip_address -h 192.168.0.2
127 1.5.6.2 yamt redboot> load -r -b 0x200000 netbsd.bin
128 1.5.6.2 yamt redboot> go
129 1.5.6.2 yamt
130 1.5.6.2 yamt At this point your only real option is to mount the root filesystem from
131 1.5.6.2 yamt a USB disk device as the onboard Ethernet is not (yet?) supported. However,
132 1.5.6.2 yamt there's nothing to stop you using a USB-Ethernet interface...
133 1.5.6.2 yamt
134 1.5.6.2 yamt Note that the kernel will always report the CPU core clock speed as 266MHz
135 1.5.6.2 yamt even if your Slug's CPU clock is running at a stock 133MHz.
136 1.5.6.2 yamt
137 1.5.6.2 yamt
138 1.5.6.2 yamt
139 1.5.6.2 yamt Burning a NetBSD kernel into Flash
140 1.5.6.2 yamt ==================================
141 1.5.6.2 yamt
142 1.5.6.2 yamt TBD (waiting for gzboot support).
143 1.5.6.2 yamt
144