NAME
|
boot – connect to the root file server |
SYNOPSIS
|
/boot/boot [ –fkm ] [ –uusername ] [ method!fs–addr ] [ args ] |
DESCRIPTION
|
Boot is the first program run after a kernel has been loaded.
It connects to the file server that will serve the root, performs
any authentication needed to connect to that server, and exec(2)'s
the init(8) program. It is started by the kernel, never run directly
by the user. See booting(8) for information about the process
of
loading the kernel (and boot) into memory. Once loaded, the kernel initializes its data structures and devices. It sets the two environment variables /env/cputype and /env/terminal to describe the processor. It then binds a place–holder file server, root(3), onto / and crafts an initial process whose sole function is to exec(2) /boot/boot, a binary which is compiled into root(3). The command line passed depends on the information passed from boot ROM to kernel. Machines that boot directly from ROM (that is, most machines other than PCs) pass the boot line given to the ROM directly to boot.
On the PC, each line in the DOS file plan9.ini of the form name=value
is passed to the boot program as an environment variable with
the same name and value. The command line is
Boot must also set a user name to be used as the owner of devices and all console processes and an encryption key to be used when challenged. Boot will prompt for these.
Method and address are prompted for first. The prompt lists all
valid methods, with the default in brackets, for example:
The other interactions depend on whether the system is a terminal
or a CPU server. Terminal
The terminal must have a username to set. If none is specified
with the –u option, boot will prompt for one on the console:
When the user types a control–D, boot stops simulating a terminal and starts the file system protocol over the serial line. Once connected, boot mounts the root file system before / and makes the connection available as #s/boot for subsequent processes to mount (see bind(2)). Boot completes by exec(2)'ing /$objtype/init –t. If the –m option is given it is also passed as an option to init. If the environment variable init is set (via plan9.ini(8)), it is used as a command line to exec instead.
If the kernel has been built with the cache file system, cfs(4),
the local disk partition /dev/sdXX/cache (where XX is a unit specifier)
exists, and the root file system is from a remote server, then
the kernel will insert a user level cache process between the
remote server and the local namespace that caches all remote
accesses on the local partition. The –f flag commands cfs to reformat
the cache partition. CPU Servers
The user owning devices and console processes on CPU servers and
that user's domain and encryption key are read from NVRAM on all
machines except PC's. PC's keep the information in the disk partition
/dev/sdXX/nvram. If a –k option is given or if no stored information
is found boot will prompt for all three
items and store them.
Once connected, boot behaves as on the terminal except for exec(2)'ing
/$objtype/init –c. Booting Methods
The methods available to any system depend on what was compiled
into the kernel. The complete list of booting methods are listed
below.
For the tcp method, the address must be a numeric IP address.
If no address is specified, a file server address will be found
from another system on the network using the BOOTP protocol and
the Plan 9 vendor–specific fields. |
EXAMPLES
|
On PCs, the default arguments to boot are constructed using the
bootargs variable in plan9.ini(8).
Start kfs(4) with extra disk buffers:
|
FILES
|
#s/boot #//boot/boot |
SOURCE
|
/sys/src/9/boot |
SEE ALSO
|
root(3), dhcpd(8), init(8) |
BUGS
|
The use of bootargs in general is odd. The configuration specification
for fossil and venti servers is particularly odd, but it does
cover the common cases well. |