Though there doesn't seem to be a huge demand for this, I thought I'd put the steps into one location to make it easier for someone else to follow. The instructions below are for a Debian Linux (i386) OS build system, but should be pretty adaptable to most other *nix systems. The original source for this material is the documentation that comes with NetBSD as well as advice given by several of the kind people at the NetBSD/arm mailing list ( http://www.netbsd.org/mailinglists/#port-arm ). Incidentally, my hat's off to the people who brought us build.sh. That is one slick script.
You will need a serial port connection to your NSLU2; see http://www.nslu2-linux.org/wiki/HowTo/AddASerialPortfor more details. You'll also need to setup a tftp server to load the NSLU2 kernel from. You'll end up with a USB drive that contains the NetBSD operating system, though you will continue to need tftp to boot the kernel. Finally, I used an NFS server so that the install kernel could find the binary files that make up the base system. Conceivably, you can put these on the same USB drive that you'll use later to install NetBSD on, but I've had problems with that. The binary system files that are on the NetBSD ftp site are built for little-endian processors and won't work for the NSLU2.
Get the source code (current): $ mkdir ~/net $ export CVS_RSH=ssh $ export CVSROOT=:ext:anoncvs%anoncvs.NetBSD.org@localhost:/cvsroot $ cd ~/net $ cvs checkout -A -P srcThis will create a directory ~/net/src with the source tree in it. Build the tools before you do anything else, since building the tools will overwrite some of the files you need to modify later.
$ cd ~/net/src $ ./build.sh -m evbarm -a armeb toolsYou need to get the Intel proprietary firmware for the NSLU2 ethernet controller. Follow the instructions at this location:
~/net/src/sys/arch/arm/xscale/ixp425-fw.README.After building the firmware as described in the readme file, copy the file “IxNPEMicrocode.dat” to the directory ~/net/src/sys/arch/arm/xscale (the same directory as the README).
Next, you need to create/edit four files so you can build both the install version and normal version of the netbsd.bin file that gets loaded into the NSLU2 RAM by the Redboot program from your tftp server.
$ cd ~/net/src/sys/arch/evbarm/conf $ cp ADI_BRH_INSTALL NSLU2_INSTALL $ nano NSLU2_INSTALL (use whatever editor you are most comfortable with) Change the line that reads include "arch/evbarm/conf/ADI_BRH" to include "arch/evbarm/conf/NSLU2".Feel free to change the first and third lines to accurately reflect what the file does as well. Now, add an option to the NSLU2 configuration file.
$ cp NSLU2 NSLU2.orig
$ nano NSLU2
Change the line that reads
#options FFS_EI # FFS Endian Independant support
to
options FFS_EI # FFS Endian Independant support.
Next, add NSLU2_INSTALL to the compile targets:
$ cd ~/net/src/distrib/evbarm/instkernel/instkernel
$ cp Makefile Makefile.orig
$ nano Makefile
Change the line
MDSETTARGETS= ADI_BRH_INSTALL ${RAMDISK} -
to
MDSETTARGETS= ADI_BRH_INSTALL ${RAMDISK} - /
NSLU2_INSTALL ${RAMDISK} -
Finally,
$ cd ~/net/src/etc/etc.evbarm
$ cp Makefile.inc Makefile.inc.orig
$ nano Makefile.inc
Change the line
EVBARM_BOARDS= ADI_BRH
to
EVBARM_BOARDS= ADI_BRH NSLU2
Now for the slow part, building NetBSD itself. This is covered in
chapter 30 of the NetBSD guide,
http://www.netbsd.org/docs/guide/en/index.html . $ cd ~/net/src $ ./build.sh -u -m evbarm -a armeb kernel=NSLU2 $ ./build.sh -u -U -m evbarm -a armeb build $ ./build.sh -u -U -m evbarm -a armeb releaseWhen this is finished, you'll find a number of zipped files under ~/net/src/obj/releasedir/evbarm that you'll need. First, unzip the install binary and normal binaries and put them on the tftp server directory (I'll assume it is /tftpboot).
$ cd ~/net/src/obj/releasedir/evbarm/installation/instkernel $ gunzip netbsd-NSLU2_INSTALL.bin.gz $ cp netbsd-NSLU2_INSTALL.bin /tftpboot $ cd ~/net/src/obj/releasedir/evbarm/binary/sets $ tar -xvzpf kern-NSLU2.tgz $ cp netbsd.bin /tftpbootAlso in this directory are eight zipped files that the installation kernel will need to install NetBSD to the USB drive. I put them on an NFS drive.
Now for the fun stuff. Turn on the NSLU2 and hit <control-C> when you see the following:
RedBoot(tm) bootstrap and debug environment [ROMRAM] Red Hat certified release, version 1.92 - built 15:16:07, Feb 3 2004 Platform: IXDP425 Development Platform (XScale) Copyright (C) 2000, 2001, 2002, Red Hat, Inc. RAM: 0x00000000-0x02000000, 0x000723a0-0x01ff3000 available FLASH: 0x50000000 - 0x50800000, 64 blocks of 0x00020000 bytes each. == Executing boot script in 2.000 seconds - enter ^C to abortSet up the host address to tell RedBoot where to find the tftp server. Then tell RedBoot what file to get and where to put it, and finally, to execute it. Note that the NSLU2's default IP address is 192.168.0.1, so your tftp server needs to be on the same subnet. I use 192.168.0.2.
RedBoot> ip_address -h 192.168.0.2 IP: 192.168.0.1/255.255.255.0, Gateway: 192.168.0.1 Default server: 192.168.0.2, DNS server IP: 0.0.0.0 RedBoot> load -r -b 0x200000 netbsd-NSLU2_INSTALL.bin Using default protocol (TFTP) Raw file loaded 0x00200000-0x007ab94f, assumed entry at 0x00200000 RedBoot> g At this point, what you should see is: Loaded initial symtab at 0xc043a6c8, strtab at 0xc04607f4, # entries 9084 pmap_postinit: Allocated 9 static L1 descriptor tables Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The NetBSD Foundation, Inc. All rights reserved. Copyright (c) 1982, 1986, 1989, 1991, 1993 The Regents of the University of California. All rights reserved. NetBSD 4.99.50 (NSLU2_INSTALL) #1: Sat Jan 26 06:00:00 EST 2008 hayford@debian:/home/hayford/net/src/sys/arch/evbarm/compile/obj/NSLU2_INSTALL total memory = 32768 KB avail memory = 24056 KB mainbus0 (root) cpu0 at mainbus0: IXP425 266MHz rev 1 (XScale core) cpu0: DC enabled IC enabled WB enabled LABT branch prediction enabled cpu0: 32KB/32B 32-way Instruction cache cpu0: 32KB/32B 32-way write-back-locking Data cache ixpsip0 at mainbus0 com0 at ixpsip0 addr 0xc8000000-0xc8000fff: ns16550a, working fifo com0: console ixp425_intr_establish(irq=15, ipl=3, func=c027ce14, arg=c10ab200) ixpclk0 at ixpsip0 addr 0xc8005000-0xc800502f ixpclk0: IXP425 Interval Timer ixpdog0 at ixpsip0: Watchdog Timer slugiic0 at ixpsip0: I2C bus slugbutt0 at ixpsip0: Power and Reset buttons slugled0 at ixpsip0: LED support ixpio0 at mainbus0 ixpio0: configuring PCI bus pci0 at ixpio0 bus 0 ohci0 at pci0 dev 1 function 0: vendor 0x1033 product 0x0035 (rev. 0x43) ixp425_intr_establish(irq=28, ipl=1, func=c02840e8, arg=c1105000) ohci0: interrupting at INTA ohci0: OHCI version 1.0 usb0 at ohci0: USB revision 1.0 uhub0 at usb0 uhub0: vendor 0x1033 OHCI root hub, class 9/0, rev 1.00/1.00, addr 1 ohci1 at pci0 dev 1 function 1: vendor 0x1033 product 0x0035 (rev. 0x43) ixp425_intr_establish(irq=27, ipl=1, func=c02840e8, arg=c1108000) ohci1: interrupting at INTB ohci1: OHCI version 1.0 usb1 at ohci1: USB revision 1.0 uhub1 at usb1 uhub1: vendor 0x1033 OHCI root hub, class 9/0, rev 1.00/1.00, addr 1 ehci0 at pci0 dev 1 function 2: vendor 0x1033 product 0x00e0 (rev. 0x04) ixp425_intr_establish(irq=26, ipl=1, func=c0284f5c, arg=c110a800) ehci0: interrupting at INTC ehci0: companion controllers, 3 ports each: ohci0 ohci1 usb2 at ehci0: USB revision 2.0 uhub2 at usb2 uhub2: vendor 0x1033 EHCI root hub, class 9/0, rev 2.00/1.00, addr 1 ixme0 at mainbus0: IXP4xx MicroEngine Support ixp425_intr_establish(irq=3, ipl=1, func=c03d5264, arg=c1103000) ixp425_intr_establish(irq=4, ipl=1, func=c03d5264, arg=c1103000) ixpnpe0 at ixme0 NPE-B ixp425_intr_establish(irq=1, ipl=1, func=c03d6fc4, arg=c1102000) npe0 at ixpnpe0: Ethernet co-processor npe0: remember to fix rx q setup npe0: Ethernet address 00:18:39:a2:26:7c rlphy0 at npe0 phy 1: RTL8201L 10/100 media interface, rev. 1 rlphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto clock: hz=100 stathz=0 profhz=0 ixp425_intr_establish(irq=5, ipl=2, func=c03d44a8, arg=00000000) iic0 at slugiic0: I2C bus xrtc0 at iic0 addr 0x6f: Xicor X1226 Real-time Clock/NVRAM ixp425_intr_establish(irq=22, ipl=1, func=c03d9f2c, arg=c10b4000) ixp425_intr_establish(irq=29, ipl=1, func=c03d9ec0, arg=c10b4000) ixp425_intr_establish(irq=28, ipl=1, func=c03da2cc, arg=c1102f00) ixp425_intr_establish(irq=27, ipl=1, func=c03da220, arg=c1102f00) Welcome to sysinst, the NetBSD-4.99.50 system installation tool. This menu-driven tool is designed to help you install NetBSD to a hard disk, or upgrade an existing NetBSD system, with a minimum of work. In the following menus type the reference letter (a, b, c, ...) to select an item, or type CTRL+N/CTRL+P to select the next/previous item. The arrow keys and Page-up/Page-down may also work. Activate the current selection from the menu by typing the enter key. lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x>a: Installation messages in English x x b: Komunikaty instalacyjne w jezyku polskim x x c: Messages d'installation en fran�ais x x d: Installation auf Deutsch x x e: Mensajes de instalaci�n en castellano x mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqjAt this point, you can follow the installation instructions to install NetBSD onto a USB. The installation program will need to have access to the base.tgz, comp.tgz, etc. files that are located in ~/net/src/obj/releasedir/evbarm/binary/sets. As I wrote above, I used a NFS server for that.
Once NetBSD is installed on the USB disk, reboot the system and go through the tftp process again, except this time, use the netbsd.bin file that you put on the tftp server.
Good luck. As always, comments are welcome. Thanks, Don