The main purpose of this program is to load the system kernel while dealing with
the pitfalls of the PC BIOS architecture.

As described in
boot_amd64(8),
this program is loaded by the
biosboot(8)
primary bootstrap loader and provides a convenient way to load the kernel.
This program acts as an enhanced boot monitor for PC systems, providing a
common interface for the kernel to start from.

The sequence of its operation is as follows: initialization, parsing the
configuration file, then an interactive command line. While at the command
line you have 5 seconds to type any commands, if needed. If time expires, the
kernel will be loaded according to the current variable settings (see the
set command). Each time a kernel load fails, the
timeout is increased by one second. The sequence of
boot operations is as follows:

Set up a protected mode environment which catches and
reports processor exceptions and provides a simple protected-mode BIOS
interface.

Probe for console devices, which includes the (default) PC
VGA+Keyboard console (pc0) and up to four serial
consoles (com0 through
com3) connected to the serial ports. Display
messages to the default console about the devices found.

Detect memory. Conventional memory is detected by querying
the BIOS. Extended memory is detected by probing page-by-page through the
address space, rather than asking the BIOS; many BIOS's cannot report
larger than 64M of memory. All memory found is reported to the default
console device.

Probe for APM support in the BIOS. Display a message if
support is present.

If the file /etc/boot.conf
exists on the filesystem boot was loaded
from, open and parse it. Lines beginning with the ‘#’
character, as well as whitespace at the beginning of lines, are ignored.
The file may contain any commands boot
accepts at the interactive prompt. Though default settings usually
suffice, they can be changed here.

boot.conf processing can be skipped, and the
automatic boot cancelled, by holding down either Control key as
boot starts.

The header line

>> OpenBSD/amd64 BOOT
[x.xx]

is displayed to the active console, where
x.xx is the version number of the
boot program, followed by the

boot>

prompt, which means you are in interactive mode and may enter commands. If
you do not, boot will proceed to load the
kernel with the current parameters after the timeout period has
expired.

By default, boot attempts to load the kernel
executable /bsd. If it fails to find the kernel
and no alternative kernel image has been specified, the system will be unable
to boot.

Boots the specified kernel image with any options given. If
device or
image are omitted, values from
boot variables will be used.

When selecting the device to boot from,
boot makes no distinction between SCSI and
IDE type drives; they are detected as ‘hd’ devices.
Therefore, to boot kernel /bsd from slice
‘a’ on the first hard drive (irrespective of device type),
specify “boot hd0a:/bsd”.

Prints a list of available commands and machine dependent
commands, if any.

machine
[command]

Issues machine-dependent commands. These are defined for
amd64 architecture:

boot

Boots the specified partition boot block in place of
the original (MBR) boot block:

machine boot hd0a

Where a is the first MBR partition
table entry, and d the last.

comaddr

Set the I/O base address for the serial port to be used
as serial console.

diskinfo

Prints a list of hard disks installed on your system
including: BIOS device number, and the BIOS geometry.

memory

If used without any arguments, this command will print
out the memory configuration as determined through BIOS routines.
Otherwise the arguments specify how to modify the memory
configuration. They take the form of:

=size[KMG]

[+-]size@address

Meaning to add(+), exempt(-) or limit(=) the amount of memory specified
by size at the location specified by
address. Both size and base address
can be specified as octal, decimal, or hexadecimal numbers, as
accepted by the
strtoul(3)
routine. Memory size may be suffixed by K or k, for kilobytes; M or m,
for megabytes; and G or g, for gigabytes.

The limit(=) option simply ignores any memory above the given memory
limit. This is useful for testing kernels in an artificially
constrained memory situation. For example, the following limits the
kernel to using only memory below 64MB:

machine mem =64M

Memory segments are not required to be adjacent to each other; the only
requirement is that there is real physical memory under the range
added. The following example adds 32MB of memory right after the first
16MB:

machine mem +0x2000000@0x1000000

Another useful command is to withdraw a range of memory from OS usage
(it may have been wrongfully reported as useful by the BIOS). This
example effectively excludes the 15–16MB range from the map of
useful memory:

If invoked without arguments, prints a list of variables
and their values. If only varname is
specified, displays contents of that variable. If
varname and
value are both specified, sets that
variable to the given value. Variables include:

addr

Address at which to load the kernel.

debug

Debug flag if boot was
compiled with DEBUG defined.

device

Boot device name (e.g., fd0a,
hd0a).

howto

Options to pass to the loaded kernel.

image

File name containing the kernel image.

timeout

Number of seconds boot will wait for human intervention
before booting the default kernel image.

tty

Active console device name (e.g.,
com0, com1,
pc0).

stty
[device
[speed]]

Displays or sets the speed
for a console device. If changing the
baudrate for the currently active console,
boot offers you five seconds of grace time
before committing the change to allow you to change your terminal's speed
to match. If changing speed not for the
active console, the baudrate is set for the
next time you switch to a serial console. The
baudrate value is not used for the pc0 console.

Remove the 5 second pause at boot-time permanently, causing
boot to load the kernel immediately without
prompting:

# echo "boot" >
/etc/boot.conf

Use serial console. A null modem cable should connect the specified serial port
to a terminal. Useful for debugging.

boot> set tty com0

Invoke the serial console at every boot:

# echo "set tty com0" >
/etc/boot.conf

Boot the kernel named /bsd from the second hard
disk in “User Kernel Configuration” mode (see
boot_config(8)).
This mechanism allows for the explicit enabling and disabling of devices
during the current boot sequence, as well as the modification of device
parameters. Once booted, such changes can be made permanent by using
config(8)'s
-e option.