NAME
booting – bootstrapping procedures

SYNOPSIS
none

DESCRIPTION
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 for bootstrapping.

Be sure to read boot(8) to understand what happens after the kernel is loaded.

Terminals
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 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.

PCs (386 and amd64)
To boot a PC, it may be necessary to get /386/9boot 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 9load when the PC is reset or powered on. Other methods are described in 9boot(8). 9boot or 9load then locates and loads a Plan 9 kernel, using configuration information from the matching file in /cfg/pxe (9boot) or the file plan9.ini stored in the 9fat configuration partition or on a DOS file system (9load). See 9boot(8) for details.

Alternatively, name bootf=/386/9pclz or bootf=/amd64/9k10cpulz in the system's ndb entry and it will be loaded directly by PXE, and will decompress itself. This also works for amd64 kernels; see the kernel mkfiles.

Once the kernel is booted, it behaves like the others. See boot(8) for details.

CPU Servers
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/9pccpu, /386/9pccpulz, /386/9pccpudisk, /amd64/9k10cpu, /amd64/9k10cpulz, or /amd64/9k10cpudisk.

PC File Server
Proceed as for the PC terminal, but load /386/9pcfs, /386/9pcfslz, /amd64/9k10fs, or /amd64/9k10fslz.

MIPS Routerboard CPU Server
Configure RouterBOOT via the serial port (115200 baud) to always boot from Ethernet via DHCP and TFTP, and arrange to load the ELF executable /mips/9rb in ndb(6).

ARM Systems
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, Openrd, etc.)
/arm/9beaglefor TI OMAP3 boards (IGEPv2 from ISEE, Gumstix Overo)
/arm/9ts      for Trimslice systems, which contain the Nvidia Tegra 2
/arm/9pi
/arm/9picpu   
for Raspberry Pis

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,
cd /cfg/pxe; cp example–kw MAC

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
ea=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:
setenv bootdelay 2
#
type the next two lines as one
setenv bootcmd 'bootp; bootp; tftp 0x1000 %C; bootp; tftp 0x800000;
go 0x800000'
saveenv

For Guruplugs Displays, do the same but type this after setenv bootcmd instead:
'dhcp; tftpboot; tftpboot 0x1000 %C; bootz 0x500000'

For Kirkwood Guruplugs, type this after setenv bootcmd:
'dhcp 0x800000; tftp 0x1000 %C; go 0x800000'

For IGEPv2 boards, type this after setenv bootcmd:
'tftp 0x80300000 %C; dhcp 0x80310000; go 0x80310000'

For Gumstix Overo boards, type this after setenv bootcmd:
'bootp 0x80310000; bootp 0x80300000 %C; go 0x80310000'

For Trimslice systems, type this after setenv bootcmd:
'dhcp; dhcp; tftpboot 0x420000; tftpboot 0x410000 %C; go 0x420000'

For Raspberry Pis, gunzip the pi.uboot.sd.img.gz named below onto an SD card and insert that into your Pi.

Thereafter, the boards will automatically boot via BOOTP and TFTP when reset.

RISC–V systems

These boot with U–boot, per the ARM systems above.

For Microchip Polarfire Icicles and Beagle Vs, the bootcmd is:
'dhcp 0x90000000; bootm 0x90000000 – ${fdtcontroladdr}'

U–boot on the Icicle lacks the saveenv command, so this has to be typed manually at each boot. The ndb bootf file should be /riscv64/9pfcpu.uim or /riscv64/9bvcpu.uim, which are generated by the kernel mkfile.

An alternative on Beagle V is:
'tftpboot 0x80020000; go 0x80020000'

assuming a bootf file of /riscv64/9bvcpu.bin.

The Starfive VisionFive 2 is similar, with this bootcmd:
'dhcp 0x40200000; go 0x40200000'

and bootf file of /riscv64/9vfcpu.bin.

Booting the Hifive Unmatched is complicated and unpleasant and is not yet described here.

FILES
/rc/bin/loadcfgpxe is run by cpurc(8) if the kernel was loaded directly by PXE.

/arm/pi.sd/uboot.sd.img.gz is a compressed bootable SD card image for Raspberry Pi for PXE booting.

SOURCE
/sys/src/boot
/sys/src/9/pcboot
/sys/src/9/pcexp

SEE ALSO
ndb(6), 9boot(8), boot(8), init(8), plan9.ini(8)
Copyright © 2024 Plan 9 Foundation