Directions for how to do this are listed in the Configuring a standalone CPU server section of this wiki.
You may already have one of these running, but I've found that in some cases, when trying to compile for ARM, certain packages may be installed that do not work very well. They have to be added to the BUGGERED list in /sys/src/cmd/mkfile.
Example:
BUGGERED=unix|postscript|upas
Note that upas is not malfunctioning, nor is it true to say that it would not compile on my system. I just did not have upas privileges and could not complete the upas installation. Since I was not concerned with email, I skipped it by placing it on the BUGGERED list.
It is possible to turn off permissions checking or the user you're logged in as to the upas group if needed, but that's beyond the scope of this wiki page.
Follow Geoff's directions from the 9fans posting here: sheevaplug port available
A slight modification of those instructions is below:
cd /sys/src/cmd for(i in ?c ?a ?l) { if(! ~ $i cc rc) @{ cd $i mk clean objtype=$cputype mk install mk clean } }
cd /sys/src objtype=arm mk install
If you fail to install something in this step you can try to add names to the BUGGERED list as above and retry the mk install.
Part of setting up a CPU server is setting up the nvram of your machine. You should have an "nvram" partition on your boot disk if you followed the standard wiki CPU setup instructions.
Copy this file into /sys/src/9/kw
dd -if /dev/sdC0/nvram -of /sys/src/9/kw/nvram
Now when you compile your kernel, you'll have a valid nvram file.
cd /sys/src/9/kw mk 'CONF=plug' install
After this step you now have all the pieces you need to run Plan 9 on an ARM system.
In /lib/ndb/local you'll need an entry like the following
ip=192.168.1.77 sys=bunnyplug dom=bunnyplug.homework.net bootf=/arm/9plug gw=192.168.1.1 dns=192.168.1.1 fs=<YOUR-FS-SERVER> auth=<YOUR-AUTH-SERVER>
I'm using a vmware plan 9 CPU AUTH and FS server so I just use the same IP address for the fs and auth items.
PXE needs to be configured as well. In /cfg/pxe you should see a file "example-kw". You may copy this to /cfg/pxe/<your-guruplug-mac-address>
This same filename will be specified as a parameter in the u-boot loader of your guruplug.
NOTE: this step will make fossil listen on port 564 without encryption!
fossil/conf /dev/sdC0/fossil > flproto cat >> flproto << EOF listen tcp!*!564 EOF fossil/conf -w /dev/sdC0/fossil flproto
The booting(8) manpage has instructions for the Marvell Kirkwood CPU Server kernel.
I recommend that you backup your Guruplug's default bootcmd environment variable parameters before setting these, or just skipping the saveenv step that overwrites the defaults.
In case you clobberred your u-boot settings, I'm listing my defaults in case they would work for you to get back into Linux
bootcmd=${x_bootcmd_ethernet}; ${x_bootcmd_usb}; ${x_bootcmd_kernel}; setenv bootargs ${x_bootargs} ${x_bootargs_root}; bootm 0x6400000;
I don't want to commit my only Guruplug to Plan 9 just yet so I just enter the following manually (cut and paste) each time I want to boot Plan 9.
setenv bootcmd 'dhcp 0x800000; tftp 0x1000 /cfg/pxe/<MAC>; go 0x800000' boot
Thanks to the Geoff Collyer, the folks behind Inferno-kirkwood, David du Colombier, and Skip Tavakkolian for their excellent work and notes on getting this platform documented.