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