This manual page collects the incantations required to bootstrap
Plan 9 machines. Some of the information here is specific to the
installation at Bell Labs; some is generic.
If a CPU server is up, BOOTP/DHCP and TFTP will run from there;
if not, the necessary files and services must be available on
a separate machine, such as a Unix system, to use these protocols
Be sure to read boot(8) to understand what happens after the kernel
To bootstrap a diskless terminal or a CPU server, a file server
must be running. PCs can boot from a floppy disk or any FAT16
or FAT24 partition. On all the terminals, typing two control–T's
followed by a lower–case r reboots the machine; other methods of
rebooting are mentioned for some machines.
Once the kernel is booted, it behaves like the others. See boot(8)
To boot a PC, it is necessary to get /386/iplfat, iso, pxe or
/386/9load loaded into memory. There are many ways to do this.
A Plan 9 boot floppy prepared by format (see prep(8)) will load
iplfat when the PC is reset or powered on. Other methods are described
in pcipl(8) or 9load(8) then locates and loads
a Plan 9 kernel, using configuration information from the matching
file in /cfg/pxe or the file plan9.ini stored in the 9fat configuration
partition or on a DOS file system. See 9load(8) for details.
You must configure the SRM firmware to load the file /alpha/bootalphapc.
The following commands may be used (replace ewa0 with the name
of your ethernet device, if different):
Alpha PCs must be booted via TFTP using the SRM console. If the
system has ARC firmware instead, SRM may be downloaded from
This secondary bootstrap program will first load the file /alpha/conf/<IP–address>
(substituting the IP address of the system as obtained via bootp).
This file is expected to be in plan9.ini(8) format (the file /alpha/conf/10.0.0.2
may be used as a template). It then loads the kernel via tftp,
using the value
of bootfile to tell it which file to load; this should be /alpha/9apc
set boot_reset ON|
set boot_file /alpha/bootalphapc
set bootdef_dev ewa0
set ewa0_inet_init bootp
set ewa0_protocols BOOTP
The Plan 9 CPU servers are multi–user, so they do not request a
user name when booting. On the CPU servers, typing a control–P
on the console reboots the machine.
PC CPU Server
Proceed as for the PC terminal, but load /386/9pcpae or /amd64/9cpu.
Alpha PC CPU Server
Proceed as for the Alpha PC terminal, but use /alpha/9apccpu as
the value of bootfile.
SGI Challenge multiprocessor CPU Server
or use the ROM command setenv to set the variable bootfile to
that same string and type boot. To load a different file, tell
bootp which file to load, and to force the download to come from
a particular system, bootp()system:file. Any arguments after bootp()file
are passed to /boot. If you are
running a Plan 9 BOOTP server (see dhcpd(8)), the file name can
be omitted and the file specified by the bootf parameter for the
machine in /lib/ndb will be downloaded by default.
Once the kernel is loaded, it prompts for the Ethernet protocol
to use to reach the root file server; request the default.
The Challenge ROM monitor can boot from the Ethernet. To boot
from the Ethernet, type
MIPS Routerboard CPU Server
Configure RouterBOOT via the serial port (115200 baud) to always
boot from Ethernet, and arrange to load the ELF executable /mips/9rb
In the following, replace MAC with your board's MAC address without
colons, in lower case (the format of the ether ndb attribute).
If loading from a non–Plan–9 TFTP server, replace %C with /cfg/pxe/MAC.
First, establish a /cfg/pxe (plan9.ini) file for the new CPU server.
For Kirkwood plugs,
All ARM systems are started by U–boot using similar commands. The
kernels (and thus ndb bootf parameters) are
/arm/9gd for the Marvell PXA168–based Guruplug Display
/arm/9plug for other Marvell Kirkwoods (Sheevaplug, Guruplug, Dreamplug,
/arm/9beaglefor TI OMAP3 boards (IGEPv2 from ISEE, Gumstix Overo)
/arm/9ts for Trimslice systems, which contain the Nvidia Tegra
/arm/9picpu for Raspberry Pis
and edit /cfg/pxe/MAC to taste. For PXA plugs, replace kw with
pxa; for OMAP boards, replace kw with omap and be sure to edit
the line for ether0 to set
cd /cfg/pxe; cp example–kw MAC|
Second, configure U–boot to load the appropriate kernel and /cfg/pxe
file at suitable addresses and start the kernel. For Sheevaplugs
and Openrd boards, type this at U–boot once:
For Guruplugs Displays, do the same but type this after setenv
setenv bootdelay 2|
# type the next two lines as one
setenv bootcmd 'bootp; bootp; tftp 0x1000 %C; bootp; tftp 0x800000;
For Kirkwood Guruplugs, type this after setenv bootcmd:
'dhcp; tftpboot; tftpboot 0x1000 %C; bootz 0x500000'|
For IGEPv2 boards, type this after setenv bootcmd:
'dhcp 0x800000; tftp 0x1000 %C; go 0x800000'|
For Gumstix Overo boards, type this after setenv bootcmd:
'tftp 0x80300000 %C; dhcp 0x80310000; go 0x80310000'|
For Trimslice systems, type this after setenv bootcmd:
'bootp 0x80310000; bootp 0x80300000 %C; go 0x80310000'|
For Raspberry Pis (if using U–boot, which is not the default),
type this after setenv bootcmd:
'dhcp; dhcp; tftpboot 0x410000; tftpboot 0x400000 %C; go 0x410000'|
Thereafter, the boards will automatically boot via BOOTP and TFTP
'usb start; dhcp; tftp 100 %C; go 8000'|
The CPU servers and terminals run essentially the same program,
but the Plan 9 file servers run a distinct system. The file servers
accept only the commands described in fs(8) on their consoles.
PC File Server
Boot the PC file server like a regular PC, loading the appropriate
file system kernel.