FreeBSD/arm for Linksys NSLU2 (aka the slug)
This procedure has been tested on a FreeBSD HEAD system. Please note: This is not quite true yet... Some patches are needed that aren't listed here or are in the tree yet... This page is here for people helping me...
Build world
make TARGET=arm TARGET_CPUTYPE=xscale TARGET_BIG_ENDIAN=true buildworld
Setup an NFS root
ROOT=/data/freebsd/roots/gateworks TARGET=arm TARGET_CPU_TYPE=xscale TARET_BIG_ENDIAN=t make DESTDIR=$ROOT installworld make DESTDIR=$ROOT distrib-dirs make DESTDIR=$ROOT distribution echo "hostname=slug" > $ROOT/etc/rc.conf echo "ifconfig_DEFAULT=DHCP" >> $ROOT/etc/rc.conf echo "10.0.x.x:/roots/slug / nfs rw 0 0" > $ROOT/etc/fstab
Note: mergemaster will fail if used to install HEAD on a RELENG_6 system unless /usr/share/mk on the host system has been updated w/ changes to the build infrastructure.
Configure the NFS root for diskless use
Consult diskless(8).
Build and install a kernel
make TARGET=arm KERNCONF=AVILA buildkernel make TARGET=arm KERNCONF=AVILA DESTDIR=$ROOT installkernel
Note: the AVILA kernel is configured with the root filesystem mounted via NFS over the npe0 wired interface. You should now have an NFS-mountable root filesystem with a kernel. The final step is to setup network diskless booting from the board. It is assumed you have a DHCP server operating on your network and the server is configured to supply the necessary information in the DHCP lease. If you run the ISC DHCP server the following configuration information is an example of how to do this:
option root-opts code 130 = string; # NFS / mount options host slug1 { hardware ethernet 00:d0:12:02:47:68; fixed-address 10.0.0.y; next-server 10.0.0.x; filename "kernel-slug.nfs"; option root-path "10.0.0.x:/data/freebsd/roots/gateworks"; option root-opts "nolockd"; }
Note: the root-opts item specifies the root filesystem should be mounted with the nolocked option; this just short-circuits file locking requests so you don't get complaints from programs that use the pidfile(3) routine (e.g. devd).
Move Kernel to TFTP area
Place the kernel in the TFTP area for booting from the prom monitor. If your TFTP server returns file from /tftpboot (default) then do something like:
cp $ROOT/boot/kernel/kernel /tftpboot/kernel-slug.nfs
Boot the kernel from redboot
Boot the kernel from redboot:
RedBoot> ip -h 10.0.0.x -l 10.0.0.y IP: 10.0.0.y/255.255.255.0 Gateway: 0.0.0.0 Default server: 10.0.0.x RedBoot> load -b 0x200000 kernel-slug.nfs Using default protocol (TFTP) Address offset = 0x40000000 Entry point: 0x00200100, address range: 0x00200000-0x004db2d4 RedBoot> go