123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538 |
- .TH 9BOOT 8
- .SH NAME
- 9boot, 9bootpbs, 9load, 9loadusb, pbs \- PC bootstrap programs
- .SH SYNOPSIS
- .I none
- .SH DESCRIPTION
- .I 9boot
- is a specialized Plan 9 kernel loaded by
- the PXE download (BOOTP/DHCP followed by TFTP)
- found in any reasonable Ethernet card's BIOS; it bootstraps Plan 9 by using
- PXE to load another
- .B 386
- or
- .B amd64
- kernel and start it.
- .PP
- .IR 9bootpbs ,
- .I 9load
- and
- .I 9loadusb
- are less-commonly-used variants
- that reside in a FAT file system under the name
- .L 9load
- and bootstrap Plan 9.
- .I 9bootpbs
- is like
- .I 9boot
- but it can be started by a partition boot sector (PBS),
- as can
- .I 9load
- and
- .IR 9loadusb .
- It is intended to PXE boot older machines without working PXE ROMs.
- .I 9load
- and
- .I 9loadusb
- read FAT file systems.
- .I 9loadusb
- will use only the BIOS's device drivers,
- and thus can load from FAT file systems on USB devices.
- In contrast,
- .I 9load
- will
- .I not
- use BIOS device drivers and cannot read USB devices.
- .PP
- This profusion of loaders is unfortunate, but at least they
- are compiled from the same source.
- The division into separate programs is dictated by the need to fit
- within the first 640K of memory
- and the need to avoid intermixing BIOS and non-BIOS disk access.
- .PP
- These programs are run automatically by the boot procedures described below;
- they cannot be run directly by hand.
- There are two bootstrap sequences:
- .IP \- 3
- PXE BIOS,
- .IR 9boot ,
- kernel
- .IP \-
- BIOS, MBR, disk partition PBS,
- .IR 9load ,
- kernel
- .\" .IP \-
- .\" BIOS, floppy PBS,
- .\" .IR 9load ,
- .\" kernel
- .PP
- In summary,
- Plan 9 is usually booted on a PC
- by using a PXE-capable BIOS to boot
- .I 9boot
- directly over the ethernet.
- File servers that must be able to boot when other machines are down
- boot directly from a Plan 9 disk partition
- .\" or boot floppy
- prepared using
- .B format
- to install the appropriate files and bootstrap sectors
- (see
- .IR prep (8)).
- .PP
- Details follow.
- .SS Kernel loading
- .I 9boot
- is a bootstrap program that loads and starts a program,
- typically the kernel, on a PC.
- It is run by the PXE boot ROM of a PC,
- which loads
- .I 9boot
- at physical address
- .B 0x7C00
- (31K).
- When it starts running,
- it switches to 32-bit mode.
- It then double maps the first 16Mb of physical memory to
- virtual addresses
- .B 0
- and
- .BR 0x80000000 .
- Only devices which can be automatically configured,
- e.g. most PCI ethernet adapters,
- will be recognised.
- If the file
- .BI /cfg/pxe/ ether
- can be located via a DHCP server,
- where
- .I ether
- is the lower-case MAC address of a recognised ethernet adapter,
- the contents are obtained by TFTP and used as a
- .IR plan9.ini (8).
- .I 9boot
- then loads the
- .I bootfile
- named within via TFTP,
- trying each ethernet in sequence,
- at the entry address specified by the kernel executable's header,
- usually virtual
- .BR 0xF0100020 .
- After loading,
- .I 9boot
- creates a Gnu Multiboot header in low memory for
- the benefit of the loaded kernel
- and
- control is passed to the entry location
- in 32-bit protected mode, even for 64-bit kernels.
- So far, only
- .B amd64
- kernels expect Multiboot headers.
- .PP
- Some options in
- .B plan9.ini
- are used by
- .IR 9boot :
- .TF bootfile=manual
- .TP
- .B console
- .TP
- .B baud
- Specifies the console device and baud rate if not a display.
- .TP
- .BI ether n
- Ethernet interfaces. These can be used to load the
- .I bootfile
- over a network.
- .TP
- .BI bootfile= bootfile
- Specifies the
- .IR bootfile .
- .ig
- .TP
- .B bootfile=auto
- Default.
- .TP
- .B bootfile=local
- Like
- .IR auto ,
- but do not attempt to load over the network.
- ..
- .TP
- .B bootfile=manual
- After determining which devices are available for loading from,
- enter prompt mode.
- .PD
- .PP
- .I 9load
- is a similar bootstrap program,
- loaded by the PC partition boot sector program (PBS),
- which usually resides in the first
- sector of the active disk partition.
- It is initially loaded at physical address
- .BR 0x10000 (64K);
- it begins execution at virtual address
- .BR 0x80010000 .
- In order to find configuration information,
- .I 9load
- searches all units on devices
- .\" .BR fd
- .\" and
- .B sd?[0-9]*
- (all
- .B sd
- devices),
- for a file called
- .\" .B plan9\eplan9.ini
- .\" or
- .B plan9.ini
- (see
- .IR plan9.ini (8))
- on a FAT partition named
- .B dos
- or
- .BR 9fat .
- If one is found, searching stops and the file is read into memory
- at physical address
- .B 0x1200
- where it can be found later by any loaded
- .IR bootfile .
- .PP
- When the search for
- .B plan9.ini
- is done,
- .I 9load
- proceeds to determine which bootfile to load.
- If there was no
- .I bootfile
- option,
- .I 9load
- searches
- .B sd?[0-9]*
- FAT partitions for a kernel
- (any file named
- .BR 9pc* ,
- .B 9k8*
- or
- .BR 9k10* )
- and if it finds exactly one kernel in a given FAT partition,
- chooses it.
- .I 9load
- then attempts to load the
- .IR bootfile .
- .ig
- unless
- the
- .B bootfile=manual
- option was given, in which case prompt mode is entered immediately.
- ..
- .ig
- If the default device is
- .BR fd ,
- .I 9load
- will prompt the user for input before proceeding with the
- default bootfile load after 5 seconds;
- this prompt is omitted if a
- .I bootfile
- option
- was given.
- ..
- .PP
- .I 9load
- prints the list of available
- .IR device s
- and
- enters prompt mode on encountering any error
- or if directed to do so by a
- .B bootfile=manual
- option.
- In prompt mode, the user is required to type
- a
- .IB bootfile
- in response to the
- .L Boot
- .L from:
- prompt.
- .br
- .ne 4
- .SS Bootfile
- The
- .I bootfile
- can be specified to these programs as a
- .B bootfile=
- entry in
- .IR plan9.ini ,
- or if booting from the ethernet, by a BOOTP server
- (see
- .B Kernel
- .B loading
- below).
- If loading with
- .IR 9load ,
- the
- .I bootfile
- may be a Plan 9 boot image compressed with
- .IR gzip (1).
- In all cases,
- the uncompressed kernel must be in Plan 9 boot image, ELF or ELF64 format.
- If the
- .B plan9.ini
- file contains multiple
- .B bootfile=
- entries,
- these programs will present a numerical menu of the choices; type
- the corresponding number to select an entry.
- .PP
- The format of the
- .I bootfile
- name is
- .IB device ! file
- or
- .IB device ! partition ! file\f1.
- If
- .BI ! file
- is omitted, the default for the particular
- .I device
- is used.
- Supported
- .I devices
- are
- .TF \fLethern
- .PD
- .TP
- .BI ether n
- Ethernet,
- .I 9boot
- only.
- .I N
- specifies the Ethernet device number.
- If a
- .I partition
- is specified, it is taken to be the name of a host machine
- from which to load the kernel.
- .TP
- .BI sd Cn
- Normal disk,
- .I 9load
- only.
- The device name format is described in
- .IR sd (3).
- A
- .I partition
- must be given and must normally
- name a partition containing a FAT file system.
- .\" The name
- .\" .B dos
- .\" refers to the first DOS partition on a given device.
- It is common for Plan 9 partitions to contain a small
- FAT file system for configuration.
- By convention, this partition is called
- .BR 9fat .
- There is no default partition,
- but if
- .I file
- is omitted,
- .I 9load
- will load a kernel directly from the named partition
- without any interpretation of a file system.
- .
- .ig
- .TP
- .BI fd n
- An MS-DOS floppy disk,
- .I 9load
- only.
- .I N
- specifies the floppy drive, either
- 0 or 1.
- The
- .I bootfile
- is the contents of the MS-DOS
- .IR file .
- There is no default file.
- For compatibility with normal disks, a
- .I partition
- may be given, but only
- .B dos
- is recognized:
- .BI fd0!dos! file\f1.
- ..
- .
- .TP
- .BI bios n
- USB or other BIOS device,
- .IR 9loadusb
- only.
- .I 9load
- loads from a FAT file system on
- the first LBA device
- in the BIOS's list of devices to try to boot from,
- using the BIOS INT 13 calls also used by
- .IR pbslba .
- It does not understand any form of partition table;
- see the
- .B EXAMPLES
- in
- .IR prep (8)
- for how to format such a device.
- .TP
- .BI sdB n
- USB or other BIOS device's partition,
- .IR 9loadusb
- only.
- A special case of
- .BI sd Cn
- that uses
- .BI bios n
- to read from a FAT file system.
- .SS Boot Sectors
- A copy of the Plan 9 PBS is kept in
- .BR /386/pbs ,
- but due to the ``cylinder-head-sector'' (CHS) addressing mode of old BIOSes, it can only
- operate up to 8.5GB into the disk.
- Plan 9 partitions further into the disk
- can only be booted using
- .BR /386/pbslba ,
- and then only if the machine's BIOS supports
- linear block addressing (LBA) mode for disk transfers.
- .PP
- When booting from disk,
- .\" or floppy,
- the BIOS loads the
- first sector of the medium at location
- .BR 0x7C00 .
- In the case of a disk, it is the master boot record (MBR).
- .\" In the case of a floppy, this is the PBS.
- The MBR copies itself to address
- .BR 0x600 ,
- finds the active partition and loads its PBS at address
- .BR 0x7C00 .
- A copy of the Plan 9 MBR is kept in
- .BR /386/mbr ;
- some commercial MBRs cannot read sectors
- past 2GB.
- The Plan 9 MBR can read sectors up to 8.5GB into
- the disk, and further if the BIOS supports LBA.
- The single file
- .B /386/mbr
- detects whether the BIOS supports LBA and
- acts appropriately, defaulting to CHS mode
- when LBA is not present.
- The PBSs cannot do this due to code size limitations.
- The Plan 9 MBR is suitable for booting non-Plan-9
- operating systems,
- and (modulo the large disk constraints just described)
- non-Plan-9 MBRs are suitable for booting Plan 9.
- .br
- .ne 4
- .SS Other facilities and caveats
- .I 9load
- parses the master boot record and Plan 9 partition tables
- (see
- .IR prep (8)),
- leaving partitioning information appended to the
- in-memory contents of
- .I plan9.ini
- for the
- .IR bootfile .
- This is used by
- .IR sd (3)
- to initialize partitions so that
- may be read for NVRAM contents or
- .IR fossil (4)
- or
- .IR kfs (4)
- file systems can be mounted as the root file system.
- On ISO 9660 CDs,
- .I 9load
- treats the contents of a file named
- .B /bootdisk.img
- as a
- .B 9fat
- partition,
- and it is assumed to contain the image of a FAT file system.
- A more extensive partitioning is typically done by
- .I fdisk
- and
- .I prep
- as part of
- .I termrc
- or
- .I cpurc
- (see
- .IR cpurc (8)).
- .I 9boot
- cannot parse partition tables,
- as it lacks disk drivers, so add
- .L readparts=
- to the machine's
- .B /cfg/pxe
- file, per
- .IR plan9.ini (8),
- if needed.
- .PP
- A
- control-P
- character typed at any time on the console causes
- .B 9boot
- to perform a hardware reset
- (Ctrl-Alt-Del can also be used on a PC keyboard).
- .PP
- .I 9load
- must be contiguously allocated on
- the disk.
- See
- .IR dossrv (4)
- for information on ensuring this.
- .SH FILES
- .TF /cfg/pxe
- .TP
- .B /386
- these programs reside here
- .TP
- .BI /cfg/pxe
- directory of configuration
- .RI ( plan9.ini )
- files on your TFTP server
- .PP
- .IB "FAT-filesystem" :\e9load
- .br
- .IB "FAT-filesystem" :\eplan9.ini
- .\" .br
- .\" .IB "FAT-filesystem" :\eplan9\eplan9.ini
- .SH SOURCE
- .TF "/sys/src/9/^(pc port ip)"
- .PD 0
- .TP
- .B /sys/src/boot/pc
- first-stage disk boot sectors (MBR, PBS)
- .TP
- .B /sys/src/9/pcboot
- PC-bootstrap-specific source
- .TP
- .B /sys/src/9/^(pc port ip)
- common kernel source
- .PD
- .SH "SEE ALSO"
- .IR 8l (1),
- .IR cons (3),
- .IR booting (8),
- .IR dhcpd (8),
- .IR fshalt (8),
- .IR mkusbboot (8),
- .IR plan9.ini (8),
- .IR prep (8)
- .SH BUGS
- Some of the work done by
- .I 9boot
- is duplicated by the loaded kernel,
- but usually by the same source code.
- .PP
- .B bios
- and
- .B sdB
- usually only work on the first LBA device in the BIOS's list of boot devices,
- if they work at all.
- .PP
- USB keyboards will only work with
- .I 9boot
- if the BIOS emulates a PS/2 keyboard (and that is enabled).
|